Skip to content

Commit 2763b94

Browse files
committed
Add support for Kotlin 2.2+ with versioned artifact system
Kotlin 2.2 removed trove4j and android-extensions jars from the distribution. This change introduces version-specific artifact definitions (artifacts_2.1.bzl and artifacts_2.2.bzl) to handle these differences, with automatic selection based on Kotlin version. Updates default Kotlin version to 2.2. Changes: - Created WriteKotlinArtifacts tool to generate artifact definitions - Added artifacts_2.1.bzl (includes trove4j) and artifacts_2.2.bzl - Updated compiler.bzl to use KOTLIN_STDLIBS from artifacts - Updated default Kotlin version to 2.2.21 - Added custom_compiler_version example to test backward compatibility - Updated jdeps plugin imports to use K2 FIR APIs Fixes #1373
1 parent 5711009 commit 2763b94

File tree

32 files changed

+671
-81
lines changed

32 files changed

+671
-81
lines changed

.bazelrc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ common --enable_runfiles
1515

1616
# To update these lines, execute
1717
# `bazel run @rules_bazel_integration_test//tools:update_deleted_packages`
18-
build --deleted_packages=.bazelbsp,.bazelbsp/aspects,examples/android,examples/android/app,examples/android/bzl,examples/android/libAndroid,examples/android/libJava,examples/android/libKtAndroid,examples/android/libKtAndroid/src/test/java/examples/android/lib,examples/android/third_party,examples/anvil,examples/anvil/app,examples/anvil/app/src/androidTest/java/com/squareup/anvil/sample,examples/anvil/app/src/main/java/com/squareup/anvil/sample,examples/anvil/app/src/test/java/com/squareup/anvil/sample,examples/anvil/library,examples/anvil/library/src/main/java/com/squareup/anvil/sample,examples/anvil/repro/src/main/java/com/repro/lib,examples/anvil/scopes,examples/anvil/scopes/src/main/java/com/squareup/scopes,examples/anvil/third_party,examples/associates,examples/associates/projects/core/api,examples/associates/projects/core/api/src/test/kotlin/core/api,examples/associates/projects/core/impl,examples/associates/projects/core/impl/src/test/kotlin/core/impl,examples/dagger,examples/dagger/third_party,examples/deps,examples/deps/bzl,examples/deps/libAndroid1,examples/deps/libAndroid2,examples/deps/libAndroid3,examples/deps/libAndroid4,examples/deps/libJava1,examples/deps/libJava2,examples/deps/libJava3,examples/deps/libJava4,examples/deps/libKt1,examples/deps/libKt2,examples/deps/libKt3,examples/deps/libKt4,examples/deps/libKtAndroid1,examples/deps/libKtAndroid2,examples/deps/libKtAndroid3,examples/deps/libKtAndroid4,examples/jetpack_compose,examples/jetpack_compose/app,examples/jetpack_compose/compose-ui,examples/ksp,examples/ksp/third_party,examples/multiplex,examples/multiplex/src,examples/plugin,examples/plugin/src/allopen,examples/plugin/src/allopennoarg,examples/plugin/src/noarg,examples/plugin/src/parcelize,examples/plugin/src/sam_with_receiver,examples/plugin/src/serialization,examples/trivial,examples/trivial/app,src/main/starlark/release_archive
19-
query --deleted_packages=.bazelbsp,.bazelbsp/aspects,examples/android,examples/android/app,examples/android/bzl,examples/android/libAndroid,examples/android/libJava,examples/android/libKtAndroid,examples/android/libKtAndroid/src/test/java/examples/android/lib,examples/android/third_party,examples/anvil,examples/anvil/app,examples/anvil/app/src/androidTest/java/com/squareup/anvil/sample,examples/anvil/app/src/main/java/com/squareup/anvil/sample,examples/anvil/app/src/test/java/com/squareup/anvil/sample,examples/anvil/library,examples/anvil/library/src/main/java/com/squareup/anvil/sample,examples/anvil/repro/src/main/java/com/repro/lib,examples/anvil/scopes,examples/anvil/scopes/src/main/java/com/squareup/scopes,examples/anvil/third_party,examples/associates,examples/associates/projects/core/api,examples/associates/projects/core/api/src/test/kotlin/core/api,examples/associates/projects/core/impl,examples/associates/projects/core/impl/src/test/kotlin/core/impl,examples/dagger,examples/dagger/third_party,examples/deps,examples/deps/bzl,examples/deps/libAndroid1,examples/deps/libAndroid2,examples/deps/libAndroid3,examples/deps/libAndroid4,examples/deps/libJava1,examples/deps/libJava2,examples/deps/libJava3,examples/deps/libJava4,examples/deps/libKt1,examples/deps/libKt2,examples/deps/libKt3,examples/deps/libKt4,examples/deps/libKtAndroid1,examples/deps/libKtAndroid2,examples/deps/libKtAndroid3,examples/deps/libKtAndroid4,examples/jetpack_compose,examples/jetpack_compose/app,examples/jetpack_compose/compose-ui,examples/ksp,examples/ksp/third_party,examples/multiplex,examples/multiplex/src,examples/plugin,examples/plugin/src/allopen,examples/plugin/src/allopennoarg,examples/plugin/src/noarg,examples/plugin/src/parcelize,examples/plugin/src/sam_with_receiver,examples/plugin/src/serialization,examples/trivial,examples/trivial/app,src/main/starlark/release_archive
18+
build --deleted_packages=.bazelbsp,.bazelbsp/aspects,examples/android,examples/android/app,examples/android/bzl,examples/android/libAndroid,examples/android/libJava,examples/android/libKtAndroid,examples/android/libKtAndroid/src/test/java/examples/android/lib,examples/android/third_party,examples/anvil,examples/anvil/app,examples/anvil/app/src/androidTest/java/com/squareup/anvil/sample,examples/anvil/app/src/main/java/com/squareup/anvil/sample,examples/anvil/app/src/test/java/com/squareup/anvil/sample,examples/anvil/library,examples/anvil/library/src/main/java/com/squareup/anvil/sample,examples/anvil/repro/src/main/java/com/repro/lib,examples/anvil/scopes,examples/anvil/scopes/src/main/java/com/squareup/scopes,examples/anvil/third_party,examples/associates,examples/associates/projects/core/api,examples/associates/projects/core/api/src/test/kotlin/core/api,examples/associates/projects/core/impl,examples/associates/projects/core/impl/src/test/kotlin/core/impl,examples/custom_compiler_version,examples/custom_compiler_version/app,examples/dagger,examples/dagger/third_party,examples/deps,examples/deps/bzl,examples/deps/libAndroid1,examples/deps/libAndroid2,examples/deps/libAndroid3,examples/deps/libAndroid4,examples/deps/libJava1,examples/deps/libJava2,examples/deps/libJava3,examples/deps/libJava4,examples/deps/libKt1,examples/deps/libKt2,examples/deps/libKt3,examples/deps/libKt4,examples/deps/libKtAndroid1,examples/deps/libKtAndroid2,examples/deps/libKtAndroid3,examples/deps/libKtAndroid4,examples/jetpack_compose,examples/jetpack_compose/app,examples/jetpack_compose/compose-ui,examples/ksp,examples/ksp/third_party,examples/multiplex,examples/multiplex/src,examples/plugin,examples/plugin/src/allopen,examples/plugin/src/allopennoarg,examples/plugin/src/noarg,examples/plugin/src/parcelize,examples/plugin/src/sam_with_receiver,examples/plugin/src/serialization,examples/trivial,examples/trivial/app,src/main/starlark/release_archive
19+
query --deleted_packages=.bazelbsp,.bazelbsp/aspects,examples/android,examples/android/app,examples/android/bzl,examples/android/libAndroid,examples/android/libJava,examples/android/libKtAndroid,examples/android/libKtAndroid/src/test/java/examples/android/lib,examples/android/third_party,examples/anvil,examples/anvil/app,examples/anvil/app/src/androidTest/java/com/squareup/anvil/sample,examples/anvil/app/src/main/java/com/squareup/anvil/sample,examples/anvil/app/src/test/java/com/squareup/anvil/sample,examples/anvil/library,examples/anvil/library/src/main/java/com/squareup/anvil/sample,examples/anvil/repro/src/main/java/com/repro/lib,examples/anvil/scopes,examples/anvil/scopes/src/main/java/com/squareup/scopes,examples/anvil/third_party,examples/associates,examples/associates/projects/core/api,examples/associates/projects/core/api/src/test/kotlin/core/api,examples/associates/projects/core/impl,examples/associates/projects/core/impl/src/test/kotlin/core/impl,examples/custom_compiler_version,examples/custom_compiler_version/app,examples/dagger,examples/dagger/third_party,examples/deps,examples/deps/bzl,examples/deps/libAndroid1,examples/deps/libAndroid2,examples/deps/libAndroid3,examples/deps/libAndroid4,examples/deps/libJava1,examples/deps/libJava2,examples/deps/libJava3,examples/deps/libJava4,examples/deps/libKt1,examples/deps/libKt2,examples/deps/libKt3,examples/deps/libKt4,examples/deps/libKtAndroid1,examples/deps/libKtAndroid2,examples/deps/libKtAndroid3,examples/deps/libKtAndroid4,examples/jetpack_compose,examples/jetpack_compose/app,examples/jetpack_compose/compose-ui,examples/ksp,examples/ksp/third_party,examples/multiplex,examples/multiplex/src,examples/plugin,examples/plugin/src/allopen,examples/plugin/src/allopennoarg,examples/plugin/src/noarg,examples/plugin/src/parcelize,examples/plugin/src/sam_with_receiver,examples/plugin/src/serialization,examples/trivial,examples/trivial/app,src/main/starlark/release_archive
2020

