visitConstructModel()

in lib/generator.js [1985:2033]


  visitConstructModel(ast, level) {
    assert.equal(ast.type, 'construct_model');
    if (ast.aliasId.isModule) {
      // 这里做了粗糙改动 直接生成aliasId对应的models
      let type = 'model';
      let moduleName = _name(ast.aliasId);
      let modelName = _subModelName(ast.propertyPath.map((item) => {
        return item.lexeme;
      }).join('.'));
      const externEx = this.usedExternException.get(moduleName);
      if (externEx && externEx.has(modelName)) {
        type = 'exception';
      }
      this.emit(this.getModelName(modelName, moduleName, type));
    }

    if (ast.aliasId.isModel) {
      let type = 'model';
      let mainModelName = _name(ast.aliasId);
      mainModelName = _subModelName([mainModelName, ...ast.propertyPath.map((item) => {
        return item.lexeme;
      })].join('.'));

      if(mainModelName.startsWith('$') && _type(mainModelName)) {
        mainModelName = _type(mainModelName);
        this.pushImports(mainModelName);
        this.emit(mainModelName);
      } else {
        if (this.predefined[mainModelName] && this.predefined[mainModelName].isException) {
          type = 'exception';
        }
        this.emit(this.getModelName(mainModelName, '', type));
      }
    }

    this.emit('(');
    if (ast.object && ast.object.fields.length !== 0) {
      // 判断是否有初始化赋值
      // this.visitObject(ast.object, level);
      this.emit('\n');
      for (var i = 0; i < ast.object.fields.length; i++) {
        this.visitModelField(ast.object.fields[i], level, i === ast.object.fields.length - 1);
      }
      this.emit(')', level);
    } else{
      this.emit(')');
    }

  }