我正在編寫一個Eclipse插件,它使用JDT AST的ASTParser
來分析方法。我正在尋找該方法來創建特定類型的對象。爲什麼resolveBinding()返回null,即使我的ASTParser上setResolveBindings(true)?
當我找到一個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
?我如何獲得綁定信息?
我有一個類似的情況,其中種類是K_COMPILATION_UNIT但仍然resolveBinding()返回null。任何想法爲什麼? – Dana 2013-05-06 19:47:28
答案似乎是:http://stackoverflow.com/a/5803778/48369 – Dana 2013-05-06 19:54:08
只是對*「爲什麼會出現這種情況」的遲到評論*:如果解析任何小於編譯單元的東西,那麼您就沒有導入語句,因此綁定解析可能會失敗。 – 2017-12-21 13:24:09