如何在 JDT 中获取 ASTNode 定义?

How to get ASTNode definition in JDT?

我可以从 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.