SuperAPI AI 工具集

stabilizing-compose-types

编程与开发

查看项目

更新于 10-16 00:21

技能介绍

用途:当诊断报告(composables.txt / classes.txt)给出不稳定参数清单后,本技能指导如何修复这些类型,策略是严格的三级瀑布,不得颠倒顺序。

主要能力与三级策略:

  1. 真正稳定:把属性改为 val 且嵌套类型本身稳定,编译器会自动推断,无需注解。
  2. 注解:源码自有且能遵守契约时,对全 val 且嵌套不可变、equals 为结构性的类型用 @Immutable;值可变但变更由 Snapshot 通知 Compose 的(如持有 MutableState)用 @Stable。@Immutable 优化更强,常量构造可触发静态表达式提升,应优先。
  3. 第三方或 Java 类型:用 stabilityConfigurationFiles(复数)在根目录建 stability_config.conf 列出类名或通配符,并在 composeCompiler { } 中 stabilityConfigurationFiles.add(...)。旧版单数属性已弃用。

集合处理:将 kotlin.collections.List/Set/Map 换成 kotlinx.collections.immutable 的 ImmutableList/ImmutableSet/ImmutableMap,用 persistentListOf() 等工厂或 toImmutableList() 适配器,优于白名单。

纯 Kotlin 模块:可依赖 androidx.compose.runtime:runtime-annotation(官方推荐)或 com.github.skydoves:compose-stable-marker(旧版),无需完整 compose-runtime。

限制与规则:未遵守契约不得加注解;不得包装 Row/Column/Box 等 inline composable 来“强制”可跳过;不得把 Flow<T> 作为 composable 参数,应在 ViewModel 用 collectAsStateWithLifecycle 上游收集。修复后需重跑诊断验证参数变为 stable 或 runtime。

适用前置:Kotlin 2.0.0+ 并应用 org.jetbrains.kotlin.plugin.compose;第二级注解需相应依赖;第三级需 Compose Compiler 1.5.5+。诊断未完成、问题属于阶段错误或 derivedStateOf、或根因是 Flow 参数时,不适用本技能。