2121
# User-specific .bazelrc
2222
try-import %workspace%/user.bazelrc

docs/kotlin.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -598,8 +598,8 @@ Call this in the WORKSPACE file to setup the Kotlin rules.
598598
| <a id="kotlin_repositories-is_bzlmod"></a>is_bzlmod | <p align="center"> - </p> | `False` |
599599
| <a id="kotlin_repositories-compiler_repository_name"></a>compiler_repository_name | for the kotlinc compiler repository. | `"com_github_jetbrains_kotlin"` |
600600
| <a id="kotlin_repositories-ksp_repository_name"></a>ksp_repository_name | <p align="center"> - </p> | `"com_github_google_ksp"` |
601-
| <a id="kotlin_repositories-compiler_release"></a>compiler_release | version provider from versions.bzl. | `struct(sha256 = "1ba08a8b45da99339a0601134cc037b54cf85e9bc0edbe76dcbd27c2d684a977", url_templates = ["https://github.com/JetBrains/kotlin/releases/download/v{version}/kotlin-compiler-{version}.zip"], version = "2.1.21")` |
602-
| <a id="kotlin_repositories-ksp_compiler_release"></a>ksp_compiler_release | (internal) version provider from versions.bzl. | `struct(sha256 = "44e965bb067b2bb5cd9184dab2c3dea6e3eab747d341c07645bb4c88f09e49c8", url_templates = ["https://github.com/google/ksp/releases/download/{version}/artifacts.zip"], version = "2.1.21-2.0.1")` |
601+
| <a id="kotlin_repositories-compiler_release"></a>compiler_release | version provider from versions.bzl. | `struct(sha256 = "81f0264c9073b5cbbdb3ff8418cf2c5dac076879fc156fa1a6462f5a5acc4420", url_templates = ["https://github.com/JetBrains/kotlin/releases/download/v{version}/kotlin-compiler-{version}.zip"], version = "2.2.20")` |
602+
| <a id="kotlin_repositories-ksp_compiler_release"></a>ksp_compiler_release | (internal) version provider from versions.bzl. | `struct(sha256 = "91599210c8f332fe5d16dd5704821daf50f3e0d06c6a122fd895276f6e55b598", url_templates = ["https://github.com/google/ksp/releases/download/{version}/artifacts.zip"], version = "2.2.20-2.0.4")` |
603603

