Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Eclipse JDT AST从注释中获取完全限定名_Java_Abstract Syntax Tree_Eclipse Jdt - Fatal编程技术网

Java 使用Eclipse JDT AST从注释中获取完全限定名

Java 使用Eclipse JDT AST从注释中获取完全限定名,java,abstract-syntax-tree,eclipse-jdt,Java,Abstract Syntax Tree,Eclipse Jdt,我正在使用EclipseJDT为Java源代码构建AST,因此我可以进行一些代码分析。目前,我希望获得注释的完全限定名。考虑下面的代码: 导入javax.persistence.Entity; @实体 公共班级1 如果我访问这个编译单元,@实体是一个标记符号。我可以做一些分析。但是,我无法获得完全限定的名称。我想获得javax.persistence.Entiy。我试过几种方法,但没有成功 公共布尔visitMarkerAnnotation节点{ node.getTypeName;//返回简单名

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

导入javax.persistence.Entity; @实体 公共班级1 如果我访问这个编译单元,@实体是一个标记符号。我可以做一些分析。但是,我无法获得完全限定的名称。我想获得javax.persistence.Entiy。我试过几种方法,但没有成功

公共布尔visitMarkerAnnotation节点{ node.getTypeName;//返回简单名称 node.getTypeName.getFullyQualifiedName;//我以为这会打印javax.persistence.Entiy, //但它只打印实体 node.resolveTypeBinding.getName;//打印实体 node.resolveTypeBinding.getBinaryName;//打印实体 node.resolveAnnotationBinding.getName;//打印实体 返回super.visitnode; } 我还尝试将markeranotation转换为注释,但仍然无法获得完全限定的名称。在调试会话期间,我也没有成功导航此节点

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

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

提前谢谢

来自以下的javadoc:

请注意,除非在生成AST时请求,否则包含已解析注释的绑定通常不可用


因此,请检查如何配置ASTParser,请参见

啊,是的,我已经将其设置为true ASTParser.setResolveBindingstrue。Perharps,我设置环境的方式可能是问题parser的原因。setEnvironmentnull,srcDirs,null,true。我只有可用的源代码。Perharps唯一的选择是分析导入。ASTParser应该如何找到javax/persistence/Entity.class?这将需要为该注释类型创建绑定。嗯,我明白了。对于我正在开发的工具,无法为环境设置类。现在我明白为什么绑定不起作用了。非常感谢。