visitFieldType()

in lib/generator.js [950:1047]


  visitFieldType(value, level, fieldName) {
    if (value.type === 'modelBody') {
      const subModelName = this.getRealModelName(`${this.namespace}\\${this.modelDir}\\${this.modelSpace}\\${fieldName}`);
      this.emit(subModelName);
    } else if (value.type === 'array') {
      this.visitType(value);
    } else if (value.fieldType === 'array') {
      this.visitFieldType(value.fieldItemType, level, fieldName);
      this.emit('[]');
    } else if (value.fieldType === 'map') {
      this.visitFieldType(value.valueType);
      this.emit('[]');
    } else if (value.type === 'map') {
      this.visitFieldType(value.valueType);
      this.emit('[]');
    } else if (value.tag === Tag.TYPE) {
      this.emit(`${this.getType(value.lexeme)}`);
    } else if (value.tag === Tag.ID && value.idType === 'model') {
      const modelName = _name(value);
      const realModelName = this.getRealModelName(`${this.namespace}\\${this.modelDir}\\${modelName}`);
      this.emit(realModelName);
    } else if (value.tag === Tag.ID && value.idType === 'module') {
      let moduleName = _name(value);
      if(this.builtin[moduleName]) {
        moduleName = this.getType(moduleName);
      } else {
        moduleName = this.getRealClientName(moduleName);
      }
      this.emit(moduleName);
    } else if (value.tag === Tag.ID && value.idType === 'builtin_model') {
      const realModelName = this.getRealModelName(this.getType(value.lexeme));
      this.emit(realModelName);
    } else if (value.tag === Tag.ID) {
      this.emit(`${value.lexeme}`);
    } else if (value.type === 'moduleModel') {
      const [moduleId, ...models] = value.path;
      const { namespace, modelDir } = this.moduleClass.get(moduleId.lexeme);
      const moduleModelName = models.map((item) => {
        return item.lexeme;
      }).join('\\');
      const subModelName = this.getRealModelName(`${namespace}\\${modelDir}\\${moduleModelName}`);
      this.emit(subModelName);
    } else if (value.type === 'subModel') {
      const [moduleId, ...rest] = value.path;
      const subModelName = [moduleId.lexeme, ...rest.map((item) => {
        return item.lexeme;
      })].join('\\');
      const realModelName = this.getRealModelName(`${this.namespace}\\${this.modelDir}\\${subModelName}`);
      this.emit(realModelName);
    } else if (value.fieldType === 'readable' || value.fieldType === 'writable') {
      const realModelName = this.getRealModelName(this.getType(value.fieldType));
      this.emit(realModelName);
    } else if (typeof value.fieldType === 'string') {
      this.emit(`${this.getType(value.fieldType)}`);
    } else if (value.fieldType.type === 'moduleModel') {
      const [moduleId, ...models] = value.fieldType.path;
      const { namespace, modelDir } = this.moduleClass.get(moduleId.lexeme);
      const subModelName = models.map((item) => {
        return item.lexeme;
      }).join('\\');
      const realModelName = this.getRealModelName(`${namespace}\\${modelDir}\\${subModelName}`);
      this.emit(realModelName);
    } 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.getType(value.fieldType.lexeme)}`);
    } else if (value.fieldType.idType === 'model') {
      const realModelName = this.getRealModelName(`${this.namespace}\\${this.modelDir}\\${value.fieldType.lexeme}`);
      this.emit(realModelName);
    } else if (value.fieldType.idType === 'module') {
      let moduleName = _name(value.fieldType);
      if(this.builtin[moduleName]) {
        moduleName = this.getType(moduleName);
      } else {
        moduleName = this.getRealClientName(moduleName);
      }
      this.emit(moduleName);
    } else if (value.fieldType.idType === 'builtin_model') {
      const realModelName = this.getRealModelName(this.getType(value.fieldType.lexeme));
      this.emit(realModelName);
    } 
  }