1

有一种简单的方法可以使用 Eclipse JDT 检查 ICompilationUnit 中是否存在注释?

我试着做下面的代码,但我必须对超类做同样的事情。

IResource resource = ...;

ICompilationUnit cu = (ICompilationUnit) JavaCore.create(resource);

// consider only the first class of the compilation unit
IType firstClass = cu.getTypes()[0];

// first check if the annotation is pressent by its full id
if (firstClass.getAnnotation("java.lang.Deprecated").exists()) {
    return true;
}

// then, try to find the annotation by the simple name and confirms if the full name is in the imports 
if (firstClass.getAnnotation("Deprecated").exists() && //
    cu.getImport("java.lang.Deprecated").exists()) {
    return true;
}

我知道可以使用 ASTParser 解析绑定,但我没有找到检查注释是否存在的方法。有没有简单的API来做这样的事情?

4

1 回答 1

2

是的,您可以使用ASTVisitor和覆盖您需要的方法。因为,有注释类型:MarkerAnnotationNormalAnnotation等。

ASTParser parser = ASTParser.newParser(AST.JLS4);
parser.setSource(charArray);
parser.setKind(ASTParser.K_COMPILATION_UNIT);

final CompilationUnit cu = (CompilationUnit) 
parser.createAST(null);
cu.accept(new ASTVisitor(){..methods..});

例如普通注解:

@Override
public boolean visit(NormalAnnotation node) {
    ...
}

顺便说一句,请注意以下差异:

import java.lang.Deprecated;
...
@Deprecated

@java.lang.Deprecated
于 2014-01-21T07:38:19.687 回答