FieldDeclaration到IField - 从FieldDeclaration获取IBinding

Unn*_*ris 4 java abstract-syntax-tree eclipse-jdt

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

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

SearchPattern.createPattern(iField, IJavaSearchConstants.REFERENCES);
Run Code Online (Sandbox Code Playgroud)

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

在此先感谢您的回答.


回答Deepak的回答.

使用您的方法,我可以检索JavaElement,如下所示

List<VariableDeclarationFragment> fragments = node.fragments();
VariableDeclarationFragment fragment = fragments.get(0);
IJavaElement fieldElement = fragment.resolveBinding().getJavaElement();
Run Code Online (Sandbox Code Playgroud)

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

Dee*_*zad 5

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

从FieldDeclaration获取绑定

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