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

时间:2013-01-29 22:52:56

标签: java eclipse eclipse-jdt

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

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

  • AST:更详细的源代码表示并提供 操纵它的方法。

这是对的吗?

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

来自doc IMethodBinding看起来非常像来自AST的MethodInvocation但是我没有看到明确的区别以及何时应该使用它们。有人可以澄清一下吗?

1 个答案:

答案 0 :(得分:8)

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

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

的给定MethodInvocation AST节点的MethodDeclaration AST节点

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

MethodInvocation.resolveBinding().getKey() ==
MethodDeclaration.resolveBinding().getKey() ==
IMethod.getKey()