gpt4 book ai didi

java - 从 IBinding 获取 CompilationUnit

转载 作者:行者123 更新时间:2023-12-01 11:22:03 27 4
gpt4 key购买 nike

我想找到一个 MethodInitation 的声明节点:

MethodInvocation methodNode = ...;
IMethodBinding b = methodNode.resolveMethodBinding();
IMethodBinding[] declaredMethods = b.getDeclaringClass().getDeclaredMethods();
for (IMethodBinding method : declaredMethods) {
if (astRoot.findDeclaringNode(method).getStructuralProperty(MethodDeclaration.NAME_PROPERTY).equals(name))
//...
}

这在我的情况下不起作用,因为该方法是在另一个编译单元中声明的,并且 astRoot.findDeclaringNode(...) 返回 null。如何从 IBinding 获取正确的 CompilationUnit

最佳答案

我发现SharedASTProvider#getASTASTParser#setSource可以与 ITypeRoot 一起使用由 IClassFile 两者实现和ICompilationUnit 。获得CompilationUnit在绑定(bind)中可以使用以下代码片段:

IJavaElement je = b.getJavaElement();
while (je != null && !(je instanceof ITypeRoot)) {
je = je.getParent();
}
if (je != null) {
ITypeRoot = (ITypeRoot)je;
//...
}

了解ITypeRoot帮助我找到了更好的解决方案,该解决方案不涉及 AST,并且在某些类文件的源代码不可用的情况下似乎可以工作。

for (IMethod method : type.findPrimaryType().getMethods()) {
if (method.getElementName().equals(name)) {
//....
}
}

关于java - 从 IBinding 获取 CompilationUnit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31116641/

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