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 楼答案
类型
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);
,所以你应该准备好了