604604

605605
<a id="versions.use_repository"></a>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
common --enable_bzlmod=true
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
8.4.2
2+
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
# Example demonstrating custom Kotlin compiler version
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
module(
2+
name = "custom_compiler_version_example",
3+
version = "1.0",
4+
)
5+
6+
# Use local rules_kotlin for testing
7+
bazel_dep(name = "rules_kotlin", version = "1.8.1")
8+
bazel_dep(name = "rules_java", version = "8.9.0")
9+
10+
local_path_override(
11+
module_name = "rules_kotlin",
12+
path = "../..",
13+
)
14+
15+
# Override the Kotlin compiler version to use 2.1.21
16+
# This demonstrates backward compatibility with versions that include trove4j
17+
rules_kotlin_ext = use_extension("@rules_kotlin//src/main/starlark/core/repositories:bzlmod_setup.bzl", "rules_kotlin_extensions")
18+
rules_kotlin_ext.kotlinc_version(
19+
sha256 = "1ba08a8b45da99339a0601134cc037b54cf85e9bc0edbe76dcbd27c2d684a977",
20+
version = "2.1.21",
21+
)
22+
rules_kotlin_ext.ksp_version(
23+
sha256 = "44e965bb067b2bb5cd9184dab2c3dea6e3eab747d341c07645bb4c88f09e49c8",
24+
version = "2.1.21-2.0.1",
25+
)
26+
use_repo(
27+
rules_kotlin_ext,
28+
"com_github_google_ksp",
29+
"com_github_jetbrains_kotlin",
30+
"com_github_jetbrains_kotlin_git",
31+
"com_github_pinterest_ktlint",
32+
"kotlin_build_tools_impl",
33+
"kotlinx_serialization_core_jvm",
34+
"kotlinx_serialization_json",
35+
"kotlinx_serialization_json_jvm",
36+
)
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
2+
3+
local_repository(
4+
name = "rules_kotlin",
5+
path = "../..",
6+
)
7+
8+
load("@rules_kotlin//kotlin:repositories.bzl", "kotlin_repositories", "versions")
9+
10+
http_archive(
11+
name = "rules_jvm_external",
12+
sha256 = versions.RULES_JVM_EXTERNAL.sha256,
13+
strip_prefix = "rules_jvm_external-%s" % versions.RULES_JVM_EXTERNAL.version,
14+
urls = [url.format(version = versions.RULES_JVM_EXTERNAL.version) for url in versions.RULES_JVM_EXTERNAL.url_templates],
15+
)
16+
17+
http_archive(
18+
name = "bazel_skylib",
19+
sha256 = versions.BAZEL_SKYLIB.sha256,
20+
urls = [url.format(version = versions.BAZEL_SKYLIB.version) for url in versions.BAZEL_SKYLIB.url_templates],
21+
)
22+
23+
# Define a custom Kotlin 2.1.21 compiler version to test backward compatibility
24+
kotlin_2_1_release = struct(
25+
sha256 = "1ba08a8b45da99339a0601134cc037b54cf85e9bc0edbe76dcbd27c2d684a977",
26+
url_templates = [
27+
"https://github.com/JetBrains/kotlin/releases/download/v{version}/kotlin-compiler-{version}.zip",
28+
],
29+
version = "2.1.21",
30+
)
31+
32+
# Use the custom Kotlin 2.1.21 version (which includes trove4j)
33+
kotlin_repositories(
34+
compiler_release = kotlin_2_1_release,
35+
)
36+
37+
##### rules_java setup #####
38+
load("@rules_java//java:rules_java_deps.bzl", "rules_java_dependencies")
39+
40+
rules_java_dependencies()
41+
42+
# note that the following line is what is minimally required from protobuf for the java rules
43+
# consider using the protobuf_deps() public API from @com_google_protobuf//:protobuf_deps.bzl
44+
load("@com_google_protobuf//bazel/private:proto_bazel_features.bzl", "proto_bazel_features") # buildifier: disable=bzl-visibility
45+
46+
proto_bazel_features(name = "proto_bazel_features")
47+
48+
# register toolchains
49+
load("@rules_java//java:repositories.bzl", "rules_java_toolchains")
50+
51+
rules_java_toolchains()
52+
53+
##### rules_jvm_external setup #####
54+
load("@rules_jvm_external//:repositories.bzl", "rules_jvm_external_deps")
55+
56+
rules_jvm_external_deps()
57+
58+
load("@rules_jvm_external//:setup.bzl", "rules_jvm_external_setup")
59+
60+
rules_jvm_external_setup()
61+
62+
load("@rules_kotlin//kotlin:core.bzl", "kt_register_toolchains")
63+
64+
kt_register_toolchains()
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
load("@rules_kotlin//kotlin:jvm.bzl", "kt_jvm_binary")
2+
3+
kt_jvm_binary(
4+
name = "main",
5+
srcs = ["Main.kt"],
6+
main_class = "custom.MainKt",
7+
)
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package custom
2+
3+
fun main() {
4+
println("Hello from Kotlin ${KotlinVersion.CURRENT}!")
5+
println("This example uses Kotlin 2.1.21 which includes trove4j")
6+
7+
// Simple demonstration that the build works
8+
val numbers = listOf(1, 2, 3, 4, 5)
9+
val doubled = numbers.map { it * 2 }
10+
println("Doubled numbers: $doubled")
11+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#!/usr/bin/env bash
2+
# Test script to verify the custom compiler version example works
3+
4+
set -e
5+
6+
cd "$(dirname "$0")"
7+
8+
echo "Building with custom Kotlin 2.1.21 compiler (using bzlmod)..."
9+
bazel build //app:main
10+
11+
echo "Running the binary..."
12+
bazel run //app:main
13+
14+
echo "Verifying trove4j is available in the Kotlin repository..."
15+
if bazel query "@com_github_jetbrains_kotlin//:all" 2>/dev/null | grep -q trove4j; then
16+
echo "✅ trove4j target found in @com_github_jetbrains_kotlin (expected for Kotlin 2.1.21)"
17+
else
18+
echo "ERROR: trove4j target should exist in Kotlin 2.1.21 distribution"
19+
exit 1
20+
fi
21+
22+
echo "Verifying android-extensions are available (removed in 2.2+)..."
23+
if bazel query "@com_github_jetbrains_kotlin//:all" 2>/dev/null | grep -q android-extensions; then
24+
echo "✅ android-extensions targets found (expected for Kotlin 2.1.21)"
25+
else
26+
echo "⚠️ WARNING: android-extensions not found (should exist in 2.1.21)"
27+
fi
28+
29+
echo "✅ Custom compiler version test passed!"

0 commit comments

Comments
 (0)