Annotation Processor 的运作

运作方式

经过前面这麽漫长的铺陈,我们终於要来讲 annotation processor 了!

image

这张图是 library 的 annotation processor 运作方式,annotation processor 使用了在前几篇文章中定义好的 annotation ,透过这些 annotation ,我们可以知道使用者要爬的资料有哪些和他们要被放在什麽样的资料结构里,所以我们才会定义了 @RssTag@RssAttribute@RssValue@RssRawData 。接着我们透过 code generator 去产生使用者克制过後的 parser ,这些 parser 的实作方式,可以是我们之前提到的 DOM parser 或是 XmlPullParser 。如果是 Android 平台上使用,可以用 XmlPullParser 产出 Android 专用的客制化 parser 。如果是想要让任何可以使用 Kotlin 的平台使用,可以用 DOM parser 。Annotation processor 的实作方式也可以用 KAPT 或者 KSP ,KAPT 全名为 Kotlin Annotation Processor Tool 是 Kotlin 用来处理 annotation 的工具,另外一个 KSP ,全名为 Kotiln Symbol Processor ,他的作用跟 KAPT 差不多,但效能据说比 KAPT 好上一倍。Code generator 的部分,我们采用 Kotlin Poet ,它有一系列好用的 API ,让我们用 Kotlin 程序码去产生 Kotlin 的程序码。?

Project Modules

首先我们先切分好 module,以下是专案内有的 module:

  1. :annotation module:只放 library 定义的 annotation。
  2. :processor module:使用 annotation module ,也放一些两个平台 processor 会用到的共用的 generator 、 constant 和 util 类别。
  3. :android module:纯 android 平台的 processor 程序码,也有含该平台的测试程序码。
  4. :kotlin module:Kotlin 平台的 processor 程序码,也有含该平台的测试程序码。
  5. :testCommon module:专门放一些测试会用得到共用程序码。
  6. :processorTest module:进行一些客制化格式的测试,主要都是针对自定义 processor 的测试。

<<:  Html表单&表单元素(DAY5)

>>:  Day 4 - Using Argon2 for Salted Password Hashing with ASP.NET Web Forms C# 使用 Argon2 替密码加盐後杂凑加密

DAY21 搞样式--CSS Gird小进阶(Template Area)

前言 今天我们一样使用上篇的格线布局作为范例 假设我们现在想在容器(Container)中放入三个元...

[Tableau Public] day 9:分析前先处理一下原始资料吧

第九天,打完疫苗已经22小时,目前只有接种处抬手会酸痛,目前还没感受到其他副作用。不过头已经开始有点...

Day28回圈(JavaScript)

回圈 JS一般使用的回圈有这几种 for 给予一定的循环次数做回圈 for/in 在指定对象的属性里...

D1. 学习基础C、C++语言

学习动机: 资工大一最刚开始就是从c语言开始,刚上大一的时候都不知道程序语言在干嘛,然後进度也教的很...

Day.10 「没有 RWD 的网站 === 没有未来」 —— RWD 响应式网页设计

虽然标题有点耸动,但在这个行动装置越来越多的现在,如果没有手机版的网页,SEO 排名会大受影响,也...