Jan*_*nek 5 java eclipse eclipse-jdt
我目前的理解是JDT为我们提供了两个不同的接口和类层次结构来表示和操作Java代码:
Java Model:提供了一种表示java项目的方法.快速创建但不包含与AST类层次一样多的信息,例如,没有关于源文件中每个元素的确切位置的信息(在AST中可用)
AST:更详细的源代码表示,并提供了操作它的方法.
那是对的吗?
现在,还有一个名为I*Binding(从IBinding开始)的接口层次结构,例如IMethodBinding.例如,我们有3种不同的类型来处理方法:
从文档IMethodBinding看起来非常像AST的MethodInvocation但我没有看到明确的区别,我什么时候应该使用它们.有人可以澄清一下吗?
原始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)