visitConstructModel()

in lib/generator.js [2869:2908]


  visitConstructModel(ast, level, env) {
    assert.equal(ast.type, 'construct_model');
    let modelName = '';
    this.emit('&');
    if ((ast.inferred && ast.inferred.moduleName) || ast.aliasId.isModule) {
      this.visitModuleName(ast.aliasId);
      for (let i = 0; i < ast.propertyPath.length; i++) {
        const item = ast.propertyPath[i];
        modelName += _format(_name(item));
      }
      const externEx = this.usedExternException.get(_name(ast.aliasId));
      if (externEx && externEx.has(modelName)) {
        modelName += 'Error';
      }
      modelName = `.${modelName}`;
    } else {
      modelName = _modelName(_format(_name(ast.aliasId)));
      if (this.predefined[modelName] && this.predefined[modelName].isException) { 
        modelName += 'Error';
      }
    }
    if (ast.object && ast.object.fields.length > 0) {
      const fields = ast.object.fields;
      this.emit(`${modelName}{\n`);
      for (let i = 0; i < fields.length; i++) {
        const field = fields[i];
        this.visitConstructModelField(field, level + 1, env);  
      }
      this.emit(`}`, level);
    } else {
      this.emit(`${modelName}{`);
      let comments = DSL.comment.getBetweenComments(this.comments, ast.tokenRange[0], ast.tokenRange[1]);
      if (comments.length > 0) {
        this.emit('\n');
        this.visitComments(comments, level + 1);
        this.emit('', level);
      }
      this.emit(`}`);
    }
  }