我正在尝试编写一个扩展的Java编译器,它提供来自javac的所有错误和警告,以及一些自定义的不受支持的Java功能的错误。
由于这将在服务器上运行,为了获得更好的性能,我只想生成一次语法树。现在,我正在扩展类javax.annotation.processing.AbstractProcessor,以便使用JavaCompiler API 生成的ProcessingEnvironment对象生成自定义错误
我使用sun提供的TreeScanner类实现了这一点。然而,这并不理想,因为实现不是开源的,并没有包含在所有的JDK中,并且不能保证它将与未来版本的Java编译器API一起工作。
这就是为什么我尝试使用org.eclipse.jdt.core.dom.ASTParser而不是sun提供的解析器,但我没有找到使用JavaCompiler API生成的ProcessingEnvironment对象的方法。
有人知道如何做到这一点吗?或者知道如何使用jdt生成所有编译器错误和警告吗?
如果你知道另一个图书馆可以帮助我解决这个问题,那也会对我有很大帮助!
如果这个问题已经在这里被问到了,我很抱歉,我已经搜索了一天,但找不到比使用sun 的实现更好的解决方案
如果您使用JDT的ASTParser
来创建CompilationUnit
,只需询问它getProblems()
,您就会得到JDT在代码中检测到的所有错误/警告/信息。
请注意,您可能需要调整传递到ASTParser.setCompilerOptions()
中的选项。可能的选项由类JavaCore
中的常量描述,特别是类似javac的Xlint选项的所有选项都有一个以COMPILER_PB..
开头的常量。您可以在联机帮助中找到这些选项。
作为副作用,如果您选择启用相应的选项,您甚至可能会看到一些javac不会发出的有用警告。