我正在尝试编写扩展的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实施更好的解决方案
答案 0 :(得分:0)
如果您使用JDT的ASTParser
创建一个CompilationUnit
,只需询问它getProblems()
,您就应该获得JDT在代码中检测到的所有错误/警告/信息。
请注意,您可能需要调整传递到ASTParser.setCompilerOptions()
的选项。可能的选项由类JavaCore
中的常量描述,特别是类似于javac的Xlint选项的所有内容都具有一个以COMPILER_PB..
开头的常量。您会在online help中找到这些选项。
作为副作用,如果选择启用相应的选项,您甚至可能会看到一些有用的警告,而javac不会发出警告。