【问题标题】:Parse a Java project by using JDT使用 JDT 解析 Java 项目
【发布时间】:2015-10-17 08:48:11
【问题描述】:

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

输入:一个Java项目

输出:该项目中所有元素的名称(packageclassmethod字段等)等

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

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

【问题讨论】:

  • 如果没有在插件环境中运行,我们似乎无法解析项目。帮助我。

标签: java swing eclipse-jdt


【解决方案1】:

我的想法是我们将独立解析每个.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
    }
}

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

  • 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);
    

    }

【讨论】:

    【解决方案2】:

    您可以使用 Eclipse 资源。 Eclipse 资源将为您提供所有项目相关信息。

    参考:http://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Fguide%2FresInt_filesystem.htm

    【讨论】:

      猜你喜欢
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多