Java编译器在将AST编译为类文件之前,我能否修改AST?

3

我希望在源代码编译成类文件前添加一些内容(例如:添加方法或字段)。但我不知道该如何实现。有没有任何方法可以做到这一点?

我知道一个开源项目叫 Lombok,它可以自动将setter和getter方法添加到一个类中,并且IDE(eclipse)可以立即找到新添加的方法。那么,有人可以告诉我它是如何实现的吗?


看一下cglib。它可能满足你的需求,尽管它不是一个编译器扩展。 - Henrik Aasted Sørensen
1个回答

4
lombok的源代码在github上。据我所知,它使用javac注解处理功能的内部API。注解处理器只能创建新文件,而不能修改当前编译的文件。通过类型转换、修补类加载器和覆盖某些方法,lombok能够修改当前正在编译的Java文件的抽象语法树,并添加方法或源代码。这是可行的,但我认为它是一种黑客行为,不应太多依赖它。
如果你想修改已创建的类文件,像cglibasm这样的字节码重写框架是更清晰的解决方案,我个人认为。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接