I*Binding在Eclipse JDT中的作用是什么?

Jan*_*nek 5 java eclipse eclipse-jdt

我目前的理解是JDT为我们提供了两个不同的接口和类层次结构来表示和操作Java代码:

  • Java Model:提供了一种表示java项目的方法.快速创建但不包含与AST类层次一样多的信息,例如,没有关于源文件中每个元素的确切位置的信息(在AST中可用)

  • AST:更详细的源代码表示,并提供了操作它的方法.

那是对的吗?

现在,还有一个名为I*Binding(从IBinding开始)的接口层次结构,例如IMethodBinding.例如,我们有3种不同的类型来处理方法:

从文档IMethodBinding看起来非常像AST的MethodInvocation但我没有看到明确的区别,我什么时候应该使用它们.有人可以澄清一下吗?

man*_*rid 8

原始AST节点不包含它们之间的引用,例如从变量使用返回到其声明,或从方法调用返回到方法声明.可以检查MethodInvocation对象的方法名称,但是您无法立即了解实际调用哪个类的方法.需要进行范围分析.

此分析称为绑定解析.IBinding对象附加到AST节点,您可以使用它们为给定的MethodInvocation AST节点查找例如MethodDeclaration AST节点CompilationUnit.findDeclaringNode(methodInvocationNode.resolveMethodBidning().getKey())

或者您可以使用CompilationUnit.findDeclaringNode(method.getKey())查找哪个AST节点包含与给定IMethod对象相对应的声明.

MethodInvocation.resolveBinding().getKey() ==
MethodDeclaration.resolveBinding().getKey() ==
IMethod.getKey()
Run Code Online (Sandbox Code Playgroud)