Javaparser:如何注释现有类?

问题描述 投票:0回答:2

我正在尝试使用自定义注释来注释类。我有一个简单的类 (Foo) 和一个 ClassVisitor,它将注释添加到现有的类中。

public class Foo{

    public static void main(String[] args) {
        SourceRoot sourceRoot = new SourceRoot(Path.of(".\"));
        CompilationUnit cu = sourceRoot.parse("", "MyFile.java);
        ClassVisitor cv = new ClassVisitor();
        cu.accept(cv, null);
    }
}

class ClassVisitor extends VoidVisitorAdapter<Void> {

    private final String MY_ANNOTATION = "@myAnnotation";
    
    @Override
    public void visit(ClassOrInterfaceDeclaration cid, Void arg) {
        super.visit(cid, arg);
        boolean isAnnotated = false;
        for (Node node : cid.getAnnotations()){
            if (MY_ANNOTATION == node.toString()) {
                isAnnotated = true;
                break;
            }
        }
        if (isAnnotated == false) {
            cid.addAnnotation(MY_ANNOTATION); // error happens here
        }
    }
}

执行代码时,出现以下错误:

线程“main”中的异常 com.github.javaparser.ParseProblemException:遇到意外 标记:“@”“@” 位于第 1 行第 1 列。

期待其中之一:

"enum"
"exports"
"module"
"open"
"opens"
"provides"
"record"
"requires"
"strictfp"
"to"
"transitive"
"uses"
"with"
"yield"
<IDENTIFIER>
java class annotations javaparser
2个回答
0
投票

省略

@
,只使用注释名称

private final String MY_ANNOTATION = "myAnnotation";

参见:如何使用 JavaParser 将注释放在新行上?


0
投票

这么晚了,我知道,但是......

在此片段中:

if (MY_ANNOTATION == node.toString()) ...

使用 equals() 方法比较两个字符串:

if (MY_ANNOTATION.equals(node.toString())) ...
© www.soinside.com 2019 - 2024. All rights reserved.