如何在JDT中获取ASTNode定义



我可以从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()-复数),然后创建自己的从ITypeBindingCompilationUnit的反向映射。

最新更新