【问题标题】:how to get the fully qualified name of node in an AST?如何在 AST 中获取节点的完全限定名称?
【发布时间】:2018-03-08 17:28:57
【问题描述】:

我正在使用 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;
    }

有什么想法吗?谢谢!

【问题讨论】:

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


    【解决方案1】:

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

    要获得 resolved 类型的限定名称,您需要使用以下之一请求 binding

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

    在生成的ITypeBinding 上,getQualifiedName() 应该会产生您正在寻找的名称。

    我看到你已经打电话给parser.setResolveBindings(true);,所以你应该准备好了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-17
      • 2020-11-22
      • 1970-01-01
      • 2016-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多