我目前的理解是JDT为我们提供了两种不同的接口和类层次结构来表示和操作Java代码:
Java Model:提供了一种表示java项目的方法。快到 创建但不包含与AST类一样多的信息 例如,没有关于该信息的信息 源文件中每个元素的确切位置(在AST中 可用的)
AST:更详细的源代码表示并提供 操纵它的方法。
这是对的吗?
现在,还有一个名为I * Binding(从IBinding开始)的接口层次结构,例如IMethodBinding。例如,我们有3种不同的类型来处理方法:
来自doc IMethodBinding看起来非常像来自AST的MethodInvocation但是我没有看到明确的区别以及何时应该使用它们。有人可以澄清一下吗?
答案 0 :(得分:8)
原始AST节点不包含它们之间的引用,例如从变量使用回到它的声明,或从方法调用回到方法声明。可以检查MethodInvocation对象的方法名称,但是您无法立即了解实际调用哪个类的方法。需要进行范围分析。
此分析称为绑定解析。 IBinding对象附加到AST节点,您可以使用它们来查找例如使用CompilationUnit.findDeclaringNode(methodInvocationNode.resolveMethodBidning().getKey())
或者您可以使用CompilationUnit.findDeclaringNode(method.getKey())
查找哪个AST节点包含与给定IMethod对象相对应的声明。
MethodInvocation.resolveBinding().getKey() ==
MethodDeclaration.resolveBinding().getKey() ==
IMethod.getKey()