gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 04:21:02 32 4
gpt4 key购买 nike

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

有什么想法吗?谢谢!

最佳答案

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

要获得resolved 类型的限定名称,您需要使用以下之一请求绑定(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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com