diff --git a/MODULE.bazel b/MODULE.bazel index 1e02e99f00e8..3e6a5d0387ba 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -26,7 +26,7 @@ bazel_dep(name = "bazel_skylib", version = "1.9.0") bazel_dep(name = "abseil-cpp", version = "20260107.1", repo_name = "absl") bazel_dep(name = "nlohmann_json", version = "3.12.0.bcr.1", repo_name = "json") bazel_dep(name = "fmt", version = "12.1.0-codeql.1") -bazel_dep(name = "rules_kotlin", version = "2.2.2-codeql.1") +bazel_dep(name = "rules_kotlin", version = "2.4.21-codeql.1") bazel_dep(name = "gazelle", version = "0.54.0") bazel_dep(name = "rules_dotnet", version = "0.21.5-codeql.1") bazel_dep(name = "googletest", version = "1.18.0.bcr.1") @@ -37,6 +37,27 @@ bazel_dep(name = "zstd", version = "1.5.7.bcr.1") bazel_dep(name = "buildifier_prebuilt", version = "10.1.0", dev_dependency = True) +# Pin the compiler to support the Kotlin 1.8 and 1.9 language versions required by older extractors. +kotlin = use_extension("@rules_kotlin//src/main/starlark/core/repositories:bzlmod_setup.bzl", "rules_kotlin_extensions") +kotlin.kotlinc_version( + sha256 = "a623871f1cd9c938946948b70ef9170879f0758043885bbd30c32f024e511714", + version = "2.2.21", +) +use_repo( + kotlin, + "btapi_impl", + "com_github_google_ksp", + "com_github_jetbrains_kotlin", + "com_github_jetbrains_kotlin_git", + "com_github_pinterest_ktlint", + "jarjar", + "kotlin_build_tools_api", + "kotlinx_coroutines_core_jvm", + "kotlinx_serialization_core_jvm", + "kotlinx_serialization_json", + "kotlinx_serialization_json_jvm", +) + # Keep edition and version approximately in sync with internal repo. # the versions there are canonical, the versions here are used for CI in github/codeql, as well as for the vendoring of dependencies. RUST_EDITION = "2024" diff --git a/java/kotlin-extractor/deps.bzl b/java/kotlin-extractor/deps.bzl index bee713f8c466..24503f7baa67 100644 --- a/java/kotlin-extractor/deps.bzl +++ b/java/kotlin-extractor/deps.bzl @@ -27,6 +27,7 @@ def _kotlin_dep_impl(repository_ctx): "kotlin-stdlib.jar", "kotlin-reflect.jar", "kotlin-script-runtime.jar", + "kotlinx-coroutines-core-jvm.jar", "trove4j.jar", ): repository_ctx.symlink("empty.zip", jar) diff --git a/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt b/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt index 4571987da6af..7a092faa9d56 100644 --- a/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt +++ b/java/kotlin-extractor/src/main/kotlin/KotlinFileExtractor.kt @@ -6966,7 +6966,7 @@ open class KotlinFileExtractor( tw.writeExprs_stringliteral(id, type.javaResult.id, parent, idx) tw.writeExprsKotlinType(id, type.kotlinResult.id) extractExprContext(id, locId, enclosingCallable, enclosingStmt) - tw.writeNamestrings(toQuotedLiteral(v.toString()), v.toString(), id) + tw.writeNamestrings(toQuotedLiteral(v), v, id) } } v == null -> { diff --git a/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/patches/codeql_add_language_version_option.patch b/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/patches/codeql_add_language_version_option.patch deleted file mode 100644 index 795d1f88f387..000000000000 --- a/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/patches/codeql_add_language_version_option.patch +++ /dev/null @@ -1,30 +0,0 @@ ---- a/src/main/starlark/core/options/opts.kotlinc.bzl 2000-01-01 01:00:00.000000000 +0100 -+++ b/src/main/starlark/core/options/opts.kotlinc.bzl 2025-11-17 16:51:01.012063056 +0100 -@@ -51,6 +51,11 @@ - return None - return ["-Xjdk-release=%s" % version] - -+def _map_language_version_to_flag(version): -+ if not version: -+ return None -+ return ["-language-version=%s" % version, "-api-version=%s" % version] -+ - _KOPTS_ALL = { - "include_stdlibs": struct( - args = dict( -@@ -495,6 +500,15 @@ - value_to_flag = None, - map_value_to_flag = _map_warning_level, - ), -+ "language_version": struct( -+ args = dict( -+ default = "1.9", -+ doc = "-language-version", -+ ), -+ type = attr.string, -+ value_to_flag = None, -+ map_value_to_flag = _map_language_version_to_flag, -+ ), - } - - def _merge(key, rule_defined): diff --git a/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/source.json b/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/source.json deleted file mode 100644 index 7025fb00a273..000000000000 --- a/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/source.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "integrity": "sha256-QR2yavs0ksyDUbW1NJkxUir+LFTyZRttEncwoSVtD2A=", - "url": "https://github.com/bazelbuild/rules_kotlin/releases/download/v2.2.2/rules_kotlin-v2.2.2.tar.gz", - "patches": { - "codeql_add_language_version_option.patch": "sha256-HoH8NWXxmYHmm/SxaugRdXgMntvcQx5gRLW2yQIvWhM=", - "codeql_do_not_emit_jdeps.patch": "sha256-cg06knW+Eq13qHCaelbnZka/WnGPvRrcqXHtpXsy/rA=" - }, - "patch_strip": 1 -} diff --git a/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/MODULE.bazel b/misc/bazel/registry/modules/rules_kotlin/2.4.21-codeql.1/MODULE.bazel similarity index 51% rename from misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/MODULE.bazel rename to misc/bazel/registry/modules/rules_kotlin/2.4.21-codeql.1/MODULE.bazel index ec37914a8f73..16139faa4dec 100644 --- a/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/MODULE.bazel +++ b/misc/bazel/registry/modules/rules_kotlin/2.4.21-codeql.1/MODULE.bazel @@ -1,21 +1,19 @@ +"""Bazel module manifest for the released rules_kotlin package.""" + module( name = "rules_kotlin", - version = "2.2.2-codeql.1", + version = "2.4.21-codeql.1", compatibility_level = 1, repo_name = "rules_kotlin", ) bazel_dep(name = "platforms", version = "0.0.11") -bazel_dep(name = "bazel_skylib", version = "1.7.1") +bazel_dep(name = "bazel_skylib", version = "1.8.2") bazel_dep(name = "rules_java", version = "8.9.0") -bazel_dep(name = "rules_android", version = "0.6.4") -bazel_dep(name = "bazel_features", version = "1.25.0") -bazel_dep(name = "protobuf", version = "29.0", repo_name = "com_google_protobuf") -bazel_dep(name = "rules_proto", version = "6.0.2", repo_name = "rules_proto") -bazel_dep(name = "abseil-py", version = "2.1.0", repo_name = "py_absl") -bazel_dep(name = "rules_cc", version = "0.0.16") -bazel_dep(name = "bazel_worker_api", version = "0.0.8") -bazel_dep(name = "bazel_worker_java", version = "0.0.8") +bazel_dep(name = "rules_license", version = "1.0.0") +bazel_dep(name = "rules_android", version = "0.7.3") +bazel_dep(name = "bazel_features", version = "1.39.0") +bazel_dep(name = "bazel_lib", version = "3.1.0") rules_java_toolchains = use_extension("@rules_java//java:extensions.bzl", "toolchains") use_repo(rules_java_toolchains, "remote_java_tools") @@ -26,13 +24,16 @@ rules_kotlin_extensions = use_extension( ) use_repo( rules_kotlin_extensions, + "btapi_impl", "com_github_google_ksp", "com_github_jetbrains_kotlin", "com_github_pinterest_ktlint", - "kotlin_build_tools_impl", + "jarjar", + "kotlin_build_tools_api", + "kotlinx_coroutines_core_jvm", "kotlinx_serialization_core_jvm", "kotlinx_serialization_json", "kotlinx_serialization_json_jvm", ) -register_toolchains("//kotlin/internal:default_toolchain") +register_toolchains("//kotlin:default_toolchain") diff --git a/misc/bazel/registry/modules/rules_kotlin/2.4.21-codeql.1/patches/codeql_add_language_version_option.patch b/misc/bazel/registry/modules/rules_kotlin/2.4.21-codeql.1/patches/codeql_add_language_version_option.patch new file mode 100644 index 000000000000..105b80afe186 --- /dev/null +++ b/misc/bazel/registry/modules/rules_kotlin/2.4.21-codeql.1/patches/codeql_add_language_version_option.patch @@ -0,0 +1,15 @@ +CodeQL still builds extractors with Kotlin 1.8 and 1.9 language/API versions. +Keep those supported and keep the API version aligned with the language version. +--- a/src/main/starlark/core/options/opts.kotlinc.bzl ++++ b/src/main/starlark/core/options/opts.kotlinc.bzl +@@ -93,9 +93,7 @@ + def _map_language_version_to_flag(version): + if not version: + return None +- if int(version.split(".")[0]) < 2: +- fail("rules_kotlin requires language_version 2.0 or newer; got %s" % version) +- return ["-language-version=%s" % version] ++ return ["-language-version=%s" % version, "-api-version=%s" % version] + + def _map_xxlanguage_to_flag(values): + return ["-XXLanguage:%s" % v for v in values] diff --git a/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/patches/codeql_do_not_emit_jdeps.patch b/misc/bazel/registry/modules/rules_kotlin/2.4.21-codeql.1/patches/codeql_do_not_emit_jdeps.patch similarity index 94% rename from misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/patches/codeql_do_not_emit_jdeps.patch rename to misc/bazel/registry/modules/rules_kotlin/2.4.21-codeql.1/patches/codeql_do_not_emit_jdeps.patch index 838750ba12eb..aeda6be2c569 100644 --- a/misc/bazel/registry/modules/rules_kotlin/2.2.2-codeql.1/patches/codeql_do_not_emit_jdeps.patch +++ b/misc/bazel/registry/modules/rules_kotlin/2.4.21-codeql.1/patches/codeql_do_not_emit_jdeps.patch @@ -4,7 +4,7 @@ allows us to not have to specify that option (and therefore pull in `rules_kotli internal repo. --- a/kotlin/settings/BUILD.bazel +++ b/kotlin/settings/BUILD.bazel -@@ -16,6 +16,6 @@ release_archive( +@@ -16,7 +16,7 @@ # Flag that controls the emission of jdeps files during kotlin jvm compilation. bool_flag( name = "jvm_emit_jdeps", @@ -12,4 +12,4 @@ internal repo. + build_setting_default = False, visibility = ["//visibility:public"], ) - + diff --git a/misc/bazel/registry/modules/rules_kotlin/2.4.21-codeql.1/patches/codeql_do_not_propagate_kotlin_warning_mode_to_javac.patch b/misc/bazel/registry/modules/rules_kotlin/2.4.21-codeql.1/patches/codeql_do_not_propagate_kotlin_warning_mode_to_javac.patch new file mode 100644 index 000000000000..1f9eac1636c8 --- /dev/null +++ b/misc/bazel/registry/modules/rules_kotlin/2.4.21-codeql.1/patches/codeql_do_not_propagate_kotlin_warning_mode_to_javac.patch @@ -0,0 +1,28 @@ +rules_kotlin 2.4 propagates the Kotlin warning mode to javac, so the extractor's +Kotlin warn = "error" setting also makes Java warnings fatal. This breaks the +Java 8 target with JDK 25's obsolete source/target option warnings. Keep Kotlin +warnings-as-errors for Kotlin compilation without changing javac warning behavior. +--- a/kotlin/internal/jvm/compile.bzl ++++ b/kotlin/internal/jvm/compile.bzl +@@ -1162,21 +1162,6 @@ + for flag in javac_options_to_flags(plugin[JavacOptions]) + ]) + +- # Compile the Java half with the same warning mode as the kotlin part, unless the javac +- # options (or a plugin's) already set one: a single `warn` value governs the whole target. +- # A per-diagnostic level in `x_warning_level` limits the derivation, because javac has no +- # equivalent of `-Xwarning-level`. A diagnostic kept at `warning` or `disabled` under +- # `warn = "error"` must not turn every javac warning into an error, and a diagnostic raised +- # to `warning` or `error` under `warn = "off"` must not silence every javac warning. +- if "-nowarn" not in javac_opts and "-Werror" not in javac_opts: +- kotlinc_warn = getattr(kotlinc_options, "warn", None) if kotlinc_options else None +- warning_levels = (getattr(kotlinc_options, "x_warning_level", None) if kotlinc_options else None) or {} +- levels = warning_levels.values() +- if kotlinc_warn == "off" and "error" not in levels and "warning" not in levels: +- javac_opts.append("-nowarn") +- elif kotlinc_warn == "error" and "warning" not in levels and "disabled" not in levels: +- javac_opts.append("-Werror") +- + java_info = java_common.compile( + ctx, + source_files = srcs.java, diff --git a/misc/bazel/registry/modules/rules_kotlin/2.4.21-codeql.1/source.json b/misc/bazel/registry/modules/rules_kotlin/2.4.21-codeql.1/source.json new file mode 100644 index 000000000000..9556aa0286b4 --- /dev/null +++ b/misc/bazel/registry/modules/rules_kotlin/2.4.21-codeql.1/source.json @@ -0,0 +1,10 @@ +{ + "integrity": "sha256-qjJVRS2+m1LaK6d4fwhl8QeAWIUQnznD1br8IaUhvLY=", + "url": "https://github.com/bazel-contrib/rules_kotlin/releases/download/v2.4.21/rules_kotlin-v2.4.21.tar.gz", + "patches": { + "codeql_add_language_version_option.patch": "sha256-ml0fzhPwNozMi6yKtEn9YLM8LSQE4BWiimdwYzennCo=", + "codeql_do_not_emit_jdeps.patch": "sha256-yoBFnSWJyeF+gyhX+03TMTnRxUQJjup/f/KORdxVsAE=", + "codeql_do_not_propagate_kotlin_warning_mode_to_javac.patch": "sha256-TvfKfINvi1/tcLq3HDUs2doD4kr8AkMv0nsZvUHPjwg=" + }, + "patch_strip": 1 +} diff --git a/misc/bazel/registry/modules/rules_kotlin/metadata.json b/misc/bazel/registry/modules/rules_kotlin/metadata.json index ea756f783643..bb307a93badf 100644 --- a/misc/bazel/registry/modules/rules_kotlin/metadata.json +++ b/misc/bazel/registry/modules/rules_kotlin/metadata.json @@ -1,5 +1,5 @@ { - "homepage": "https://github.com/bazelbuild/rules_kotlin", + "homepage": "https://github.com/bazel-contrib/rules_kotlin", "maintainers": [ { "email": "ben@ben.cm", @@ -18,10 +18,11 @@ } ], "repository": [ - "github:bazelbuild/rules_kotlin" + "github:bazelbuild/rules_kotlin", + "github:bazel-contrib/rules_kotlin" ], "versions": [ - "2.2.2-codeql.1" + "2.4.21-codeql.1" ], "yanked_versions": {} }