12.2.1 编译器插件

原文链接: https://kotlinlang.org/docs/compiler-plugins-overview.html

12.2.1 编译器插件

编译器插件会挂接到编译过程中,在代码被编译时对其进行分析或修改,而无需修改编译器本身。例如,它们可以为代码添加注解,或生成新代码以使其与其他框架或 API 兼容。

本页介绍你可以使用的 Kotlin 编译器插件,以及当它们都不适合你的用例时你可以怎么做。

Kotlin 团队维护以下编译器插件:

| 插件 | 说明 |

| All-open | 自动把带注解的类及其成员变为 open,以便框架在运行时扩展它们。 | | AtomicFU | 把原子操作转换为高效的、针对特定平台的实现,以实现无锁并发。 | | DataFrame | 生成类型化 API,让你以安全、符合 Kotlin 习惯的方式使用 DataFrame。 | | jvm-abi-gen | 生成应用二进制接口(ABI)JAR。 | | js-plain-objects | 把 Kotlin 类暴露为普通 JavaScript 对象,以改善与 JS 工具链和库的互操作。 | | kapt | 在 Kotlin 代码上运行 Java 注解处理器并生成额外的源文件。 | | Lombok | 让 Kotlin 代码能够理解并使用 Java 源码中由 Lombok 注解生成的代码。 | | no-arg | 为带注解的类生成无参构造函数,以支持需要它的框架。 | | Power-assert | 通过展示表达式中每个部分的详细取值来增强断言失败信息。 | | 带接收者的 SAM | 允许 SAM 接口使用带接收者的 lambda,从而获得更接近 DSL 的语法。 | | 序列化 | 生成在不使用反射的情况下序列化和反序列化 Kotlin 对象的代码。 |

Google 的 Android 团队维护:

| 插件 | 说明 |

| Compose 编译器 Gradle 插件 | 把 Compose 编译器与 Gradle 集成,以启用声明式 UI 特性和 Compose 专属优化。 | | Parcelize 插件 | 自动生成 Parcelable 实现,让你可以在 Android 组件之间传递 Kotlin 对象。 |

如果你需要以这些插件未覆盖的方式调整编译过程,请先确认是否可以使用 Kotlin Symbol Processing (KSP) API 或 Android lint 这样的外部 linter。你可以浏览我们的 Kotlin Slack 或联系我们,就你的用例寻求建议。

如果你仍然找不到所需的东西,可以创建自定义编译器插件。请仅把这种方式作为最后手段,因为 Kotlin 编译器插件 API 是不稳定的。如果你创建了自定义编译器插件,就需要投入大量持续的维护工作,因为每个新的编译器版本都会引入破坏性变更。