Lombok 随笔 操作AST

0. 像是Java编译器(Javac)的一个插件

JSR 经委员会审核通过的Java规范提案 by CSDN-青衣宋词
JSR 269 编译时API by CSDN-ni_hao_fan
Javac 抽象语法树 AST by 简书-zl_adams
深入理解Lombok by CSDN-Steafan_
jsr269抽象语法树操作API编译期注解处理-简单demo by 简书-东南枝下

1. Java Specification Requests 269

实际上JSR 269不仅仅提供了插件化处理注解的API

它建立了Java 语言本身的一个模型,它把method、package、constructor、type、variable、enum、annotation等Java语言元素映射为Types和Elements,从而将Java语言的语义映射成为对象,我们可以在javax.lang.model包下面可以看到这些类

我们可以利用JSR 269提供的API来操作AST来构建一个功能丰富的元编程环境


这里以Lombok的实现原理为例,抽象一下JSR 269的API在javac的注入

请添加图片描述
执行顺序就如上图的叠放顺序

2. Abstract Syntax Tree

如上所述,我们可以通过AST的API在javac的编译源码(.java)生成二进制文件(.class)过程中对源码进行操作

请添加图片描述

2.1 Parse and Enter:将源码按结构parse成一颗语法树(AST),enter到编译器的符号表

符号表是由一组符号地址和符号信息构成的表格

2.2 Annotation Processing:基于Pluggable Annotations Processing API对AST增删改查

如lombok注解,操作AST的API即Pluggable Annotations Processing API

2.3 Analyse and Generate:将AST、符号表analyse成字节码,输出到.class

还发生了下列过程:
	检查语法
	转换语法(泛型擦除、装拆箱、等等的语法糖)

3. lombok

lombok的插件是用来解决IDE对使用Lombok注解的代码的报错的(这里说的“插件”不是.pom中的<plugin>,是安装到IDE的插件)

3.1 常用注解

@Cleanup
@Data
@Slf4j
@Builder
支持构建父类属性的@SuperBuilder

@SneakyThrows
作用相当于编译后自动在方法外套一层try{…}catch(Throwable t){throw t;}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肯尼思布赖恩埃德蒙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值