4

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

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

SearchPattern.createPattern(iField, IJavaSearchConstants.REFERENCES);

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

提前感谢您的回答。


回复迪帕克的回答。

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

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

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

4

1 回答 1

5

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

从 FieldDeclaration 获取绑定

  • 获取 FieldDeclaration 的“片段” => 你现在有一堆 VariableDeclarationFragment 节点
  • 调用VariableDeclarationFragment#resolveBinding()(该方法继承自VariableDeclaration)
于 2012-06-26T15:41:25.973 回答