如何使用OpenRewrite为Javadoc添加@author标签?
核心逻辑
先判断目标方法是否存在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; } }
关键说明
- Javadoc.Author实例化:
构造函数第三个参数是List<JavadocElement>,用Javadoc.Text承载作者名称文本即可,这是填充实际作者信息的核心位置。 - 作者信息来源:
可直接硬编码(如示例中的AUTHOR_NAME),也可从配置文件、环境变量或自定义参数中读取,根据场景灵活调整。 - UUID的作用:
OpenRewrite要求每个语法树元素有唯一ID,用UUID.randomUUID()生成即可满足要求。 - 格式保持:
新建Javadoc时,通过md.getPrefix().getWhitespace()继承方法原有的前缀空格,保证注释格式与代码风格一致。
内容的提问来源于stack exchange,提问作者Eisenknurr
相关产品推荐
相关产品推荐

