有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

有什么想法吗?谢谢


共 (1) 个答案

  1. # 1 楼答案

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

    要获得已解析的类型的限定名称,您需要使用以下方法之一请求绑定

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

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

    我看到你已经调用了parser.setResolveBindings(true);,所以你应该准备好了