当前位置: 首页 > 知识库问答 >
问题:

如何在JDT中获得ASTNode定义?

雷献
2023-03-14

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

共有1个答案

戚升
2023-03-14

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的反向映射。

 类似资料:
  • 我正在分析ASTNodes(org.eclipse.jdt.core.dom),并试图找到我拥有的变量节点(SimpleName)的VariableDeclaration。示例: 我还需要一个解决方案,可以找到声明,如果它是一个类字段。

  • 我是使用Kotlin开发Firebase android的初学者,我的问题是我想使用Kotlin检测特定的。我如何达到预期的结果。 我看到过使用Java的例子,但我不知道如何使用Kotlin实现它。任何帮助都是非常感谢的。下面是我在代码中写的内容: 如果电话号码已经存在,我希望用一个toast向用户显示。

  • 问题内容: 我正在开发一个具有基于Flex的前端和Spring / Hibernate后端的应用程序。 要使Facebook集成以目前的方式运行,我需要阅读后端前端javascript中设置的cookie,并在登录期间进行一些验证,以查看用户是否尝试欺骗其Facebook。登录。 这将非常容易,但是我不知道如何获取HttpServletRequest。我正在使用一个非常基本的Spring配置(这是

  • 实际上,我有一个,它是(在和),现在我需要创建另一个(在该的下方),一开始必须不可见。 当我的活动运行时,我想对隐藏的布局进行动画处理。 隐藏的必须自下而上。我不知道如何实现这个动画??我不知道如何创建一个最初不可见的布局,经过一段时间的延迟后,它必须从屏幕下方显示并从侧面显示??? 这是我的xml文件代码

  • 在我的项目中,如何键盘大写锁定状态。我已经提到了这个问题,我如何才能获得Caps锁定状态,并将其设置为on,如果它还没有?。但我得到的是JavaFX解决方案。请给我解决方案。我也是此站点https://community.oracle.com/thread/2415027?tstart=0的引用者