Java I*绑定在EclipseJDT中的作用是什么?
我目前的理解是,JDT为我们提供了两种不同的接口和类层次结构,用于表示和操作Java代码:Java I*绑定在EclipseJDT中的作用是什么?,java,eclipse,eclipse-jdt,Java,Eclipse,Eclipse Jdt,我目前的理解是,JDT为我们提供了两种不同的接口和类层次结构,用于表示和操作Java代码: Java模型:提供一种表示Java项目的方法。快到 创建但不包含与AST类一样多的信息 例如,没有关于层次结构的可用信息 每个元素在源文件中的确切位置(在AST中为 可用) AST:源代码plus提供了更详细的表示 操纵它的方法 对吗 现在,还有一个名为I*Binding(起始于)的接口层次结构,例如IMethodBinding。例如,我们有3种不同类型的方法: (来自Java模型) (来自AST,
- Java模型:提供一种表示Java项目的方法。快到 创建但不包含与AST类一样多的信息 例如,没有关于层次结构的可用信息 每个元素在源文件中的确切位置(在AST中为 可用)
- AST:源代码plus提供了更详细的表示 操纵它的方法
- (来自Java模型)
- (来自AST,可以从IMethod获得)
从doc来看,IMethodBinding看起来很像AST中的MethodInvocation,但我看不出有什么明显的区别,我应该在什么时候使用它们。有人能澄清一下吗?原始AST节点之间不包含引用,例如从变量使用返回到其声明,或从方法调用返回到方法声明。可以检查MethodInvocation对象的方法名,但您无法立即了解实际调用的是哪个类的哪个方法。为此,需要进行范围分析 这种分析称为绑定解析。IBinding对象附加到AST节点,您可以使用它们来查找给定MethodInvocation AST节点的MethodDeclaration AST节点,例如使用
CompilationUnit.findDeclaringNode(methodInvocationNode.resolveMethodBidning().getKey())
或者您可以使用compileationunit.findDeclaringNode(method.getKey())
查找哪个AST节点包含与给定IMethod对象对应的声明
MethodInvocation.resolveBinding().getKey() ==
MethodDeclaration.resolveBinding().getKey() ==
IMethod.getKey()
哇,谢谢你,曼特里德!这对我来说是理解这一点的重大突破!请告诉我如何从IMethod获取MethodInvocation,好吗?