我可以从MethodInvocation.getName()中获取IBinding,现在我想在CompilationUnit中获取该绑定的偏移量,以便获得定义位置。但我找不到这方面的任何信息。顺便说一下,我使用的是ASTParser.setSource(char[]),而不是IJavaProject。
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
的反向映射。