我可以在java编译器将AST编译为类文件之前修改AST

时间:2013-03-12 09:21:42

标签: java javac

我想在将源代码编译到类文件之前添加一些东西(例如:添加方法或字段)。但我不知道该怎么做。有什么方法可以做到吗?

我知道一个开源项目Lombok,它可以自动为类添加setter和getters方法,IDE(eclipse)现在可以找到新添加的方法。所以有人可以告诉我它是如何实现的?

1 个答案:

答案 0 :(得分:2)

source code for lombok is on github。 Afaik它使用javac annotation processing feature的内部api。注释处理器只能创建新文件,而不能修改当前编译的文件。通过类型转换,修补类加载器并覆盖一些方法,lombok能够修改当前编译的java文件的抽象语法树并添加方法或源代码。它有效,但我认为这是一个黑客,而不是很依赖它。

如果你想修改创建的类文件,我认为像cglibasm这样的字节码重写框架是更清晰的解决方案。