Kotlin support 2.4.0 and drop 1.x test mode#21970
Conversation
|
Result-loss analysis: all changed failing tests were reproduced in Kotlin 2.0 mode, avoidable losses were addressed, and remaining differences are the pre-existing K2 mixed Java/Kotlin callable-binding issue tracked at https://github.com/github/codeql-kotlin-team/issues/196 and discussed in prior thread. |
|
/qlucie |
There was a problem hiding this comment.
Pull request overview
This pull request updates the Java/Kotlin extractor and its test infrastructure to support Kotlin 2.4.0, while dropping Kotlin 1.x support (minimum Kotlin version becomes 2.0.0) and updating baselines/docs accordingly.
Changes:
- Add Kotlin 2.4.0 compiler/stdlib dependencies and extractor compatibility shims for Kotlin IR API changes in 2.4.0.
- Switch Kotlin integration tests that previously used Kotlin 1.x language mode to use
-language-version 2.0, and update expected outputs. - Update docs and change notes to reflect the new supported Kotlin version range and deprecation of Kotlin < 2.0.
Show a summary per file
| File | Description |
|---|---|
| MODULE.bazel | Adds Bazel repos for Kotlin 2.4.0 compiler/embeddable/stdlib artifacts. |
| java/ql/test/query-tests/security/CWE-312/android/CleartextStorage/DB-CHECK.expected | Updated test baseline output (dbcheck). |
| java/ql/test/query-tests/security/CWE-312/android/CleartextStorage/CleartextStorageSharedPrefsTest.expected | Updated test baseline output. |
| java/ql/test/library-tests/pathsanitizer/test.expected | Updated test baseline output. |
| java/ql/test/library-tests/pathsanitizer/DB-CHECK.expected | Updated test baseline output (dbcheck). |
| java/ql/lib/change-notes/2026-06-08-kotlin-drop-1x.md | Adds change note deprecating Kotlin < 2.0. |
| java/ql/lib/change-notes/2026-06-04-kotlin-2.4.0.md | Adds change note for Kotlin 2.4.0 support. |
| java/ql/integration-tests/kotlin/all-platforms/kotlin_java_lowering_wildcards/test.py | Moves test compilation to -language-version 2.0. |
| java/ql/integration-tests/kotlin/all-platforms/kotlin_java_lowering_wildcards/test.expected | Updates expected output for wildcard lowering changes. |
| java/ql/integration-tests/kotlin/all-platforms/kotlin_java_lowering_wildcards/DB-CHECK.expected | Updated test baseline output (dbcheck). |
| java/ql/integration-tests/kotlin/all-platforms/java-interface-redeclares-tostring/test.py | Moves test compilation to -language-version 2.0. |
| java/ql/integration-tests/kotlin/all-platforms/java-interface-redeclares-tostring/test.expected | Updates expected output for interface toString redeclare scenario. |
| java/ql/integration-tests/kotlin/all-platforms/file_classes/test.py | Moves test compilation to -language-version 2.0. |
| java/ql/integration-tests/kotlin/all-platforms/file_classes/classes.expected | Updates expected class extraction output. |
| java/ql/integration-tests/kotlin/all-platforms/extractor_information_kotlin1/test.py | Moves test compilation to -language-version 2.0. |
| java/ql/integration-tests/kotlin/all-platforms/extractor_information_kotlin1/ExtractorInformation.expected | Updates expected extractor info (Uses Kotlin 2 flag). |
| java/ql/integration-tests/kotlin/all-platforms/external-property-overloads/test.py | Moves test compilation to -language-version 2.0. |
| java/ql/integration-tests/kotlin/all-platforms/external-property-overloads/test.expected | Updates expected external binary location formatting. |
| java/ql/integration-tests/kotlin/all-platforms/enhanced-nullability/test.py | Moves test compilation to -language-version 2.0. |
| java/ql/integration-tests/kotlin/all-platforms/enhanced-nullability/test.expected | Updates expected output for enhanced nullability extraction. |
| java/ql/integration-tests/kotlin/all-platforms/enhanced-nullability/DB-CHECK.expected | Updated test baseline output (dbcheck). |
| java/ql/integration-tests/kotlin/all-platforms/diagnostics/kotlin-version-too-new/diagnostics.expected | Updates max-supported-version diagnostic message. |
| java/kotlin-extractor/versions.bzl | Adds 2.4.0 to supported versions list; adjusts language-version mapping. |
| java/kotlin-extractor/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar | Adds service registration for Kotlin 2.4+ compiler plugin registrar. |
| java/kotlin-extractor/src/main/kotlin/utils/versions/v_2_4_0/parameterIndexExcludingReceivers.kt | Adds Kotlin 2.4.0-specific parameter indexing logic (handles new receiver kinds). |
| java/kotlin-extractor/src/main/kotlin/utils/versions/v_2_4_0/Kotlin2ComponentRegistrar.kt | Introduces Kotlin 2.4.0 CompilerPluginRegistrar-based registration path. |
| java/kotlin-extractor/src/main/kotlin/utils/versions/v_2_4_0/IrCompat.kt | Adds Kotlin 2.4.0 IR compatibility accessors for removed APIs. |
| java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_9_0-Beta/Kotlin2ComponentRegistrar.kt | Refactors older registrar to route through doRegisterExtensions and centralize extension registration. |
| java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_8_0/Kotlin2ComponentRegistrar.kt | Refactors older registrar to route through doRegisterExtensions. |
| java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_8_0/IrCompat.kt | Adds pre-2.4.0 IR compatibility wrappers matching the new shim API. |
| java/kotlin-extractor/src/main/kotlin/utils/TypeSubstitution.kt | Switches annotation handling to compatibility wrappers (codeQlAddAnnotations / codeQlAnnotationFromSymbolOwner). |
| java/kotlin-extractor/src/main/kotlin/utils/JvmNames.kt | Switches annotation argument access to compatibility wrappers. |
| java/kotlin-extractor/src/main/kotlin/TrapWriter.kt | Switches extension receiver access to compatibility wrapper. |
| java/kotlin-extractor/src/main/kotlin/MetaAnnotationSupport.kt | Switches IR annotation construction/mutation to compatibility wrappers. |
| java/kotlin-extractor/src/main/kotlin/KotlinUsesExtractor.kt | Switches parameter/receiver access to compatibility wrappers. |
| java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt | Switches multiple IR access patterns to compatibility wrappers; updates related comment/docs. |
| java/kotlin-extractor/src/main/kotlin/KotlinExtractorComponentRegistrar.kt | Refactors registrar to use doRegisterExtensions and centralized extension registration. |
| java/kotlin-extractor/src/main/kotlin/comments/CommentExtractor.kt | Switches extension receiver detection to compatibility wrapper. |
| java/kotlin-extractor/dev/wrapper.py | Bumps default wrapper Kotlin version to 2.4.0. |
| java/kotlin-extractor/deps/kotlin-stdlib-2.4.0.jar | Adds Kotlin 2.4.0 stdlib (LFS pointer). |
| java/kotlin-extractor/deps/kotlin-compiler-embeddable-2.4.0.jar | Adds Kotlin 2.4.0 embeddable compiler (LFS pointer). |
| java/kotlin-extractor/deps/kotlin-compiler-2.4.0.jar | Adds Kotlin 2.4.0 compiler (LFS pointer). |
| java/kotlin-extractor/BUILD.bazel | Conditionally packages CompilerPluginRegistrar service file for Kotlin >= 2.4.0. |
| docs/codeql/reusables/supported-versions-compilers.rst | Updates documented supported Kotlin version range to 2.0.0–2.4.x. |
Copilot's findings
- Files reviewed: 44/44 changed files
- Comments generated: 4
| * this.dispatchReceiver = dispatchReceiver | ||
| * this.extensionReceiver = extensionReceiver | ||
| * this.codeQlExtensionReceiver = extensionReceiver | ||
| * } |
| "2.2.20-Beta2", | ||
| "2.3.0", | ||
| "2.3.20", | ||
| "2.4.0", | ||
| ] |
|
Current red Qlucie checks are caused by semmle-code workflow jobs still invoking |
|
/qlucie |
|
Addressed review feedback in commit e50e0b5. Updated the Kotlin 2.4 registrar plugin id to kotlin-extractor, removed unused registrar state, fixed the FunctionReference explanatory comment to use extensionReceiver, and removed Kotlin 1.x entries from java/kotlin-extractor/versions.bzl (with MODULE.bazel regenerated via bazel mod tidy). Local validation: tools/bazel build target many and the enhanced-nullability Kotlin integration test pass. |
30b0a30 to
547c78f
Compare
Why the Java/Kotlin checks are red here (and why that is expected)TL;DR: the red Java/Kotlin checks on this PR are a cross-repo coordination artefact, not a defect in these changes. They run the ql branch against semmle-code What is happeningThe heavy Java/Kotlin checks reported here (Language Tests, Integration tests, Kotlin internal queries) are dispatched by the internal CI against semmle-code. For this PR they paired the ql branch with semmle-code The failure is the exact signature those semmle-code changes resolve: In other words: on Why this PR cannot fix it on its ownThe fix is on the semmle-code side and is not expressible in this repository:
These live in github/semmle-code#55714. The ql changes here are validated in integration through that PR: it points at this branch and runs the complete Java/Kotlin suite green (Language Tests including the extras lane, all RTJO lanes, Kotlin internal queries, Bazel Format, and Integration tests on Linux, Ubuntu, Windows, Windows 2022, and macOS). ResolutionNo action is required on this PR to address the red checks. They resolve when #55714 merges to semmle-code |
Add the Kotlin 2.4.0 compiler plugin variant (component registrar, IR compatibility shims, and version-specific utilities), bundle the 2.4.0 compiler dependencies, and update the build wiring, supported version metadata and the too-new diagnostic bound. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Mark the integration tests that require a Kotlin 1.x language version with @pytest.mark.kotlin1 so CI can run them on a pinned pre-2.4 compiler (Kotlin 2.4 no longer accepts -language-version 1.9). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
79437b8 to
1b785a8
Compare
Drop Kotlin 1.x test mode to 2.0, add Kotlin 2.4.0 extractor compatibility, and keep only required expected file updates. Known K2 mixed Java/Kotlin differences are tracked in https://github.com/github/codeql-kotlin-team/issues/196.