Eclipse plugin 为什么即使我在ASTParser上设置了ResolveBindings(true),resolveBinding()仍返回null?
我正在编写一个Eclipse插件,它使用JDT AST的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
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。知道为什么吗?只是一个关于“为什么会这样”的后期评论:如果你解析任何小于编译单元的东西,那么你就没有导入语句,因此绑定解析可能会失败。