You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用OpenRewrite为Javadoc添加@author标签?

给方法Javadoc添加@author标签的OpenRewrite实现方案

核心逻辑

先判断目标方法是否存在Javadoc,再检查Javadoc中是否已包含@author标签。若两者有任一缺失,分别处理:无Javadoc则新建并添加@author;有Javadoc但无@author则追加标签。

具体实现代码

import org.openrewrite.java.J;
import org.openrewrite.java.Javadoc;
import org.openrewrite.java.Javadoc$Author;
import org.openrewrite.java.Javadoc$Text;
import org.openrewrite.java.tree.Markers;
import org.openrewrite.java.tree.ListUtils;
import org.openrewrite.ExecutionContext;

import java.util.List;
import java.util.UUID;

public class AddAuthorTagToJavadoc extends org.openrewrite.java.JavaIsoVisitor<ExecutionContext> {

    private static final String AUTHOR_NAME = "你的作者名称"; // 替换为实际作者信息

    @Override
    public J.MethodDeclaration visitMethodDeclaration(J.MethodDeclaration methodDeclaration, ExecutionContext ctx) {
        J.MethodDeclaration md = super.visitMethodDeclaration(methodDeclaration, ctx);
        
        // 获取方法现有Javadoc
        Javadoc javadoc = md.getJavadoc();
        
        // 检查是否已存在@author标签
        boolean hasAuthorTag = javadoc != null && javadoc.getTags().stream()
                .anyMatch(tag -> tag instanceof Javadoc$Author);
        
        if (!hasAuthorTag) {
            Javadoc updatedJavadoc;
            if (javadoc == null) {
                // 新建Javadoc并添加@author标签
                Javadoc$Author authorTag = new Javadoc$Author(
                        UUID.randomUUID(),
                        Markers.EMPTY,
                        List.of(new Javadoc$Text(Markers.EMPTY, AUTHOR_NAME))
                );
                updatedJavadoc = new Javadoc(
                        UUID.randomUUID(),
                        Markers.EMPTY,
                        List.of(), // Javadoc摘要部分,可按需补充内容
                        List.of(authorTag),
                        md.getPrefix().getWhitespace()
                );
                md = md.withJavadoc(updatedJavadoc);
            } else {
                // 给已有Javadoc追加@author标签
                Javadoc$Author authorTag = new Javadoc$Author(
                        UUID.randomUUID(),
                        Markers.EMPTY,
                        List.of(new Javadoc$Text(Markers.EMPTY, AUTHOR_NAME))
                );
                List<Javadoc.JavadocTag> updatedTags = ListUtils.concat(javadoc.getTags(), authorTag);
                updatedJavadoc = javadoc.withTags(updatedTags);
                md = md.withJavadoc(updatedJavadoc);
            }
        }
        
        return md;
    }
}

关键说明

  1. Javadoc.Author实例化:
    构造函数第三个参数是List<JavadocElement>,用Javadoc.Text承载作者名称文本即可,这是填充实际作者信息的核心位置。
  2. 作者信息来源:
    可直接硬编码(如示例中的AUTHOR_NAME),也可从配置文件、环境变量或自定义参数中读取,根据场景灵活调整。
  3. UUID的作用:
    OpenRewrite要求每个语法树元素有唯一ID,用UUID.randomUUID()生成即可满足要求。
  4. 格式保持:
    新建Javadoc时,通过md.getPrefix().getWhitespace()继承方法原有的前缀空格,保证注释格式与代码风格一致。

内容的提问来源于stack exchange,提问作者Eisenknurr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 18:23:12