Java编译器中是否有任何类型的回调机制?我希望能够注册一个监听器,以便在源中找到某些令牌时进行操作。
注释让你这样做,但不幸的是,这对我想做的事情不起作用。
答案 0 :(得分:0)
Project Lombok附加到编译器。它使用Annotations来触发它(这是你想要避免的,我知道),但是在源代码中你会发现它是如何附加到编译器的。 Eclipse编译器和Sun编译器有特殊代码,似乎没有常见的“公共编译器API”(当然,除了启动编译器之外)。
可能javax.script适合你。在这种情况下,您可以使用Bindings,它允许您为未知变量定义回调机制。但是如果没有详细说明你想要做什么,很难说这是否适合你。
答案 1 :(得分:0)
如果您不介意以编程方式执行此操作,则可以调查1.6 Java Compiler API和Compiler Tree API。这些以及其他信息均来自javac guide。以下是您的开始:
JavaCompiler jc = ToolProvider.getSystemJavaCompiler();
// setup params for the compilation task
JavacTask jct = (JavacTask)jc.getTask(...); // com.sun.source.util.JavacTask
TaskListener tl = ...;
jct.setTaskListener(tl);