From 5a208cd3dc1e708da109990c67b2e00a5f79d06e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 25 Oct 2026 02:12:20 +0000 Subject: [PATCH 1/2] Update kotlin to v2.4.21 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 000a72d..b4df1dd 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -kotlin = "2.4.10" +kotlin = "2.4.21" kotlinLanguage = "2.1" shadow = "9.6.1" pluginPublish = "2.1.1" From bece52959dc6b79528bdfe6f2503d0be6a9a50af Mon Sep 17 00:00:00 2001 From: devcrocod Date: Thu, 29 Oct 2026 14:36:13 +0100 Subject: [PATCH 2/2] Hold bundled Analysis API at 2.4.10 while bumping Kotlin to 2.4.21 Since Kotlin 2.4.20 the kotlin-compiler fat jar no longer contains the decompiler (it moved to kotlin-compiler-common-for-ide), and its ProGuard-shrunk IntelliJ core lacks classes the 2.4.2x standalone Analysis API needs. StandaloneAnalysisAPISession now fails to start, which broke every integration test: NoClassDefFoundError: org/jetbrains/kotlin/analysis/decompiler/stub/file/ClsKotlinBinaryClassCache Adding kotlin-compiler-common-for-ide only moves the failure to NoClassDefFoundError: com/intellij/openapi/components/ComponentManagerEx. Running 2.4.2x would mean replacing kotlin-compiler with the full IntelliJ platform jars. The kotlin-analysis-api* artifacts that Maven Central gets with 2.5.0 are the cleaner way forward. Keep the Kotlin Gradle plugin and stdlib at 2.4.21. Move the Analysis API artifacts and kotlin-compiler to a separate analysisApi version held at 2.4.10, and have Renovate hold that set until 2.5.0. Co-Authored-By: Claude Opus 5.5 --- .github/renovate.json | 14 ++++++++++++++ CLAUDE.md | 2 +- gradle/libs.versions.toml | 19 +++++++++++-------- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/.github/renovate.json b/.github/renovate.json index a9ea19d..d46582a 100644 --- a/.github/renovate.json +++ b/.github/renovate.json @@ -23,6 +23,20 @@ "groupName": "kotlin", "allowedVersions": "/^\\d+\\.\\d+\\.\\d+$/" }, + { + "description": "Hold the bundled Analysis API at 2.4.10 until 2.5.0: from 2.4.20 kotlin-compiler can no longer host a standalone session (see libs.versions.toml)", + "matchPackageNames": [ + "org.jetbrains.kotlin:kotlin-compiler", + "org.jetbrains.kotlin:analysis-api-for-ide", + "org.jetbrains.kotlin:analysis-api-impl-base-for-ide", + "org.jetbrains.kotlin:analysis-api-platform-interface-for-ide", + "org.jetbrains.kotlin:analysis-api-standalone-for-ide", + "org.jetbrains.kotlin:analysis-api-k2-for-ide", + "org.jetbrains.kotlin:low-level-api-fir-for-ide", + "org.jetbrains.kotlin:symbol-light-classes-for-ide" + ], + "allowedVersions": "/^(2\\.4\\.10|2\\.([5-9]|[1-9]\\d)\\.\\d+|[3-9]\\.\\d+\\.\\d+)$/" + }, { "matchPackageNames": [ "org.junit:junit-bom", diff --git a/CLAUDE.md b/CLAUDE.md index 5a14267..7397705 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -53,7 +53,7 @@ Runs inside the worker's isolated classloader. Bundles the Kotlin Analysis API ( - Korro's own version lives in `gradle.properties` (`version=...`). Both subprojects inherit it via `subprojects { version = rootProject.version }` in the root `build.gradle.kts`. At runtime the plugin reads it from a generated `META-INF/korro-gradle-plugin.properties` resource (`KorroPlugin.readKorroPluginVersion`). - Every other version lives in `gradle/libs.versions.toml`. The catalog is the single source of truth — do not hard-code versions in subproject scripts; add to the catalog and reference as `libs.*` / `libs.plugins.*`. -- `libs.versions.kotlin` — pinned Kotlin / Analysis API version. `libs.versions.kotlinLanguage` — Kotlin `languageVersion`/`apiVersion` used to compile Korro itself; unrelated to the bundled Analysis API. JVM target is hard-coded to `17` in the root `build.gradle.kts`. +- `libs.versions.kotlin` — Kotlin Gradle plugin and stdlib used to build Korro. `libs.versions.analysisApi` — the bundled Analysis API (`*-for-ide` artifacts) together with the `kotlin-compiler` jar it runs on; they always move as one and may lag `kotlin` (the catalog comment says why). `libs.versions.kotlinLanguage` — Kotlin `languageVersion`/`apiVersion` used to compile Korro itself; unrelated to the bundled Analysis API. JVM target is hard-coded to `17` in the root `build.gradle.kts`. ## Invariants to preserve diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b4df1dd..dae5283 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,8 @@ [versions] kotlin = "2.4.21" +# Bundled Analysis API + the kotlin-compiler jar it runs on. Held at 2.4.10 until 2.5.0: from 2.4.20 kotlin-compiler lacks +# the decompiler and IntelliJ classes a standalone session needs (NoClassDefFoundError: ClsKotlinBinaryClassCache). +analysisApi = "2.4.10" kotlinLanguage = "2.1" shadow = "9.6.1" pluginPublish = "2.1.1" @@ -10,15 +13,15 @@ mavenPublish = "0.37.0" [libraries] kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin" } -kotlin-compiler = { module = "org.jetbrains.kotlin:kotlin-compiler", version.ref = "kotlin" } +kotlin-compiler = { module = "org.jetbrains.kotlin:kotlin-compiler", version.ref = "analysisApi" } -kotlin-analysisApi = { module = "org.jetbrains.kotlin:analysis-api-for-ide", version.ref = "kotlin" } -kotlin-analysisApi-implBase = { module = "org.jetbrains.kotlin:analysis-api-impl-base-for-ide", version.ref = "kotlin" } -kotlin-analysisApi-platformInterface = { module = "org.jetbrains.kotlin:analysis-api-platform-interface-for-ide", version.ref = "kotlin" } -kotlin-analysisApi-standalone = { module = "org.jetbrains.kotlin:analysis-api-standalone-for-ide", version.ref = "kotlin" } -kotlin-analysisApi-k2 = { module = "org.jetbrains.kotlin:analysis-api-k2-for-ide", version.ref = "kotlin" } -kotlin-lowLevelApiFir = { module = "org.jetbrains.kotlin:low-level-api-fir-for-ide", version.ref = "kotlin" } -kotlin-symbolLightClasses = { module = "org.jetbrains.kotlin:symbol-light-classes-for-ide", version.ref = "kotlin" } +kotlin-analysisApi = { module = "org.jetbrains.kotlin:analysis-api-for-ide", version.ref = "analysisApi" } +kotlin-analysisApi-implBase = { module = "org.jetbrains.kotlin:analysis-api-impl-base-for-ide", version.ref = "analysisApi" } +kotlin-analysisApi-platformInterface = { module = "org.jetbrains.kotlin:analysis-api-platform-interface-for-ide", version.ref = "analysisApi" } +kotlin-analysisApi-standalone = { module = "org.jetbrains.kotlin:analysis-api-standalone-for-ide", version.ref = "analysisApi" } +kotlin-analysisApi-k2 = { module = "org.jetbrains.kotlin:analysis-api-k2-for-ide", version.ref = "analysisApi" } +kotlin-lowLevelApiFir = { module = "org.jetbrains.kotlin:low-level-api-fir-for-ide", version.ref = "analysisApi" } +kotlin-symbolLightClasses = { module = "org.jetbrains.kotlin:symbol-light-classes-for-ide", version.ref = "analysisApi" } kotlinx-serialization-core = { module = "org.jetbrains.kotlinx:kotlinx-serialization-core", version.ref = "kotlinxSerialization" } caffeine = { module = "com.github.ben-manes.caffeine:caffeine", version.ref = "caffeine" }