如何在 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()
- 复数),然后创建您自己的反向映射从 ITypeBinding
到 CompilationUnit
.
我可以从 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
.