visitAnnotation()

in lib/common_generator.js [733:872]


  visitAnnotation(annotation, level) {
    if (!annotation || !annotation.value) {
      if (this.ast.modelName) {
        const modelName = _name(this.ast.modelName);
        this.emitln(`/**`, level);
        this.emitln(` * `, level);
        this.emitln(` * {@link ${this.ast.title ? this.ast.title : modelName}} extends {@link ${this.ctx.isRequestModel ? 'RequestModel' : 'TeaModel'}}`, level);
        this.emitln(` *`, level);
        this.emitln(` * <p>${this.ast.title ? this.ast.title : modelName}</p>`, level);
        this.emitln(` */`, level);
      }
      return;
    }
    let comments = DSL.comment.getFrontComments(this.ctx.comments, annotation.index);
    this.visitComments(comments, level);
    var node = Annotation.parse(annotation.value);
    var description = node.items.find((item) => {
      return item.type === 'description';
    });
    var summary = node.items.find((item) => {
      return item.type === 'summary';
    });
    var _return = node.items.find((item) => {
      return item.type === 'return';
    });
    var deprecated = node.items.find((item) => {
      return item.type === 'deprecated';
    });
    var params = node.items.filter((item) => {
      return item.type === 'param';
    }).map((item) => {
      return {
        name: item.name.id,
        text: item.text.text.trimEnd()
      };
    });
    var throws = node.items.filter((item) => {
      return item.type === 'throws';
    }).map((item) => {
      return item.text.text.trimEnd();
    });

    let hasNextSection = false;
    this.emitln(`/**`, level);
    const descriptionText = description ? description.text.text : '';
    const summaryText = summary ? summary.text.text : '';
    const returnText = _return ? _return.text.text.trimEnd() : '';
    if (summaryText !== '') {
      if (hasNextSection) {
        this.emitln(` * `, level);
      }
      this.emitln(` * <b>summary</b> : `, level);
      const summaryTexts = md2Html(summaryText).trimEnd();
      summaryTexts.split('\n').forEach((line) => {
        this.emitln(` * ${line}`, level);
      });
      hasNextSection = true;
    }
    if (descriptionText !== '') {
      this.emitln(` * <b>description</b> :`, level);
      const descriptionTexts = md2Html(descriptionText).trimEnd();
      descriptionTexts.split('\n').forEach((line) => {
        this.emitln(` * ${line}`, level);
      });
      hasNextSection = true;
    }
    if (deprecated) {
      if (hasNextSection) {
        this.emitln(` * `, level);
      }
      const deprecatedText = deprecated.text.text.trimEnd();
      this.emit(` * @deprecated `, level);
      deprecatedText.split('\n').forEach((line, index) => {
        if (index === 0) {
          this.emitln(`${line}`);
        } else {
          this.emitln(` * ${line}`, level);
        }
      });
      hasNextSection = true;
    }
    if (params.length > 0) {
      if (hasNextSection) {
        this.emitln(` * `, level);
      }
      params.forEach((item) => {
        this.emit(` * @param ${item.name} `, level);
        const items = item.text.trimEnd().split('\n');
        items.forEach((line, index) => {
          if (index === 0) {
            this.emitln(`${line}`);
          } else {
            this.emitln(` * ${line}`, level);
          }
        });
      });
      hasNextSection = true;
    }
    if (returnText !== '') {
      this.emit(` * @return `, level);
      const returns = returnText.split('\n');
      returns.forEach((line, index) => {
        if (index === 0) {
          this.emitln(`${line}`);
        } else {
          this.emitln(` * ${line}`, level);
        }
      });
      hasNextSection = true;
    }
    if (throws.length > 0) {
      if (hasNextSection) {
        this.emitln(` * `, level);
      }
      throws.forEach((item) => {
        this.emit(` * @throws `, level);
        const items = item.trimEnd().split('\n');
        items.forEach((line, index) => {
          if (index === 0) {
            this.emitln(`${line}`);
          } else {
            this.emitln(` * ${line}`, level);
          }
        });
      });
    }

    if (this.ast.modelName) {
      const modelName = _name(this.ast.modelName);
      this.emitln(` * `, level);
      this.emitln(` * {@link ${this.ast.title ? this.ast.title : modelName}} extends {@link ${this.ctx.isRequestModel ? 'RequestModel' : 'TeaModel'}}`, level);
      this.emitln(` *`, level);
      this.emitln(` * <p>${this.ast.title ? this.ast.title : modelName}</p>`, level);
    }

    this.emitln(` */`, level);
    if (deprecated) {
      this.emitln(`@Deprecated`, level);
    }
  }