Upgrade JVM toolchain to 25 and Kotlin toolchain to 2.3.20 (#1516)

Motivation
- Enable correct NullAway analysis
- Pick up toolchain fixes and improvements

Toolchains
- Require JDK 25 for JVM toolchain (keep Java 17 runtime compatibility)
- Require Kotlin 2.3.20 for Kotlin toolchain (keep Kotlin 2.2 runtime
compatibility)
- Require JDK 25 for Gradle daemon JVM (via
gradle-daemon-jvm.properties)
- Fix javac and kotlinc warnings from toolchain upgrades

CI
- Bump GitHub workflows to JDK 25

Building Kotlin
- Bump Kotlin language level to 2.2 to match stdlib version
- Consolidate build logic into pklKotlinBase.gradle.kts
- Adopt modern Kotlin plugin syntax
- Fix new kotlinc warnings
- Update ktfmt to 0.62
  - first version compatible with Kotlin 2.3.20
  - changes formatting compared to 0.61
- Replace dependency resolution rule with BOM alignment
  - rule was too broad and interfered with toolchain/runtime separation

Testing
- Expand matrix to JDK 25 (LTS) and 26
- Ensure each matrix task can be run independently
- Fix KotlinCodeGeneratorsTest and EmbeddedExecutorsTest on affected
JDKs
- Disable one test in CliCommandTest on affected JDKs (failure cause
unknown)

Compatibility fixes
- Fix reflective access in DocGenerator on affected JDKs

Build fixes
- Fix misuse of `task.enabled` vs. `report.required`
- Fix `gradlew tasks` on Windows
- Downgrade Spotless to 8.3.0 to (hopefully) work around sporadic
NoClassDefFoundError

Result
- NullAway runs correctly
- Broader JDK test coverage
- More reproducible and potentially faster builds
This commit is contained in:
odenix
2026-04-14 11:57:09 -07:00
committed by GitHub
parent 20f403e751
commit 2d4286ee7b
49 changed files with 1347 additions and 1096 deletions

View File

@@ -225,7 +225,7 @@ class SexpRenderer {
buf.append('\n')
renderExpr(expr)
}
classEntry.bodyList?.let { bodyList ->
classEntry.bodyList.let { bodyList ->
for (body in bodyList) {
buf.append('\n')
renderObjectBody(body)
@@ -932,7 +932,7 @@ class SexpRenderer {
buf.append('\n')
renderExpr(it)
}
property.bodyList?.let { bodies ->
property.bodyList.let { bodies ->
for (body in bodies) {
buf.append('\n')
renderObjectBody(body)
@@ -978,7 +978,7 @@ class SexpRenderer {
buf.append('\n')
renderExpr(expr)
}
predicate.bodyList?.let { bodyList ->
predicate.bodyList.let { bodyList ->
for (body in bodyList) {
buf.append('\n')
renderObjectBody(body)
@@ -998,7 +998,7 @@ class SexpRenderer {
buf.append('\n')
renderExpr(value)
}
entry.bodyList?.let { bodyList ->
entry.bodyList.let { bodyList ->
for (body in bodyList) {
buf.append('\n')
renderObjectBody(body)