最近,我对“lombok”很感兴趣。 我想通过阅读源代码了解更多信息。
但经过尝试,我发现这对我来说真的很难。 我发现有两个“javac”和“ECJ”的实现。但不明白它是如何端到端的。
有人可以提供一些建议吗? 比如先读取哪个包/类,或逻辑流?
感谢。
答案 0 :(得分:4)
我目前正在写关于龙目岛的学士论文,所以我会尝试解释一些东西。 Lombok使用Java Annotation Processing [1],它基本上在使用某些注释的节点(例如类,方法)上运行一些预定义任务。但是,您无法使用此方法修改现有源,这就是为什么Lombok使用内部API,这些API不受支持且可以进行更改。这就是为什么龙目岛受到许多人的憎恨,因为它基本上是一个黑客攻击。
从Lombok源开始,有两个主要的包:
我将简要介绍Oracle编译器部分。这是在使用lombok注释编译项目期间发生的事情。
hacky部分在哪里?好吧,如果你查看代码,你会看到一些可疑的演员,比如:
(JCCompilationUnit) path.getCompilationUnit();
Lombok希望接收某些接口实现,并使用这些内部实现来完成它的工作。
进一步阅读:
[1] http://deors.wordpress.com/2011/10/08/annotation-processors/是很好的教程
[2] How does lombok work?由Lombok领导开发人员解释为什么lombok使用内部API
[3] http://notatube.blogspot.cz/2010/12/project-lombok-creating-custom.html关于添加自己的转换的文章
玩得开心!