Re-export bazel_java_proto_aspect and java_lite_proto_aspect in public bazel/ packages. Re-exports the aspect symbols in `third_party/protobuf/bazel/` to allow Kotlin proto rules to depend directly on these aspects. PiperOrigin-RevId: 963247862
diff --git a/bazel/java_lite_proto_library.bzl b/bazel/java_lite_proto_library.bzl index 90ff08c..ac90ae7 100644 --- a/bazel/java_lite_proto_library.bzl +++ b/bazel/java_lite_proto_library.bzl
@@ -7,6 +7,11 @@ """java_lite_proto_library rule""" -load("//bazel/private:java_lite_proto_library.bzl", _java_lite_proto_library = "java_lite_proto_library") +load( + "//bazel/private:java_lite_proto_library.bzl", + _java_lite_proto_aspect = "java_lite_proto_aspect", + _java_lite_proto_library = "java_lite_proto_library", +) java_lite_proto_library = _java_lite_proto_library +java_lite_proto_aspect = _java_lite_proto_aspect
diff --git a/bazel/java_proto_library.bzl b/bazel/java_proto_library.bzl index 8754a35..27b7dea 100644 --- a/bazel/java_proto_library.bzl +++ b/bazel/java_proto_library.bzl
@@ -7,6 +7,11 @@ """java_proto_library rule.""" -load("//bazel/private:java_proto_library.bzl", _java_proto_library = "java_proto_library") +load( + "//bazel/private:java_proto_library.bzl", + _bazel_java_proto_aspect = "bazel_java_proto_aspect", + _java_proto_library = "java_proto_library", +) java_proto_library = _java_proto_library +bazel_java_proto_aspect = _bazel_java_proto_aspect
diff --git a/bazel/private/java_lite_proto_library.bzl b/bazel/private/java_lite_proto_library.bzl index c6da048..f595baa 100644 --- a/bazel/private/java_lite_proto_library.bzl +++ b/bazel/private/java_lite_proto_library.bzl
@@ -61,7 +61,7 @@ transitive_jars = [dep[JavaProtoAspectInfo].jars for dep in ctx.rule.attr.deps] return [ - java_info, + add_constraints(java_info, constraints = ["android"]), JavaProtoAspectInfo(jars = depset(jars, transitive = transitive_jars)), ]
diff --git a/java/kotlin/src/test/kotlin/com/google/protobuf/diamond/DiamondDependencyTest.kt b/java/kotlin/src/test/kotlin/com/google/protobuf/diamond/DiamondDependencyTest.kt new file mode 100644 index 0000000..2b125e4 --- /dev/null +++ b/java/kotlin/src/test/kotlin/com/google/protobuf/diamond/DiamondDependencyTest.kt
@@ -0,0 +1,26 @@ +package com.google.protobuf.kotlin.diamond + +import kotlin.test.assertEquals +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.JUnit4 + +/** + * Regression test for Bazel Java One-Version classpath collisions in Kotlin proto generation. + * + * Verifies that when a test depends simultaneously on a leaf Kotlin proto library + * (`:leaf_kt_proto`) and an exporter Kotlin proto library (`:exporter_kt_proto`, which re-exports + * `:leaf_proto`), the Kotlin proto code generation does not duplicate class definitions with + * differing Cyclic Redundancy Checks (CRCs) across multiple jars on the runtime classpath. + */ +@RunWith(JUnit4::class) +class DiamondDependencyTest { + @Test + fun testDiamondDependencyClasspath() { + val leaf = leafMessage { value = "leaf" } + assertEquals("leaf", leaf.value) + + val exporter = exporterMessage { value = "exporter" } + assertEquals("exporter", exporter.value) + } +}
diff --git a/java/kotlin/src/test/proto/com/google/protobuf/diamond/exporter.proto b/java/kotlin/src/test/proto/com/google/protobuf/diamond/exporter.proto new file mode 100644 index 0000000..d799892 --- /dev/null +++ b/java/kotlin/src/test/proto/com/google/protobuf/diamond/exporter.proto
@@ -0,0 +1,9 @@ +edition = "2024"; + +package protobuf.kotlin.test.diamond; + +option java_package = "com.google.protobuf.kotlin.diamond"; + +message ExporterMessage { + string value = 1; +}
diff --git a/java/kotlin/src/test/proto/com/google/protobuf/diamond/leaf.proto b/java/kotlin/src/test/proto/com/google/protobuf/diamond/leaf.proto new file mode 100644 index 0000000..9da1515 --- /dev/null +++ b/java/kotlin/src/test/proto/com/google/protobuf/diamond/leaf.proto
@@ -0,0 +1,9 @@ +edition = "2024"; + +package protobuf.kotlin.test.diamond; + +option java_package = "com.google.protobuf.kotlin.diamond"; + +message LeafMessage { + string value = 1; +}