gpt4 book ai didi

lombok - 如何阅读lombok的源码?

转载 作者:行者123 更新时间:2023-12-03 09:26:21 26 4
gpt4 key购买 nike

最近,我对“lombok”产生了很大的兴趣。我想通过阅读源代码来更多地了解它。

但是尝试之后,我发现这对我来说真的很难。我只发现有“javac”和“ECJ”两个实现。但不明白它是如何端到端工作的。

有人能给点建议吗?比如首先阅读哪个包/类,或者逻辑流程?

谢谢。

最佳答案

我目前正在写一篇关于 Lombok 的学士论文,所以我会尝试解释一些东西。Lombok 使用 Java 注释处理 [1],它基本上在使用某些注释的节点(例如类、方法)上运行一些预定义的任务。但是,您无法使用此方法修改现有源,这就是 Lombok 使用内部 API 的原因,这些 API 不受支持且可以进行更改。这就是为什么 Lombok 被很多人讨厌的原因,因为它基本上是一个 hack。

要从 Lombok 源开始,有两个主要的包:

  • lombok.javac Oracle Java 编译器的实现在哪里
  • lombok.eclipse Eclipse 编译器的实现在哪里

我简单介绍一下Oracle编译器部分。这是使用 lombok 注释编译项目期间发生的情况。

  1. lombok.javac.apt.Processor#process(...) 被调用,编译单元(将它们视为类)被移交给此类加工。
  2. 处理器将它们交给 JavacTransformer 类,在该类中将其转换为 AST。
  3. 然后使用 JavacTransformer 遍历此 AST。AnnotationVisitor 搜索代码中的所有注释。这是一个重要的部分,因为访问者可以找到所有注释,而 Java 注释处理无法检测到所有注释(例如,它忽略方法内的注释)。
  4. 找到的每个注释都由 HandlerLibrary 处理,它加载了所有转换(如 @Getter),并且知道应该为哪个注释触发哪个转换。
  5. 触发转换,即实现JavacAnnotationHandler的类。您可以在 lombok.javac.handlers 包中找到转换。转换验证注释是否正确使用并完成其工作(例如 @Getter 生成 getter 方法)。

黑客部分在哪里?好吧,如果你查看代码,你会看到一些可疑的强制转换,例如:

(JCCompilationUnit) path.getCompilationUnit();

Lombok 期望接收特定的接口(interface)实现,并使用这些内部实现来完成它的任务。

进一步阅读:

[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关于添加您自己的转换的文章

玩得开心!

关于lombok - 如何阅读lombok的源码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20876101/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com