我正在编写一个使用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)
我不明白为什么会是这种情况,但是似乎确实清楚地指出了需要有所不同的地方!