FieldDeclaration到IField - 从FieldDeclaration获取IBinding

时间:2012-06-21 05:05:12

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

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

需要:我正在访问具有公共常量的类中的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相同的结果。

1 个答案:

答案 0 :(得分:5)

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

从FieldDeclaration获取绑定

  • 获取FieldDeclaration =&gt;的'片段'你现在有一堆VariableDeclarationFragment节点
  • 调用VariableDeclarationFragment#resolveBinding()(此方法继承自VariableDeclaration)