visitFieldType()

in lib/generator.js [922:1012]


  visitFieldType(value, level, modelName, fieldName) {
    if (value.type === 'modelBody') {
      const subModelName = _subModelName([modelName, fieldName].join('.'));
      this.emit(this.getModelName(subModelName));
    } else if (value.type === 'array') {
      this.visitType(value);
    } else if (value.fieldType === 'array') {
      this.pushImports('array');
      this.emit('List[');
      this.visitFieldType(value.fieldItemType, level, modelName, fieldName);
      this.emit(']');
    } else if (value.fieldType === 'map') {
      this.pushImports('map');
      this.emit('Dict[');
      this.emit(`${_type(_name(value.keyType))}, `);
      this.visitFieldType(value.valueType);
      this.emit(']');
    } else if (value.type === 'map') {
      this.pushImports('map');
      this.emit('Dict[');
      this.emit(`${_type(_name(value.keyType))}, `);
      this.visitFieldType(value.valueType);
      this.emit(']');
    } else if (value.tag === Tag.TYPE) {
      const type = _type(value.lexeme);
      this.pushImports(type);
      this.emit(`${type}`);
    } else if (value.tag === Tag.ID) {
      this.visitType(value);
    } else if (value.type === 'moduleModel') {
      let type = 'model';
      const [moduleId, ...models] = value.path;
      const modelName = _subModelName(models.map((item) => item.lexeme).join('.'));
      const externEx = this.usedExternException.get(_name(moduleId.lexeme));
      if (externEx && externEx.has(modelName)) {
        type = 'exception';
      }
      
      this.emit(this.getModelName(modelName, _name(moduleId)), type);
      
    } else if (value.type === 'subModel') {
      const [moduleId, ...rest] = value.path;
      const modelName = _subModelName([moduleId.lexeme, ...rest.map((item) => {
        return item.lexeme;
      })].join('.'));
      this.emit(this.getModelName(modelName));
    } else if (typeof value.fieldType === 'string'){
      const type = _type(value.fieldType);
      this.pushImports(type);
      this.emit(type);
    } else if (value.fieldType.type === 'moduleModel') {
      let type = 'model';
      const [moduleId, ...models] = value.fieldType.path;
      const modelName = _subModelName(models.map((item) => item.lexeme).join('.'));
      const externEx = this.usedExternException.get(_name(moduleId.lexeme));
      if (externEx && externEx.has(modelName)) {
        type = 'exception';
      }
      this.emit(this.getModelName(modelName, _name(moduleId), type));
      
    } else if (value.fieldType.type === 'moduleTypedef') {
      const [moduleId, ...rest] = value.fieldType.path;
      const type = rest.map((item) => { return item.lexeme; }).join('.');
      this.emit(this.visitTypedef(type, moduleId));
    } else if (value.fieldType.type === 'typedef' || value.fieldType.idType === 'typedef') {
      this.emit(this.visitTypedef(value.fieldType));
    } else if (value.fieldType.type === 'subModel') {
      const [moduleId, ...rest] = value.fieldType.path;
      const modelName = _subModelName([moduleId.lexeme, ...rest.map((item) => {
        return item.lexeme;
      })].join('.'));
      this.emit(this.getModelName(modelName));
    } else if (value.fieldType.type) {
      const type = _type(value.fieldType.lexeme);
      this.pushImports(type);
      this.emit(`${type}`);
    } else if (value.fieldType.idType === 'model') {
      const predefined = value.fieldType.moduleName ? this.usedExternException.get(value.fieldType.moduleName) : this.predefined;
      let type = 'model';
      if (predefined[_name(value.fieldType)] && predefined[_name(value.fieldType)].isException) {
        type = 'exception';
      }
      this.emit(this.getModelName(_name(value.fieldType), value.fieldType.moduleName, type));
    } else if (value.fieldType.idType === 'module') {
      this.emit(this.getModelName('', _type(_name(value.fieldType)), 'module'));
    } else if (value.fieldType.idType === 'builtin_model') {
      const type = _type(value.fieldType.lexeme);
      this.pushImports(type);
      this.emit(`${type}`);
    }
  }