如何在JDT中获取ASTNode定义?

时间:2017-11-03 07:45:25

标签: eclipse-jdt

我可以从MethodInvocation.getName()获取IBinding,现在我想在CompilationUnit中获取此绑定的偏移量以获得定义位置。但我找不到任何相关的信息。顺便说一句,我使用ASTParser.setSource(char [])而不是IJavaProject。

1 个答案:

答案 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