我可以从MethodInvocation.getName()获取IBinding,现在我想在CompilationUnit中获取此绑定的偏移量以获得定义位置。但我找不到任何相关的信息。顺便说一句,我使用ASTParser.setSource(char [])而不是IJavaProject。
答案 0 :(得分:0)
JDT中的常规方法如下所示:
IJavaElement method= methodBinding.getJavaElement();
if (method instanceof IMember) {
ICompilationUnit cu= ((IMember) method).getCompilationUnit();
CompilationUnit compilationUnit= // use ASTParser here...
ASTNode methodDecl= compilationUnit.findDeclaringNode(methodBinding.getKey());
... methodDecl.getStartPosition() ...
}
但是,这要求Java模型可用。如果您没有IJavaProject
,那么#getJavaElement()
可能会回复null
。在这种情况下,您必须实现自己的启发式方法,以便将ITypeBinding
(从IMethodBinding#getDeclaringClass()
)映射到编译单元。
换句话说:如果您希望JDT帮助定位当前编译单元之外的元素,那么使用Java模型就可以了。
作为使用完整Java模型的替代方法,您可以尝试在一个批处理中解析所有相关的编译单元(使用#getASTs()
- 复数),然后从ITypeBinding
创建自己的反向映射到CompilationUnit
。