gpt4 book ai didi

java - 在 JDT AST 中,如何从 MethodInvocation 节点检索 MethodDeclaration 节点?

转载 作者:行者123 更新时间:2023-11-29 05:13:16 43 4
gpt4 key购买 nike

我正在实现一个 ASTVisitor,当我访问一个 MethodInvocation 节点时,我想访问它对应的 MethodDeclaration 节点。以下示例显示了我需要的内容:

public boolean visit(MethodInvocation node){
MethodDeclaration mDeclaration = getMethodDeclaration( node );
}

我知道我可以先访问我的整个项目,将所有方法声明保存在一个映射中。然后,在第二个访问者中,我可以访问 MethodInvocation 节点并从第一个访问者生成的映射中获取其对应的 MethodDeclaration。但我想访问相应的 MethodDeclaration 节点,而不必多次访问整个项目。我怎样才能做到这一点?可能吗?

最佳答案

通过方法的绑定(bind)找到对应的编译单元,解析为另一个AST,从树中获取声明:

IMethodBinding binding = (IMethodBinding) node.getName().resolveBinding();
ICompilationUnit unit = (ICompilationUnit) binding.getJavaElement().getAncestor( IJavaElement.COMPILATION_UNIT );
if ( unit == null ) {
// not available, external declaration
}b
ASTParser parser = ASTParser.newParser( AST.JLS8 );
parser.setKind( ASTParser.K_COMPILATION_UNIT );
parser.setSource( unit );
parser.setResolveBindings( true );
CompilationUnit cu = (CompilationUnit) parser.createAST( null );
MethodDeclaration decl = (MethodDeclaration)cu.findDeclaringNode( binding.getKey() );

当然,这只适用于在 Eclipse 项目中声明该方法,而不是在外部 JAR 中。

您正在遍历的第一个 AST 也需要解析绑定(bind):ASTParser.setResolveBindings( true )

关于java - 在 JDT AST 中,如何从 MethodInvocation 节点检索 MethodDeclaration 节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27507895/

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