为什么resolveBinding()返回null,即使我在ASTParser上设置了setResolveBindings(true)?

时间:2010-04-13 18:09:43

标签: eclipse-plugin eclipse-jdt

我正在编写一个Eclipse插件,它使用JDT AST的ASTParser来解析方法。我在该方法中寻找创建特定类型的对象。

当我找到ClassInstanceCreation时,我会在其上调用getType()以查看实例化的类型。我想确保那里处理的完全解析类型是我认为的那个,所以我将结果Type对象告诉resolveBinding()。即使没有编译错误,即使我在null上调用了setResolveBindings(true),我也会得到ASTParser。我向ASTParser(通过setSource())提供了包含我的方法的ICompilationUnit,因此解析器可以访问整个工作区上下文。

final IMethod method = ...;
final ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setResolveBindings(true);
parser.setSource(method.getCompilationUnit());
parser.setSourceRange(method.getSourceRange().getOffset(), method.getSourceRange().getLength());
parser.setKind(ASTParser.K_CLASS_BODY_DECLARATIONS);
final TypeDeclaration astRoot = (TypeDeclaration) parser.createAST(null);
final ClassInstanceCreation classInstanceCreation = walkAstAndFindMyExpression(astRoot);
final Type instantiatedType = classInstanceCreation.getType();
System.out.println("BINDING: " + instantiatedType.resolveBinding());

为什么resolveBinding()会返回null?我怎样才能获得绑定信息?

1 个答案:

答案 0 :(得分:5)

隐藏在ASTParser.setKind()概述的底部,对于排除resolveBinding()setResolveBindings()问题的人员进行了小心隐藏,这是声明

  

绑定信息仅在kindK_COMPILATION_UNIT时计算。

(来自the online Javadoc

我不明白为什么会出现这种情况,但它似乎很明显地指出需要与众不同的东西!