使用JDT解析Java项目

使用JDT解析Java项目,java,swing,eclipse-jdt,Java,Swing,Eclipse Jdt,我正在使用Java开发工具(JDT)编写一个Swing Java应用程序,如下所示 输入:一个Java项目 输出:此项目中所有元素的名称(包、类、方法、字段等) 到目前为止,我已经了解了如何通过使用JDT创建相应的抽象语法树(AST),解析单个Java文件来收集信息。但是,这种方法将导致缺少分析信息(例如:获取所有调用相同方法的方法) 如何通过应用JDT从绝对路径解析项目,而不独立解析所有单个.java文件?我的想法是我们将独立解析每个.java文件。获得的AST可以通过绑定来解析。方法Util

我正在使用Java开发工具(JDT)编写一个Swing Java应用程序,如下所示

输入:一个Java项目

输出:此项目中所有元素的名称(包、类、方法、字段等)

到目前为止,我已经了解了如何通过使用JDT创建相应的抽象语法树(AST),解析单个Java文件来收集信息。但是,这种方法将导致缺少分析信息(例如:获取所有调用相同方法的方法)


如何通过应用JDT从绝对路径解析项目,而不独立解析所有单个.java文件?

我的想法是我们将独立解析每个.java文件。获得的AST可以通过绑定来解析。方法Utils.getFile()将获取.java文件的内容并保存在字符串对象中

    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
    }
}
如何使用上述代码的示例

  • classpath对应于jre文件夹中rt.java的绝对路径

  • sources是源代码文件夹的列表

    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资源将为您提供所有与项目相关的信息


请参阅:

如果不在插件环境中运行,我们可能无法解析项目。帮助我。