visitEcxceptionBody()

in lib/generator.js [1337:1385]


  visitEcxceptionBody(ast, level) {
    assert.equal(ast.type, 'exceptionBody');
    let node;
    for (let i = 0; i < ast.nodes.length; i++) {
      node = ast.nodes[i];
      const fieldName = _name(node.fieldName);
      //  TODO document gen
      this.emit('/**\n', level);
      this.emit('* @var ', level);
      this.visitFieldType(node.fieldValue, level, fieldName);
      this.emit('\n');
      this.emit('*/\n', level);
      this.emit(`${_filedsAccess(fieldName)} $${fieldName};\n`, level);
    }

    this.emit('\n');
    this.emit('public function __construct($map)\n', level);
    this.emit('{\n', level);
    this.emit('parent::__construct($map);\n', level + 1);
    for (let i = 0; i < ast.nodes.length; i++) {
      node = ast.nodes[i];
      this.emit(`$this->${_name(node.fieldName)} = $map['${_name(node.fieldName)}'];\n`, level + 1);
    }
    this.emit('}\n\n', level);
    for (let i = 0; i < ast.nodes.length; i++) {
      node = ast.nodes[i];
      //  TODO document gen
      this.emit('/**\n', level);
      this.emit('* @return ', level);
      this.visitFieldType(node.fieldValue, level, _name(node.fieldName));
      this.emit('\n');
      this.emit('*/\n', level);
      this.emit(`public function get${_upperFirst(_name(node.fieldName))}()\n`, level);
      this.emit('{\n', level);
      this.emit(`return $this->${_name(node.fieldName)};\n`, level + 1);
      this.emit('}\n', level);
    }
    if (node) {
      //find the last node's back comment
      let comments = DSL.comment.getBetweenComments(this.comments, node.tokenRange[0], ast.tokenRange[1]);
      this.visitComments(comments, level);
    }

    if (ast.nodes.length === 0) {
      //empty block's comment
      let comments = DSL.comment.getBetweenComments(this.comments, ast.tokenRange[0], ast.tokenRange[1]);
      this.visitComments(comments, level);
    }
  }