Skip to content

編譯器外掛程式

編譯器外掛程式會掛勾(hook)編譯程序,在程式碼編譯時進行分析或修改,而無需修改編譯器本身。例如,它們可以為程式碼加上註解或產生新程式碼,使其與其他架構或 API 相容。

本頁面說明可供使用的 Kotlin 編譯器外掛程式,以及在沒有適合您使用案例的情況下可以採取的措施。

Kotlin 團隊維護以下編譯器外掛程式:

外掛程式描述
All-open自動將加上註解的類別及其成員設為 open,以便架構在執行期進行擴充。
AtomicFU將不可分割操作(atomic operations)轉換為高效且平台特定的實作,以實現無鎖(lock-free)的並行。
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 with receiver允許 SAM 介面使用具有接收者的 Lambda 運算式,以獲得更接近 DSL 的語法。
Serialization在不使用反射的情況下,產生用於序列化與反序列化 Kotlin 物件的程式碼。

Google 的 Android 團隊維護:

外掛程式描述
Compose compiler Gradle plugin將 Compose 編譯器與 Gradle 整合,以啟用宣告式 UI 功能和 Compose 特有的最佳化。
Parcelize plugin自動產生 Parcelable 實作,以便您在 Android 元件之間傳遞 Kotlin 物件。

如果您需要以這些外掛程式未涵蓋的方式調整編譯程序,請先確認是否可以使用 Kotlin 符號處理 (KSP) API 或外部 Linter(例如 Android lint)。您可以瀏覽我們的 Kotlin Slack聯絡我們針對您的使用案例尋求建議。

如果您仍然找不到需要的內容,可以建立自訂編譯器外掛程式。僅將此方法作為最後手段,因為 Kotlin 編譯器外掛程式 API 是不穩定的。如果您建立自訂編譯器外掛程式,則需要投入大量的持續心力來維護它,因為每個新的編譯器版本都可能引入破壞性變更。