考虑类型层次结构,如何使用JDT确定类是否具有注释

时间:2013-10-07 16:57:50

标签: java eclipse eclipse-jdt

有一种简单的方法可以使用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来做这样的事情?

1 个答案:

答案 0 :(得分: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