0

我目前正在开发编程导师。这些导师是独立的 Java 应用程序。我使用 Eclipse JDT 来解析 Java 源代码并构建相应的抽象语法树。此外,如果学生在 Eclipse 中编译他的代码,我想捕获将启动的错误消息。Eclipse 使我们能够解析和跟踪特定代码字符串的错误消息(无上下文)。在“编译”该字符串后,我收到了 9 条错误消息。当我将该代码粘贴到 Eclipse 项目中时,我收到了大约 90 条错误消息。显然,目的是尽可能多地跟踪错误。我怀疑这取决于源代码的上下文。

为此,我尝试在工作区中以编程方式创建一个项目,并创建一个包含源代码字符串的文件。但是,在执行我的 Java 应用程序时,我收到以下错误消息:

Exception in thread "main" java.lang.IllegalStateException: Workspace is closed.
    at org.eclipse.core.resources.ResourcesPlugin.getWorkspace(ResourcesPlugin.java:399)
    at com.example.helloworld.JavaErr.main(JavaErr.java:67)

我阅读了很多关于这个主题的文章。似乎我们只能在 Eclipse 插件项目中访问工作区中的资源。在放弃“解决方案”路径之前,是否有可能知道我们是否可以在外部独立 Java 应用程序中以编程方式访问工作区及其所有资源?

4

2 回答 2

0

我最终需要解决 char[] 源代码与其环境(setEnvironment)之间的绑定,并设置编译单元的名称。设置环境使我们能够绕过工作空间并通过导入正确的库(类路径)和源代码(源路径)来创建我们自己的“虚拟”项目。

如果有人还想检索语法错误,他只需启用语句的恢复。因此,我们能够在独立的 Java 应用程序中解析外部 Java 文件并检索与在真实 Eclipse 项目中相同数量的错误(包声明错误除外)。

这是我使用的代码片段:

        File file = new File("");
        String srcCode = Files.toString(file, Charsets.UTF_8);
        ASTParser parser = ASTParser.newParser(AST.JLS3);
        parser.setSource(srcCode.toCharArray());
        parser.setKind(ASTParser.K_COMPILATION_UNIT);
        Map options = JavaCore.getOptions();
        JavaCore.setComplianceOptions(JavaCore.VERSION_1_5, options);
        parser.setCompilerOptions(options);

        String[] classpath = {"", "", ""};
        String[] sourcepath = {""};

        parser.setEnvironment(classpath, sourcepath, null, true);
        parser.setUnitName("");
        parser.setResolveBindings(true);
        parser.setBindingsRecovery(true);
        parser.setStatementsRecovery(true);
        CompilationUnit cu = (CompilationUnit) parser.createAST(null);
        cu.accept(new ASTVisitor2(cu));
于 2013-05-01T17:00:52.117 回答
0

要使用 jdt 访问工作区,请参阅以下问题的更新答案:

https://stackoverflow.com/questions/15997775/extracting-variables-and-their-type-names-include-class-method-variables-fro/16006559#16006559

于 2013-05-02T08:40:42.470 回答