增量式处理(Incremental Processing)

Last modified: 2025/05/22

增量式处理是一种处理技术, 尽可能的避免重新处理源代码. 增量式处理的主要目的是减少典型的修改-编译-测试循环的处理时间. 请参见 Wikipedia 词条 增量计算.

为了检测哪个源代码是 脏的(dirty) (也就是需要重新处理), KSP 需要处理器的帮助, 确定哪个输入源代码对应到哪个生成的输出. 为了改善这种经常很累赘, 而且容易出错的处理, KSP 设计目标是 只需要处理器使用的最少量的 根源代码, 作为起点来浏览代码结构. 也就是说, 如果 KSNode 从以下方式得到, 那么处理器需要将一个输出关联到对应的 KSNode 的源代码:

  • Resolver.getAllFiles

  • Resolver.getSymbolsWithAnnotation

  • Resolver.getClassDeclarationByName

  • Resolver.getDeclarationsFromPackage

目前增量式处理会默认启用. 要关闭它, 请设置 Gradle 属性 ksp.incremental=false. 要为依赖项和输出对应的脏文件集启用 log, 请使用 ksp.incremental.log=true. 你可以在 build 输出目录中找到这些 log 文件, 扩展名为 .log.

在 JVM 平台, 默认会追踪 classpath 中的变更, 以及 Kotlin 和 Java 源代码的变更. 如果要只追踪 Kotlin 和 Java 源代码的变更, 请设置 Gradle 属性 ksp.incremental.intermodule=false, 关闭对 classpath 中变更的追踪.