AOP 最后一块拼图 _ AST 抽象语法树 ,大厂面经合集

2. 添加注解

@SupportedAnnotationTypes 指定此注解处理器支持的注解,可用 * 指定所有注解 @SupportedSourceVersion 指定支持的java的版本

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4FmqItFB-1630840796348)(https://user-gold-cdn.xitu.io/2019/1/21/1687069b6ea67f89?imageView2/0/w/1280/h/960/ignore-error/1)]

3. 获取 AST

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TiX7c8Uh-1630840796350)(https://user-gold-cdn.xitu.io/2019/1/21/1687069c28327e45?imageView2/0/w/1280/h/960/ignore-error/1)]

在注解处理器的 init 函数里,通过 Trees.instance(env) 拿到抽象语法树(AST)。 此处把ProcessingEnvironment强转成JavacProcessingEnvironment,后面的操作都变成了IDE编辑器内部的操作了。

4. 操作 AST

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-souWiY3i-1630840796351)(https://user-gold-cdn.xitu.io/2019/1/21/1687069c426fb365?imageView2/0/w/1280/h/960/ignore-error/1)]

在注解处理器的 process 函数中,我们扫描所有的类,实现一个自定义的 TreeTranslator。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zJ5vFTG4-1630840796353)(https://user-gold-cdn.xitu.io/2019/1/21/1687069c4a279c25?imageView2/0/w/1280/h/960/ignore-error/1)]

为什么自定义的 TreeTranslator 要复写 visitBlock?因为我们的需求场景是扫描所有 log 语句,粒度为语句块。AST 支持我们以不同的粒度去访问,还有哪些粒度呢?我们看下TreeTranslator 的继承层次,可以发现一个 Visitor 类。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OU7PDll1-1630840796355)(https://user-gold-cdn.xitu.io/2019/1/21/1687069c4bd828ad?imageView2/0/w/1280/h/960/ignore-error/1)]

打开 Visitor 类:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值