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

Eclipse plugin 为什么即使我在ASTParser上设置了ResolveBindings(true),resolveBinding()仍返回null?,eclipse-plugin,eclipse-jdt,Eclipse Plugin,Eclipse Jdt,我正在编写一个Eclipse插件,它使用JDT AST的ASTParser来解析一个方法。我正在该方法中寻找创建特定类型对象的方法 当我找到一个ClassInstanceCreation时,我调用它上的getType(),查看正在实例化的类型。我想确定正在处理的完全解析类型就是我认为的类型,因此我将结果type对象告诉resolveBinding()。即使没有编译错误,即使在我的ASTParser上调用了setResolveBindings(true),我还是返回了null。我给了我的ASTPa

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

当我找到一个
ClassInstanceCreation
时,我调用它上的
getType()
,查看正在实例化的类型。我想确定正在处理的完全解析类型就是我认为的类型,因此我将结果
type
对象告诉
resolveBinding()
。即使没有编译错误,即使在我的
ASTParser
上调用了
setResolveBindings(true)
,我还是返回了
null
。我给了我的
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
?如何获取绑定信息?

隐藏在
ASTParser.setKind()
概述的底部,小心地隐藏起来,避免人们对
resolveBinding()
setResolveBindings()进行故障排除

只有当
kind
K\u编译单元
时,才会计算绑定信息

(来自)


我不明白为什么会出现这种情况,但它似乎非常清楚地指出了什么需要改变

我有一个类似的例子,类型是K_COMPILATION_UNIT,但resolveBinding()仍然返回null。知道为什么吗?只是一个关于“为什么会这样”的后期评论:如果你解析任何小于编译单元的东西,那么你就没有导入语句,因此绑定解析可能会失败。