2014-02-21 68 views
4

我正在使用JDT分析Java代碼,並將構建獨立分析工具,這取決於org.eclipse.jdt.core包而不是eclipse插件。但是我發現我的工具在Java代碼中出現的枚舉聲明節點上無法正常工作。在由jdt創建的AST中,關鍵字enum被認爲是一個類型名稱而不是枚舉聲明。所以我想知道我應該如何確保我的工具可以正確處理枚舉聲明。Eclipse JDT ASTParser錯誤地將enum聲明節點轉換

我使用的jdt包是「org.eclipse.jdt.core_3.8.3.v20130121-145325.jar」。 的createAST代碼:

char[] javaprogram=getJavaFile(javaFileName); 
ASTParser parser = ASTParser.newParser(AST.JLS4); 
parser.setSource(javaprogram); 
parser.setKind(ASTParser.K_COMPILATION_UNIT); 
final CompilationUnit cu = (CompilationUnit) parser.createAST(null); 

的java輸入是象下面這樣:

package test; 

enum Color 
{ 
    RED(255, 0, 0), BLUE(0, 0, 255), BLACK(0, 0, 0), YELLOW(255, 255, 0), GREEN(0, 255, 0); 

    private int redValue; 
    private int greenValue; 
    private int blueValue; 

    private Color(int rv, int gv, int bv) 
    { 
    this.redValue = rv; 
    this.greenValue = gv; 
    this.blueValue = bv; 
    } 

    public String toString() 
    { 
    return super.toString() + "(" + this.redValue + "," + this.greenValue + "," + this.blueValue + ")"; 
    } 
} 

但使用astparser.createAST()來獲取CompilationUnit節點剛拿到這是剛剛裝在包裝代碼的代碼:

package test; 

的問題是通過將CompilerOption解決如下所示S的代碼:

Map options = JavaCore.getOptions(); 
options.put(JavaCore.COMPILER_COMPLIANCE, JavaCore.VERSION_1_5); 
options.put(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, JavaCore.VERSION_1_5); 
options.put(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_1_5); 
parser.setCompilerOptions(options); 

回答

3

當你回答了你自己,你必須編譯版本設置爲一個更新的一個,因爲默認的是1.3

Map options = JavaCore.getOptions(); 
System.out.println(options.get(JavaCore.COMPILER_SOURCE)); //outputs 1.3 

但(我認爲)加入enum聲明只有1.5,所以你必須將它設置爲1.5或以上。此外,我相信它只是足夠設置COMPILER_SOURCE

Map options = JavaCore.getOptions(); 
options.put(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_1_5); //or newer version 
parser.setCompilerOptions(options); 
+0

謝謝你!回想起來,我應該只是閱讀文檔:http://help.eclipse.org/kepler/index.jsp?topic=%2Forg.eclipse.jdt.doc.isv%2Freference%2Fapi%2Forg%2Feclipse%2Fjdt %2Fcore%2Fdom%2FASTParser.html –