2015-10-17 57 views
1

我正在使用Java開發工具(JDT)編寫Swing Java應用程序,如下所示。使用JDT解析Java項目

輸入:一個Java項目

輸出:在這個項目(方法字段,等)等

元素的所有名稱

到現在爲止,我明白如何解析一個單獨的Java文件來收集信息的片段使用JDT來創建對應的抽象語法樹(AST)。但是,這種方法會導致缺乏分析信息(例如:獲取調用相同方法的所有方法)。

我如何能夠通過應用JDT沒有獨立分析所有的單的.java文件分析一個項目從絕對路徑?

+0

它可能看起來,我們不能沒有插件的環境中運行分析一個項目。幫我。 – ducanhnguyen

回答

0

我的想法是我們將獨立解析每個.jav文件。獲得的AST可解析結合。方法Utils.getFile()將獲得.java文件的內容並保存在一個String對象中。

public parseJavaFile(String pathOfJavaFile, String[] sources, String[] classpath, String nameOfJavaFile) 
     throws Exception { 
    ASTParser parser = ASTParser.newParser(AST.JLS8);//choose source code analyzing strategy 

    parser.setResolveBindings(true);// turn on binding strategy 
    parser.setKind(ASTParser.K_COMPILATION_UNIT);// the source code is a file .java 
    parser.setBindingsRecovery(true); 
    parser.setCompilerOptions(JavaCore.getOptions()); 

    parser.setUnitName(nameOfJavaFile); 
    parser.setEnvironment(classpath, sources, new String[] { "UTF-8" }, true); 
    parser.setSource(Utils.getFile(pathOfJavaFile).toCharArray()); 

    CompilationUnit cu = (CompilationUnit) parser.createAST(null); 

    if (cu.getAST().hasBindingsRecovery()) { 
     // Now binding is activated. Do something else 
    } 
} 

如何使用上述代碼的示例。

  • 類路徑對應rt.java的絕對路徑中JRE文件夾。

  • 來源是一個源代碼文件夾列表。

    public static void main(String[] args) throws IOException { 
        String projectPath = "G:\\Dropbox\\Workspace\\Wave-CIA-rebuid-v2"; 
        String[] sources = { "G:\\Dropbox\\Workspace\\Wave-CIA-rebuid-v2\\src" }; 
        String[] classpath = { "C:\\Program Files\\Java\\jre1.8.0_40\\lib\\rt.jar" }; 
        String pathOfJavaFile = "G:\\Dropbox\\Workspace\\Wave-CIA-rebuid-v2\\src\\test.java"; 
        String nameOfJavaFile = "test.java"; 
        new parseJavaFile(pathOfJavaFile, sources, classpath, nameOfJavaFile); 
    

    }