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

当我找到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?如何获取绑定(bind)信息?

最佳答案

该语句隐藏在ASTParser.setKind()概述的底部,该语句已被排除在对resolveBinding()setResolveBindings()进行故障排除的人员之外而仔细隐藏了



(来自the online Javadoc)

我不明白为什么会是这种情况,但是似乎确实清楚地指出了需要有所不同的地方!

10-07 16:20