繁体   English   中英

跟踪Eclipse JDT编译器错误消息(IProblem)

[英]Tracking Eclipse JDT Compiler Error Messages (IProblem)

我目前正在开发编程导师。 这些导师是独立的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应用程序中以编程方式访问工作区及其所有资源?

最后,我需要解决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));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM