【问题标题】:FieldDeclaration to IField - Getting IBinding from FieldDeclarationFieldDeclaration 到 IField - 从 FieldDeclaration 获取 IBinding
【发布时间】:2012-06-27 21:02:16
【问题描述】:

如何将FieldDeclaration(类型:ASTNode)转换为IField(类型:JavaElement)。是否可以从 FieldDeclaration ASTNode 获取绑定,就像对于 MethodDeclaration 节点的 node.resolveBinding() 一样。

需要:我正在访问具有公共常量的类中的 FieldDeclaration 节点,并希望在项目中搜索该字段的引用。我正在使用 JDT 的 SearchEngine。为此,我想创建一个搜索模式,如下所示:

SearchPattern.createPattern(iField, IJavaSearchConstants.REFERENCES);

我已将此作为对我的questions 之一的评论,但没有得到相同的答案。将其作为单独的问题发布。

提前感谢您的回答。


回复 Deepak 的回答。

使用您的方法,我可以按如下方式检索 JavaElement

List<VariableDeclarationFragment> fragments = node.fragments();
VariableDeclarationFragment fragment = fragments.get(0);
IJavaElement fieldElement = fragment.resolveBinding().getJavaElement();

如果我传递这个 IJavaElement 来创建搜索模式而不是 IField,它将返回与 IField 相同的结果。

【问题讨论】:

    标签: java abstract-syntax-tree eclipse-jdt


    【解决方案1】:

    像往常一样 ASTView 插件是你的朋友! :-) 在 ASTView 中,您可以看到绑定可用于 VariableDeclarationFragment 但不适用于 FieldDeclaration。

    从 FieldDeclaration 获取绑定

    • 获取 FieldDeclaration 的“片段”=>您现在有一堆 VariableDeclarationFragment 节点
    • 调用VariableDeclarationFragment#resolveBinding()(此方法继承自VariableDeclaration)

    【讨论】:

    • 我已经用我对你的回答的查询更新了这个问题。请回复。
    • 出于调试目的,对“fieldElement”进行实例检查,它应该是正确的“IField”。
    • 刚刚检查过,是的,它是 IField 的一个实例。非常感谢。
    猜你喜欢
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 2022-08-05
    • 2011-05-11
    • 2014-07-23
    • 2010-10-30
    相关资源
    最近更新 更多