Skip to content

Kotlin: add Kotlin 2.4.0 support#21970

Open
andersfugmann wants to merge 2 commits into
mainfrom
andersfugmann/kotlin-2.4-v2
Open

Kotlin: add Kotlin 2.4.0 support#21970
andersfugmann wants to merge 2 commits into
mainfrom
andersfugmann/kotlin-2.4-v2

Conversation

@andersfugmann

@andersfugmann andersfugmann commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Add extractor support for Kotlin 2.4.0 and adjust the integration tests that depend on a pre-2.4 compiler.

Changes

  • Extractor support for 2.4.0. Adds the Kotlin 2.4.0 compiler-plugin variant (component registrar, IR compatibility shims, and version-specific utilities), bundles the 2.4.0 compiler dependencies, updates the build wiring (BUILD.bazel, versions.bzl, MODULE.bazel, dev/wrapper.py), refreshes the supported-versions documentation, and raises the "Kotlin version too new" diagnostic bound from 2.3.30 to 2.4.10.
  • Mark kotlin1 integration tests. Six integration tests pass -language-version 1.9, which Kotlin 2.4 no longer accepts. They are marked with @pytest.mark.kotlin1 so CI can run them on a pinned pre-2.4 compiler.

Notes

  • This PR does not change query results: the only expected-file change is the version bound in the kotlin-version-too-new diagnostic.
  • The known K2 mixed Java/Kotlin extractor differences (which become visible once -language-version 1.9 is no longer available) are a needed follow-up investigation.

Copilot AI review requested due to automatic review settings June 11, 2026 07:34
@andersfugmann andersfugmann requested review from a team as code owners June 11, 2026 07:34

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Comment on lines 7810 to 7812
* this.dispatchReceiver = dispatchReceiver
* this.extensionReceiver = extensionReceiver
* this.codeQlExtensionReceiver = extensionReceiver
* }
Comment on lines 11 to 15
"2.2.20-Beta2",
"2.3.0",
"2.3.20",
"2.4.0",
]
@andersfugmann andersfugmann force-pushed the andersfugmann/kotlin-2.4-v2 branch 2 times, most recently from 30b0a30 to 547c78f Compare June 12, 2026 09:53
@andersfugmann andersfugmann marked this pull request as draft June 12, 2026 14:09
@hfhbd hfhbd mentioned this pull request Jun 13, 2026
andersfugmann and others added 2 commits June 16, 2026 16:24
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>
@andersfugmann andersfugmann force-pushed the andersfugmann/kotlin-2.4-v2 branch from 79437b8 to 1b785a8 Compare June 16, 2026 14:25
@andersfugmann andersfugmann changed the title Kotlin support 2.4.0 and drop 1.x test mode Kotlin: add Kotlin 2.4.0 support Jun 17, 2026
@andersfugmann andersfugmann marked this pull request as ready for review June 17, 2026 08:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants