Skip to content

Commit 44ca7f3

Browse files
authored
Prepare for release 0.10.0 (#172)
1 parent ffca5a6 commit 44ca7f3

10 files changed

Lines changed: 50 additions & 8 deletions

File tree

CHANGELOG.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,31 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [0.10.0] - 2026-06-11
9+
10+
### Added
11+
- **Stability Doctor (IDE plugin)** — a ranked, quantified "what to fix first" list that combines the static stability verdict, the downstream cascade blast radius, and measured runtime waste (Reality Check) into prioritized prescriptions. Scores are **ESTIMATED** (static only, works with no device) or **MEASURED** (backed by live heatmap data; measured waste always outranks estimates). Each prescription shows its problem parameters with static reasons, runtime grades, and value provenance, plus one-click fixes: change `var``val` (aborts if write usages exist), annotate with `@Immutable`/`@Stable`, add the type to the stability configuration file, and wrap call-site arguments in `remember(keys) { ... }` for silent-waste parameters (guarded by conservative safety rules and a preview dialog). New **Doctor** tool-window tab, **Code → Run Stability Doctor** action, and a settings group.
12+
- **Trace-All mode (Gradle + compiler + runtime)** — opt-in module-wide auto-instrumentation: every restartable composable is traced as if it carried `@TraceRecomposition`, so the Live Heatmap, Reality Check, and Stability Doctor get module-wide runtime data without manual annotations.
13+
```kotlin
14+
composeStabilityAnalyzer {
15+
traceAll {
16+
enabled.set(true) // default: false (opt-in)
17+
threshold.set(2) // default: 2 — skips the initial-composition burst
18+
variants.set(listOf("debug")) // default: ["debug"]; never applies to tests
19+
}
20+
}
21+
```
22+
Explicit `@TraceRecomposition` annotations keep their own tag/threshold; previews, inline/readonly/non-restartable composables, and property getters are excluded automatically.
23+
- **Fully qualified names in recomposition logs** — log headers now carry trailing `(fq: com.example.UserProfile)` and `(auto)` tokens (backward compatible with older parsers), so the IDE attributes runtime data precisely even when composables share a simple name across packages. `RecompositionEvent` gains additive `fqName` and `isAutoTraced` fields.
24+
25+
### Fixed
26+
- **Android Studio freeze when starting the heatmap on large projects** (#168) — the typealias-resolution fallback iterated and parsed every Kotlin file in the project, and the heatmap inlay refresh ran analysis on the EDT. Lookups now use stub indexes, and the refresh computes on a background thread (the EDT only applies inlay mutations).
27+
- **AGP 9 no longer leaks to consumers** (#165, thanks to @valeriopilo-tomtom) — the Gradle plugin depends on `gradle-api` as `compileOnly` and isolates all AGP types behind an Android-only registrar, so KMP/JVM projects without AGP work and AGP 8.x projects no longer get AGP 9 on their buildscript classpath.
28+
- **Nullable types now match the stability configuration file** (#166, thanks to @xplayerCZ) — `kotlinx.datetime.LocalTime?` matches a `kotlinx.datetime.LocalTime` config entry.
29+
30+
### Changed
31+
- **Runtime disabled-path hardening** — with `ComposeStabilityAnalyzer.setEnabled(false)`, trackers allocate nothing (early exits before any event construction); the tracker cache is thread-safe and keyed by fully qualified name to avoid cross-package collisions.
32+
833
## [0.9.0] - 2026-06-04
934

1035
### Added

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ This is incredibly useful for:
286286
First, add the plugin to the `[plugins]` section of your `libs.versions.toml` file:
287287

288288
```toml
289-
stability-analyzer = { id = "com.github.skydoves.compose.stability.analyzer", version = "0.9.0" }
289+
stability-analyzer = { id = "com.github.skydoves.compose.stability.analyzer", version = "0.10.0" }
290290
```
291291

292292
Then, apply it to your root `build.gradle.kts` with `apply false`:
@@ -308,6 +308,7 @@ It’s **strongly recommended to use the exact same Kotlin version** as this lib
308308

309309
| Stability Analyzer | Kotlin |
310310
|--------------------|-------------|
311+
| 0.10.0 | 2.4.0 |
311312
| 0.9.0 | 2.4.0 |
312313
| 0.8.0 | 2.3.21 |
313314
| 0.7.5 | 2.3.21 |

app/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ plugins {
1717
id(libs.plugins.android.application.get().pluginId)
1818
id(libs.plugins.kotlin.android.get().pluginId)
1919
id(libs.plugins.compose.compiler.get().pluginId)
20-
id(libs.plugins.compose.stability.analyzer.get().pluginId)
20+
alias(libs.plugins.compose.stability.analyzer)
2121
}
2222

2323
android {

build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ plugins {
99
alias(libs.plugins.compose.compiler) apply false
1010
alias(libs.plugins.kotlin.multiplatform) apply false
1111
alias(libs.plugins.jetbrains.compose) apply false
12-
alias(libs.plugins.compose.stability.analyzer) apply false
1312
alias(libs.plugins.kotlin.binary.compatibility)
1413
alias(libs.plugins.nexus.plugin)
1514
alias(libs.plugins.spotless)

compose-stability-analyzer-idea/CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,15 @@
22

33
All notable changes to the IntelliJ IDEA plugin will be documented in this file.
44

5+
## [0.10.0] - 2026-06-11
6+
7+
### Added
8+
- **Stability Doctor** — a ranked, quantified fix list combining the static stability verdict, cascade blast radius, and measured runtime waste into prioritized prescriptions with one-click fixes (`var``val`, `@Immutable`/`@Stable`, stability-config entry, and guarded `remember(...)` hoisting for silent-waste parameters). Scores are **ESTIMATED** without a device and upgrade to **MEASURED** during a heatmap session. New **Doctor** tool-window tab, **Code → Run Stability Doctor** action, and a **Stability Doctor** settings group.
9+
- **Precise runtime-data matching** — heatmap/Reality/Doctor data is keyed by fully qualified name when the runtime reports it (`(fq:)` log token, runtime ≥ 0.10.0), so same-named composables across packages no longer share inlays; older runtimes keep working via simple-name fallback.
10+
11+
### Fixed
12+
- **Android Studio freeze when starting the heatmap on large projects** (#168) — typealias and source-location lookups now use stub indexes instead of iterating/parsing every project file, and the heatmap inlay refresh runs its analysis on a background thread (the EDT only applies inlay mutations). Refresh ticks are skipped while a previous cycle is still running and during indexing.
13+
514
## [0.9.0] - 2026-06-04
615

716
### Changed

compose-stability-analyzer-idea/build.gradle.kts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ kotlin {
2626
}
2727

2828
group = "com.github.skydoves"
29-
version = "0.9.0"
29+
version = "0.10.0"
3030

3131
repositories {
3232
mavenLocal()
@@ -38,7 +38,7 @@ repositories {
3838
}
3939

4040
dependencies {
41-
implementation("com.github.skydoves:compose-stability-runtime-jvm:0.9.0")
41+
implementation("com.github.skydoves:compose-stability-runtime-jvm:0.10.0")
4242

4343
intellijPlatform {
4444
intellijIdeaCommunity("2025.2")
@@ -74,6 +74,12 @@ intellijPlatform {
7474
</ul>
7575
""".trimIndent()
7676
changeNotes = """
77+
<b>0.10.0</b>
78+
<ul>
79+
<li><b>New: Stability Doctor</b> - A ranked, quantified "what to fix first" list combining the static stability verdict, cascade blast radius, and measured runtime waste into prioritized prescriptions with one-click fixes (var &rarr; val, @Immutable/@Stable, stability-config entry, and guarded remember(...) hoisting for silent-waste parameters). Works without a device (ESTIMATED scores) and upgrades to MEASURED during a heatmap session. New Doctor tool-window tab and Code &rarr; Run Stability Doctor action.</li>
80+
<li><b>Trace-All support</b> - With the Gradle plugin's new traceAll mode (0.10.0), the Heatmap, Reality Check, and Doctor receive module-wide runtime data without manual @TraceRecomposition annotations; runtime data is matched by fully qualified name, so same-named composables across packages resolve precisely.</li>
81+
<li><b>Fixed: Android Studio freeze when starting the heatmap on large projects</b> - lookups now use stub indexes and the inlay refresh runs its analysis on a background thread.</li>
82+
</ul>
7783
<b>0.9.0</b>
7884
<ul>
7985
<li><b>Updated to Kotlin 2.4.0.</b></li>

docs/version-map.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ It is **strongly recommended to use the exact same Kotlin version** as this libr
66

77
| Stability Analyzer | Kotlin |
88
|--------------------|--------|
9+
| 0.10.0 | 2.4.0 |
10+
| 0.9.0 | 2.4.0 |
911
| 0.8.0 | 2.3.21 |
1012
| 0.7.5 | 2.3.21 |
1113
| 0.7.4 | 2.3.20 |

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ kotlin.mpp.androidGradlePluginCompatibility.nowarn=true
4848

4949
# Maven publishing
5050
GROUP=com.github.skydoves
51-
VERSION_NAME=0.9.0
51+
VERSION_NAME=0.10.0
5252

5353
POM_URL=https://github.com/skydoves/compose-stability-analyzer/
5454
POM_SCM_URL=https://github.com/skydoves/compose-stability-analyzer/

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ androidGradlePlugin = "9.1.1"
1212
androidxActivity = "1.13.0"
1313
androidxComposeBom = "2026.05.01"
1414
jetbrains-compose = "1.11.0"
15-
compose-stability-analyzer = "0.9.0"
15+
compose-stability-analyzer = "0.10.0"
1616
runtimeAnnotation = "1.11.2"
1717
spotless = "7.0.2"
1818
shadow = "9.0.0-beta12"

stability-gradle/src/main/kotlin/com/skydoves/compose/stability/gradle/StabilityAnalyzerGradlePlugin.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public class StabilityAnalyzerGradlePlugin : KotlinCompilerPluginSupportPlugin {
4545
// This version should match the version in gradle.properties (VERSION_NAME).
4646
// Update this when bumping the library version — it pins the compiler/runtime
4747
// artifacts the Gradle plugin pulls onto the Kotlin compile classpath.
48-
internal const val VERSION = "0.9.0"
48+
internal const val VERSION = "0.10.0"
4949

5050
// Compiler option keys
5151
private const val OPTION_ENABLED = "enabled"

0 commit comments

Comments
 (0)