java - 如何获取 AST 中节点的完全限定名称?

标签 java parsing tree abstract-syntax-tree eclipse-jdt

我正在使用 ASTParser 来解析一些代码,我需要节点的完全限定名称。我尝试了以下方法,但它不起作用。它仍然只给我简单的名称。

public static void parse(String str)
{
 ASTParser parser = ASTParser.newParser(AST.JLS8);
 parser.setSource(str.toCharArray());


 parser.setResolveBindings(true);
 parser.setKind(ASTParser.K_COMPILATION_UNIT);
 parser.setBindingsRecovery(true);


 Map options = JavaCore.getOptions();
 JavaCore.setComplianceOptions(JavaCore.VERSION_1_7, options);
 parser.setCompilerOptions(options);

 CompilationUnit cu = (CompilationUnit) parser.createAST(null);

 cu.accept(new ASTVisitor() {

    public boolean visit(TypeDeclaration node) {

        System.out.println(node.getName().getFullyQualifiedName());
        return true;
    }

有什么想法吗?谢谢!

最佳答案

类型 org.eclipse.jdt.core.dom.Name 是 AST 结构的一部分,因此只知道源代码中写入的内容。如果源代码包含一个简单的名称,则该名称将是该节点包含的内容。

要获取已解析类型的限定名称,您需要使用以下之一请求绑定(bind)

  • org.eclipse.jdt.core.dom.AbstractTypeDeclaration.resolveBinding()
  • org.eclipse.jdt.core.dom.Name.resolveBinding()
  • ...

在生成的 ITypeBinding 上,getQualifiedName() 应该会生成您要查找的名称。

我看到您已经调用了 parser.setResolveBindings(true); 所以您应该已准备就绪。

关于java - 如何获取 AST 中节点的完全限定名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49179071/

相关文章:

c# - CSharpTest.Net.Collections.BPlusTree RecentCache 错误?

java - 理解首要概念

tree - 如何获取n叉树中节点的路径?

java - JRadiobutton ActionListener 没有响应

Java解析不同的日期类型

java - 解析 Web 服务响应时出现 MalformedURLException

C++语言符号分隔符

c - 递归树遍历,为树的每个叶子返回一个变量

java - 将 LinkedList<short[]> 传递给构造函数,它会起作用吗?

java - SonarQube 不接受外部生成的 JaCoCo 报告以覆盖 IT