2014-02-24 33 views
0

我正在使用Java AST。如何獲取FieldDeclaration或VariableDeclaration的Type(例如String或MyOwnType)?在ASTView中,我可以在SimpleName> type binding下看到它,但是使用getter我無法訪問成員。 我嘗試了FieldDeclaration to IField - Getting IBinding from FieldDeclaration的解決方案,但resolveBinding在訪問FieldDeclaration時返回null。在AST中獲取FieldDeclaration的類型

Why does resolveBinding() return null even though I setResolveBindings(true) on my ASTParser?不工作或者

回答

1

哇,這是艱難的。 最後一行使我們能夠解決的綁定,並通過varDeclFrag.resolveBinding().getType().getQualifiedName();檢索類型,雖然我已經想到指的是sources當我做了同樣的setEnvironment:

String[] sources = { "C:\\a\\TheMightyExampleProject\\src" }; 
String[] classPaths = { "C:\\a\\antlr-4.1-complete.jar" }; 

parser.setEnvironment(classPaths, sources, new String[] { "UTF-8" }, true); 
parser.setBindingsRecovery(true); 
parser.setResolveBindings(true); 
parser.setCompilerOptions(options); 
parser.setStatementsRecovery(true); 
parser.setUnitName("C:\\a\\TheMightyExampleProject\\src"); // ftw 

您還可以檢查出井田bindings not resolving with AST processing in eclipse

的答案
+0

對不起打擾這個老問題的沉睡,但有沒有辦法讓這些字符串數組「源」和「classPaths」沒有硬編碼?我試圖在一個插件之外構建一個解析器,而且我也無法獲得這些字段的類型。 – FinnTheHuman

+0

這理論上是如何工作的? _你需要告訴你的程序,而不是相反。或者,也許我弄錯了你的錯誤 – dasLort

+0

在所有關於SO的例子中,這個有效。神奇的一點是在解析器環境中設置源代碼。 –