visitAnnotation()

in lib/generator.js [457:544]


  visitAnnotation(annotation, level, bottom = true) {
    if (!annotation || !annotation.value) {
      return;
    }
    let comments = DSL.comment.getFrontComments(this.comments, annotation.index);
    this.visitComments(comments, level);
    var ast = Annotation.parse(annotation.value);
    var description = ast.items.find((item) => {
      return item.type === 'description';
    });
    var summary = ast.items.find((item) => {
      return item.type === 'summary';
    });
    var _return = ast.items.find((item) => {
      return item.type === 'return';
    });
    var deprecated = ast.items.find((item) => {
      return item.type === 'deprecated';
    });
    var params = ast.items.filter((item) => {
      return item.type === 'param';
    }).map((item) => {
      return {
        name: item.name.id,
        text: item.text.text.trimEnd()
      };
    });
    var throws = ast.items.filter((item) => {
      return item.type === 'throws';
    }).map((item) => {
      return item.text.text.trimEnd();
    });

    var descriptionText = description ? description.text.text.trimEnd() : '';
    var summaryText = summary ? summary.text.text.trimEnd() : '';
    var returnText = _return ? _return.text.text.trimEnd() : '';
    let hasNextSection = false;

    this.emit('/**\n', level);
    if (summaryText !== '') {
      summaryText.split('\n').forEach((line) => {
        this.emit(` * ${line}\n`, level);
      });
      hasNextSection = true;
    }
    if (descriptionText !== '') {
      if (hasNextSection) {
        this.emit(' * \n', level);
      }
      this.emit(' * @remarks\n', level);
      descriptionText.split('\n').forEach((line) => {
        this.emit(` * ${line}\n`, level);
      });
      hasNextSection = true;
    }
    if (deprecated) {
      if (hasNextSection) {
        this.emit(' * \n', level);
      }
      if (deprecated.text.text.trimEnd() === '') {
        this.emit(' * @deprecated\n', level);
      } else {
        this.emit(` * @deprecated ${deprecated.text.text.trimEnd()}\n`, level);
      }
      hasNextSection = true;
    }
    if (params.length > 0) {
      if (hasNextSection) {
        this.emit(' * \n', level);
      }
      params.forEach((item) => {
        this.emit(` * @param ${item.name} - ${item.text}\n`, level);
      });
    }
    if (returnText !== '') {
      this.emit(` * @returns ${returnText}\n`, level);
    }
    if (throws.length > 0) {
      this.emit(' * \n', level);
      throws.forEach((item) => {
        this.emit(` * @throws ${item}\n`, level);
      });
    }
    if(bottom) {
      this.emit(' */', level);
      this.emit('\n');
    }
  }