gpt4 book ai didi

java - 使用 Eclipse JDT AST 从注释获取完全限定名称

转载 作者:行者123 更新时间:2023-12-02 09:16:14 26 4
gpt4 key购买 nike

我正在使用 Eclipse JDT 为 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,但我仍然无法获得完全限定的名称。在调试 session 期间,我导航该节点都没有成功

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

我想要的是直接从节点获取完全限定名称,即从 MarkerAnnotation、NormalAnnotation 和 SingleMemberAnnotation 获取。有什么办法可以实现这一点吗?我在这里缺少什么?

提前致谢!

最佳答案

来自Annotation.resolveAnnotationBinding()的javadoc :

Note that bindings (which includes resolved annotations) are generally unavailable unless requested when the AST is being built.

因此,请检查您如何配置 ASTParser,请参阅 ASTParser.setResolveBindings(boolean)

关于java - 使用 Eclipse JDT AST 从注释获取完全限定名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58960563/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com