<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>12.2 Kotlin 编译器插件 on 编程那些事儿</title><link>https://before80.github.io/prgms/Kotlin/compilerandplugins/12.2-Kotlincompilerplugins/</link><description>Recent content in 12.2 Kotlin 编译器插件 on 编程那些事儿</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Sun, 13 Sep 2026 18:20:56 +0800</lastBuildDate><atom:link href="https://before80.github.io/prgms/Kotlin/compilerandplugins/12.2-Kotlincompilerplugins/index.xml" rel="self" type="application/rss+xml"/><item><title>12.2.1 编译器插件</title><link>https://before80.github.io/prgms/Kotlin/compilerandplugins/12.2-Kotlincompilerplugins/12.2.1-CompilerPluginsOverview/</link><pubDate>Sun, 13 Sep 2026 08:50:47 +0800</pubDate><guid>https://before80.github.io/prgms/Kotlin/compilerandplugins/12.2-Kotlincompilerplugins/12.2.1-CompilerPluginsOverview/</guid><description>&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://kotlinlang.org/docs/compiler-plugins-overview.html"&gt;https://kotlinlang.org/docs/compiler-plugins-overview.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="1221-编译器插件"&gt;12.2.1 编译器插件&lt;/h1&gt;
&lt;p&gt;编译器插件会挂接到编译过程中，在代码被编译时对其进行分析或修改，而无需修改编译器本身。例如，它们可以为代码添加注解，或生成新代码以使其与其他框架或 API 兼容。&lt;/p&gt;</description></item><item><title>12.2.2 All-open 编译器插件</title><link>https://before80.github.io/prgms/Kotlin/compilerandplugins/12.2-Kotlincompilerplugins/12.2.2-AllOpenPlugin/</link><pubDate>Sun, 13 Sep 2026 08:50:47 +0800</pubDate><guid>https://before80.github.io/prgms/Kotlin/compilerandplugins/12.2-Kotlincompilerplugins/12.2.2-AllOpenPlugin/</guid><description>&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://kotlinlang.org/docs/all-open-plugin.html"&gt;https://kotlinlang.org/docs/all-open-plugin.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="1222-all-open-编译器插件"&gt;12.2.2 All-open 编译器插件&lt;/h1&gt;
&lt;p&gt;Kotlin 中的类及其成员默认是 &lt;code&gt;final&lt;/code&gt; 的，这使得使用 Spring AOP 等要求类为 &lt;code&gt;open&lt;/code&gt; 的框架和库时不太方便。&lt;code&gt;all-open&lt;/code&gt; 编译器插件让 Kotlin 适应这些框架的要求：使带有特定注解的类及其成员无需显式写出 &lt;code&gt;open&lt;/code&gt; 关键字就是开放的。&lt;/p&gt;</description></item><item><title>12.2.3 kapt 编译器插件</title><link>https://before80.github.io/prgms/Kotlin/compilerandplugins/12.2-Kotlincompilerplugins/12.2.3-Kapt/</link><pubDate>Sun, 13 Sep 2026 08:50:47 +0800</pubDate><guid>https://before80.github.io/prgms/Kotlin/compilerandplugins/12.2-Kotlincompilerplugins/12.2.3-Kapt/</guid><description>&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://kotlinlang.org/docs/kapt.html"&gt;https://kotlinlang.org/docs/kapt.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="1223-kapt-编译器插件"&gt;12.2.3 kapt 编译器插件&lt;/h1&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;如果你符合以下情况，请使用 &lt;strong&gt;kapt&lt;/strong&gt;：* 你有一个 Maven 项目。* 你有一个 Gradle 项目，但所需的 Java 注解处理器尚不支持 KSP。&lt;a href="../../12.4-Kotlinsymbolprocessingapi/12.4.1-KspOverview/#supported-libraries"&gt;查看受支持的库列表&lt;/a&gt;。* 如果你符合以下情况，请使用 &lt;strong&gt;&lt;a href="../../12.4-Kotlinsymbolprocessingapi/12.4.1-KspOverview/"&gt;KSP&lt;/a&gt;&lt;/strong&gt;：* 你有一个 Gradle 项目，且所需的 Java 注解处理器支持 KSP。* 你想创建自己的注解处理器。&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;kapt 编译器插件让你可以在 Kotlin 中使用现有的 Java 注解处理器，并同时支持 Maven 和 Gradle。它会根据 Kotlin 源码生成桩文件，然后在这些桩文件上运行 Java 注解处理器。&lt;/p&gt;</description></item><item><title>12.2.4 Lombok 编译器插件</title><link>https://before80.github.io/prgms/Kotlin/compilerandplugins/12.2-Kotlincompilerplugins/12.2.4-Lombok/</link><pubDate>Sun, 13 Sep 2026 08:50:47 +0800</pubDate><guid>https://before80.github.io/prgms/Kotlin/compilerandplugins/12.2-Kotlincompilerplugins/12.2.4-Lombok/</guid><description>&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://kotlinlang.org/docs/lombok.html"&gt;https://kotlinlang.org/docs/lombok.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="1224-lombok-编译器插件"&gt;12.2.4 Lombok 编译器插件&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Alpha&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Kotlin Lombok 编译器插件允许 Kotlin 代码在同一个 Java/Kotlin 混合模块中生成并使用 Java 的 Lombok 声明。如果你从另一个模块调用这类声明，那么编译那个模块时不需要使用该插件。&lt;/p&gt;</description></item><item><title>12.2.5 No-arg 编译器插件</title><link>https://before80.github.io/prgms/Kotlin/compilerandplugins/12.2-Kotlincompilerplugins/12.2.5-NoArgPlugin/</link><pubDate>Sun, 13 Sep 2026 08:50:47 +0800</pubDate><guid>https://before80.github.io/prgms/Kotlin/compilerandplugins/12.2-Kotlincompilerplugins/12.2.5-NoArgPlugin/</guid><description>&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://kotlinlang.org/docs/no-arg-plugin.html"&gt;https://kotlinlang.org/docs/no-arg-plugin.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="1225-no-arg-编译器插件"&gt;12.2.5 No-arg 编译器插件&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;no-arg&lt;/em&gt; 编译器插件会为带特定注解的类生成一个额外的无参构造函数。&lt;/p&gt;
&lt;p&gt;生成的构造函数是合成的，因此不能从 Java 或 Kotlin 中直接调用，但可以通过反射调用。&lt;/p&gt;</description></item><item><title>12.2.6 Power-assert 编译器插件</title><link>https://before80.github.io/prgms/Kotlin/compilerandplugins/12.2-Kotlincompilerplugins/12.2.6-PowerAssert/</link><pubDate>Sun, 13 Sep 2026 08:50:47 +0800</pubDate><guid>https://before80.github.io/prgms/Kotlin/compilerandplugins/12.2-Kotlincompilerplugins/12.2.6-PowerAssert/</guid><description>&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://kotlinlang.org/docs/power-assert.html"&gt;https://kotlinlang.org/docs/power-assert.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="1226-power-assert-编译器插件"&gt;12.2.6 Power-assert 编译器插件&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;实验性&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Kotlin Power-assert 编译器插件通过提供带有上下文信息的详细失败消息来改善调试体验。它通过在失败消息中自动生成中间值，简化了编写测试的过程。它帮助你理解测试为何失败，而无需复杂的断言库。&lt;/p&gt;</description></item><item><title>12.2.7 SAM-with-receiver 编译器插件</title><link>https://before80.github.io/prgms/Kotlin/compilerandplugins/12.2-Kotlincompilerplugins/12.2.7-SamWithReceiverPlugin/</link><pubDate>Sun, 13 Sep 2026 08:50:47 +0800</pubDate><guid>https://before80.github.io/prgms/Kotlin/compilerandplugins/12.2-Kotlincompilerplugins/12.2.7-SamWithReceiverPlugin/</guid><description>&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://kotlinlang.org/docs/sam-with-receiver-plugin.html"&gt;https://kotlinlang.org/docs/sam-with-receiver-plugin.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="1227-sam-with-receiver-编译器插件"&gt;12.2.7 SAM-with-receiver 编译器插件&lt;/h1&gt;
&lt;p&gt;&lt;em&gt;sam-with-receiver&lt;/em&gt; 编译器插件会把带注解的 Java &amp;ldquo;单一抽象方法&amp;rdquo;（SAM）接口方法的第一个参数变成 Kotlin 中的接收者。只有在把该 SAM 接口作为 Kotlin lambda 传入时，这种转换才有效，对 SAM 适配器和 SAM 构造函数都适用（更多细节请参阅 &lt;a href="../../../interoperability/7.1-Javainterop/7.1.2-JavaInterop/#sam-conversions"&gt;SAM 转换文档&lt;/a&gt;）。&lt;/p&gt;</description></item><item><title>12.2.8 自定义编译器插件</title><link>https://before80.github.io/prgms/Kotlin/compilerandplugins/12.2-Kotlincompilerplugins/12.2.8-CustomCompilerPlugins/</link><pubDate>Sun, 13 Sep 2026 08:50:47 +0800</pubDate><guid>https://before80.github.io/prgms/Kotlin/compilerandplugins/12.2-Kotlincompilerplugins/12.2.8-CustomCompilerPlugins/</guid><description>&lt;blockquote&gt;
&lt;p&gt;原文链接: &lt;a href="https://kotlinlang.org/docs/custom-compiler-plugins.html"&gt;https://kotlinlang.org/docs/custom-compiler-plugins.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id="1228-自定义编译器插件"&gt;12.2.8 自定义编译器插件&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;警告：&lt;/strong&gt; Kotlin 编译器插件 API 不稳定，并且每个版本都会引入破坏性变更。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在创建自己的自定义编译器插件之前，请先查看&lt;a href="../12.2.1-CompilerPluginsOverview/"&gt;可用编译器插件列表&lt;/a&gt;，看看是否已有适合你用例的插件。&lt;/p&gt;
&lt;p&gt;你还可以确认是否能用 &lt;a href="https://kotlinlang.org/docs/ksp-overview.html"&gt;Kotlin Symbol Processing (KSP) API&lt;/a&gt; 或 &lt;a href="https://developer.android.com/studio/write/lint"&gt;Android lint&lt;/a&gt; 这类外部 linter 达到目的。&lt;/p&gt;</description></item></channel></rss>