visitFieldType()

in lib/generator.js [974:1062]


  visitFieldType(value, level, modelName, fieldName) {
    if (value.type === 'modelBody') {
      var paramName = _avoidReserveName(_upperFirst(fieldName));
      const subModelName = modelName + _upperFirst(paramName);
      this.emit(subModelName);
    } else if (value.type === 'array') {
      this.visitType(value);
    } else if (value.fieldType === 'array') {
      this.emit(`List<`);
      this.visitFieldType(value.fieldItemType, level, modelName, fieldName);
      this.emit(`>`);
    } else if (value.fieldType === 'map') {
      this.emit(`Dictionary<${value.keyType.lexeme}, `);
      this.visitFieldType(value.valueType);
      this.emit(`>`);
    } else if (value.type === 'map') {
      this.emit(`Dictionary<${value.keyType.lexeme}, `);
      this.visitFieldType(value.valueType);
      this.emit(`>`);
    } else if (value.tag === Tag.TYPE) {
      this.emit(`${this._type(value.lexeme)}`);
    } else if (value.tag === Tag.ID && value.idType === 'model') {
      const modelName = _upperFirst(_name(value));
      const realModelName = this.getRealModelName(`${this.namespace}.Models`, modelName);
      this.emit(realModelName);
    } else if (value.tag === Tag.ID && value.idType === 'module') {
      let moduleName = _upperFirst(_name(value));
      moduleName = this.getRealClientName(moduleName);
      this.emit(moduleName);
    } else if (value.tag === Tag.ID && value.idType === 'builtin_model') {
      this.emit(`${value.lexeme}`);
    } else if (value.tag === Tag.ID) {
      this.emit(`${value.lexeme}`);
    } else if (value.type === 'moduleModel') {
      const [moduleId, ...models] = value.path;
      const { namespace } = this.moduleClass.get(moduleId.lexeme);
      const moduleModelName = models.map((item) => {
        return item.lexeme;
      }).join('.');
      const subModelName = this.getRealModelName(`${namespace}.Models`, moduleModelName);
      this.emit(subModelName);
    } else if (value.type === 'subModel') {
      let tempName = '';
      for (let i = 0; i < value.path.length; i++) {
        if (i > 0) {
          this.emit('.');
        }
        tempName += _upperFirst(_name(value.path[i]));
        this.emit(tempName);
      }
    } else if (typeof value.fieldType === 'string') {
      this.emit(`${this._type(value.fieldType)}`);
    } else if (value.fieldType.type === 'moduleModel') {
      const [moduleId, ...models] = value.fieldType.path;
      this.emit(`${moduleId.lexeme}.${_subModelName(models.map((item) => item.lexeme).join('.'))}`);
    } else if (value.fieldType.type === 'moduleTypedef') {
      const [moduleId, modelName] = value.fieldType.path;
      const moduleTypedef = this.moduleTypedef[moduleId.lexeme];
      const typedef = moduleTypedef[modelName.lexeme];
      if (!typedef.import) {
        this.emit(typedef.type);
      } else {
        const typedefName = this.getRealModelName(typedef.import, typedef.type);
        this.emit(typedefName);
      }
    } else if (value.fieldType.type === 'typedef' || value.fieldType.idType === 'typedef') {
      const typedef = this.typedef[value.fieldType.lexeme];
      if (!typedef.import) {
        this.emit(typedef.type);
      } else {
        const typedefName = this.getRealModelName(typedef.import, typedef.type);
        this.emit(typedefName);
      }
    } else if (value.fieldType.type) {
      this.emit(`${this._type(value.fieldType.lexeme)}`);
    } else if (value.fieldType.idType === 'model') {
      const realModelName = this.getRealModelName(`${this.namespace}.Models`, value.fieldType.lexeme);
      this.emit(realModelName);
    } else if (value.fieldType.idType === 'module') {
      let moduleName = this._type(value.fieldType.lexeme);
      moduleName = this.getRealClientName(moduleName);
      this.emit(moduleName);
    } else if (value.fieldType.idType === 'builtin_model') {
      const subModelName = this._type(value.fieldType.lexeme);
      const namespace = this.getType(subModelName);
      const realModelName = this.getRealModelName(namespace, subModelName);
      this.emit(realModelName);
    }
  }