最近对“龙目岛”产生了浓厚的兴趣。我想通过阅读源代码来了解更多。
但是在尝试之后,我发现对我来说真的很难。我只发现“javac”和“ECJ”有两个实现。但不明白它是如何端到端工作的。
有人可以给点建议吗?喜欢先阅读哪个包/类,还是逻辑流程?
谢谢。
最近对“龙目岛”产生了浓厚的兴趣。我想通过阅读源代码来了解更多。
但是在尝试之后,我发现对我来说真的很难。我只发现“javac”和“ECJ”有两个实现。但不明白它是如何端到端工作的。
有人可以给点建议吗?喜欢先阅读哪个包/类,还是逻辑流程?
谢谢。
我目前正在写一篇关于龙目岛的学士论文,所以我会尝试解释一些东西。Lombok 使用Java 注释处理[1],它基本上在使用某些注释的节点(例如类、方法)上运行一些预定义的任务。但是,您无法使用这种方法修改现有源代码,这就是 Lombok 使用内部 API 的原因,这些 API 不受支持且可以更改。这就是为什么 Lombok 被许多人讨厌的原因,因为它基本上是一个 hack。
从 Lombok 源码开始,有两个主要的包:
我将简要介绍 Oracle 编译器部分。这是在使用 lombok 注释编译项目期间发生的情况。
hacky部分在哪里?好吧,如果您查看代码,您会看到一些可疑的转换,例如:
(JCCompilationUnit) path.getCompilationUnit();
Lombok 期望接收特定的接口实现,并使用这些内部实现来完成它的工作。
进一步阅读:
[1] http://deors.wordpress.com/2011/10/08/annotation-processors/是很好的教程
[2] lombok 是如何工作的?Lombok 首席开发人员解释了为什么 lombok 使用内部 API
[3] http://notatube.blogspot.cz/2010/12/project-lombok-creating-custom.html关于添加您自己的转换的文章
玩得开心!