2010-04-13 60 views
6

我正在編寫一個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?我如何獲得綁定信息?

回答

5

ASTParser.setKind()概述,從人民故障排除resolveBinding()setResolveBindings(),精心隱藏的底部,藏着的是語句時kindK_COMPILATION_UNIT

綁定信息只計算。

(從the online Javadoc

我不明白的副手爲什麼會出現這種情況,但它似乎在什麼需要是不同的相當清楚點!

+0

我有一個類似的情況,其中種類是K_COMPILATION_UNIT但仍然resolveBinding()返回null。任何想法爲什麼? – Dana 2013-05-06 19:47:28

+0

答案似乎是:http://stackoverflow.com/a/5803778/48369 – Dana 2013-05-06 19:54:08

+1

只是對*「爲什麼會出現這種情況」的遲到評論*:如果解析任何小於編譯單元的東西,那麼您就沒有導入語句,因此綁定解析可能會失敗。 – 2017-12-21 13:24:09

相關問題