visitType()

in lib/generator.js [1354:1393]


  visitType(ast, level) {
    if (ast.type === 'moduleModel') {
      const [ mainId, ...rest ] = ast.path;
      let moduleName = _importFilter(_name(ast.path[0]).toLowerCase());
      let modelName = rest.map(node => {
        return _upperFirst(_name(node));
      }).join('');
      const externEx = this.usedExternException.get(_name(mainId));
      if (externEx && externEx.has(modelName)) {
        modelName += 'Error';
      }
      this.emit(`*${moduleName}.${_format(modelName)}`);
    } else if (ast.type === 'moduleTypedef') {
      this.emit(`*`);
      for (let i = 1; i < ast.path.length; i++) {
        this.emit(`${this.typeRelover(ast.path[i], ast.path[0])}`);
      }
    } else if (ast.type === 'subModel') {
      this.emit(`*${_format(_name(ast.path[0]))}`);
      for (let i = 1; i < ast.path.length; i++) {
        this.emit(`${_format(_name(ast.path[i]))}`);
      }
    } else if ((ast.type === 'map' || ast.fieldType === 'map') && _name(ast.keyType)) {
      this.emit(`map[${this.getType(_name(ast.keyType), false)}]`);
      this.visitPointerType(ast.valueType, level);
    } else if (ast.fieldType === 'array' || ast.type === 'array') {
      this.emit(`[]`);
      this.visitPointerType(ast.subType || ast.itemType, level);
    } else if (ast.idType === 'module' || this.clientName[_name(ast)]) {
      this.emit(`${this.clientName[_name(ast)]}`);
    } else if (this.typeRelover(ast)) {
      this.emit(this.getType(this.typeRelover(ast), false));
    } else if (ast.fieldType && DSL.util.isBasicType(ast.fieldType)) {
      this.emit(this.getType(ast.fieldType, false));
    } else if (ast.fieldType && this.typeRelover(ast.fieldType)) {
      this.emit(this.getType(this.typeRelover(ast.fieldType), false));
    } else {
      this.emit(this.getType(ast, false));
    }
  }