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