首页 > 解决方案 > 在 Java Compiler 的输出上运行 JDT ASTVisitor

问题描述

我正在尝试编写一个扩展的 Java 编译器,它提供来自 javac 的所有错误和警告以及一些自定义不支持的 Java 功能的错误。

由于这将在服务器上运行,我想只生成一次语法树以获得更好的性能。现在,我正在扩展类javax.annotation.processing.AbstractProcessor以便使用 JavaCompiler API 生成的 ProcessingEnvironment 对象生成我的自定义错误

我使用 sun 提供的 TreeScanner 类实现了这一点。然而,这并不理想,因为该实现不是开源的,不包含在所有 JDK 中,并且不能保证它可以与 Java Compiler API 的未来版本一起使用。

这就是为什么我尝试使用org.eclipse.jdt.core.dom.ASTParser而不是 sun 提供的解析器,但我没有找到使用 JavaCompiler API 生成的 ProcessingEnvironment 对象的方法。

有谁知道如何做到这一点,或者如何仅使用 jdt 生成所有编译器错误和警告?

如果您知道可以帮助我解决此问题的其他库,那也会对我有很大帮助!

对不起,如果这里已经问过这个问题,我一直在寻找一天,但找不到比使用 sun 的实现更好的解决方案

标签: javaabstract-syntax-treeeclipse-jdtjava-compiler-api

解决方案


如果您使用 JDTASTParser创建一个CompilationUnit,只需询问它getProblems(),您应该会获得 JDT 在代码中检测到的所有错误/警告/信息。

请注意,您可能需要调整传递给ASTParser.setCompilerOptions(). 可能的选项由 class 中的常量描述JavaCore,特别是类似于 javac 的 Xlint 选项的所有内容都有一个以 开头的常量COMPILER_PB..。您可以在联机帮助中找到这些选项。

作为副作用,如果您选择启用相应的选项,您甚至可能会看到一些 javac 不会发出的有用警告。


推荐阅读