使用Eclipse JDT AST从Annotation中获取完全限定的名称



我正在使用EclipseJDT为Java源代码构建AST,因此我可以进行一些代码分析。目前,我想获得注释的完全限定名称。考虑以下代码:

import javax.persistence.Entity; 
@Entity
public class Class1

如果我访问这个编译单元,@Entity就是MarkerAnnotation。我可以对它做一些分析。但是我无法获得完全限定的名称。我想获得"javax.persistence.Entiy"。我尝试了几种方法,但都没有成功。

public boolean visit(MarkerAnnotation node) {
node.getTypeName(); //returns the simple name
node.getTypeName().getFullyQualifiedName();// I thought this would print javax.persistence.Entiy, 
// but it only prints "Entity"
node.resolveTypeBinding().getName(); //Prints "Entity"
node.resolveTypeBinding().getBinaryName(); // Prints "Entity"
node.resolveAnnotationBinding().getName(); //Prints "Entity"
return super.visit(node);
}

我也尝试过将MarkerAnnotation转换为Annotation,但仍然无法获得完全限定的名称。在调试过程中,我也没有成功导航这个节点

我能够使用CompilationUnit的imports((方法获得完全限定的名称。我对它们进行了一些字符串操作,并结合了简单名称的注释。然而,我觉得这有点棘手,我需要查看每一个导入,即使是与注释无关的导入。

我想要的是直接从节点获得完全限定的名称,即从MarkerAnnotation、NormalAnnotation和SingleMemberAnnotation。有什么办法做到这一点吗?我在这里错过了什么?

提前感谢!

来自Annotation.resolveAnnotationBinding((的javadoc:

请注意,绑定(包括已解析的注释(通常不可用,除非在构建AST时请求。

因此,请检查如何配置ASTParser,请参阅ASTParser.setResolveBindings(布尔值(

最新更新