我正在使用Java開發工具(JDT)編寫Swing Java應用程序,如下所示。使用JDT解析Java項目
輸入:一個Java項目
輸出:在這個項目(包,類,方法,字段,等)等
元素的所有名稱到現在爲止,我明白如何解析一個單獨的Java文件來收集信息的片段使用JDT來創建對應的抽象語法樹(AST)。但是,這種方法會導致缺乏分析信息(例如:獲取調用相同方法的所有方法)。
我如何能夠通過應用JDT沒有獨立分析所有的單的.java文件分析一個項目從絕對路徑?
我正在使用Java開發工具(JDT)編寫Swing Java應用程序,如下所示。使用JDT解析Java項目
輸入:一個Java項目
輸出:在這個項目(包,類,方法,字段,等)等
元素的所有名稱到現在爲止,我明白如何解析一個單獨的Java文件來收集信息的片段使用JDT來創建對應的抽象語法樹(AST)。但是,這種方法會導致缺乏分析信息(例如:獲取調用相同方法的所有方法)。
我如何能夠通過應用JDT沒有獨立分析所有的單的.java文件分析一個項目從絕對路徑?
我的想法是我們將獨立解析每個.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);
}
您可以使用Eclipse國土資源。 Eclipse資源將爲您提供所有項目相關信息。
它可能看起來,我們不能沒有插件的環境中運行分析一個項目。幫我。 – ducanhnguyen