Test mixed Kotlin and Java compilation with private classes Exercise the real Javac action with a file-private Kotlin class removed from the ABI jar.
diff --git a/src/test/data/jvm/jvm_target/BUILD b/src/test/data/jvm/jvm_target/BUILD index 264efb4..bdc000d 100644 --- a/src/test/data/jvm/jvm_target/BUILD +++ b/src/test/data/jvm/jvm_target/BUILD
@@ -21,6 +21,7 @@ # Pin java_language_version so the test is independent of the repository's global Java config. java_language_version_env( name = "mixed_jvm8_java11", + extra_toolchains = ["//src/test/starlark/rules:remove_private_classes_toolchain"], java_language_version = "11", target = ":mixed_jvm8", )
diff --git a/src/test/data/jvm/jvm_target/Mixed.kt b/src/test/data/jvm/jvm_target/Mixed.kt index 53cc07c..1f16afb 100644 --- a/src/test/data/jvm/jvm_target/Mixed.kt +++ b/src/test/data/jvm/jvm_target/Mixed.kt
@@ -1,5 +1,9 @@ package mixed +private class PrivateKotlinClass { + fun greet(): String = "hi" +} + class Mixed { fun greet(): String = MixedJava.greet() }
diff --git a/src/test/data/jvm/jvm_target/MixedJava.java b/src/test/data/jvm/jvm_target/MixedJava.java index 4241739..90ff2db 100644 --- a/src/test/data/jvm/jvm_target/MixedJava.java +++ b/src/test/data/jvm/jvm_target/MixedJava.java
@@ -2,6 +2,6 @@ public final class MixedJava { public static String greet() { - return "hi"; + return new PrivateKotlinClass().greet(); } }
diff --git a/src/test/data/jvm/jvm_target/java_language_version.bzl b/src/test/data/jvm/jvm_target/java_language_version.bzl index 8bfc2e0..9ced3ce 100644 --- a/src/test/data/jvm/jvm_target/java_language_version.bzl +++ b/src/test/data/jvm/jvm_target/java_language_version.bzl
@@ -1,12 +1,18 @@ -"""Build a target with `//command_line_option:java_language_version` pinned to a fixed value.""" +"""Build a target with a pinned Java language version and optional extra toolchains.""" -def _pin_java_language_version_impl(_settings, attr): - return {"//command_line_option:java_language_version": attr.java_language_version} +def _pin_java_language_version_impl(settings, attr): + return { + "//command_line_option:extra_toolchains": settings["//command_line_option:extra_toolchains"] + attr.extra_toolchains, + "//command_line_option:java_language_version": attr.java_language_version, + } _pin_java_language_version = transition( implementation = _pin_java_language_version_impl, - inputs = [], - outputs = ["//command_line_option:java_language_version"], + inputs = ["//command_line_option:extra_toolchains"], + outputs = [ + "//command_line_option:extra_toolchains", + "//command_line_option:java_language_version", + ], ) def _java_language_version_env_impl(ctx): @@ -19,9 +25,10 @@ )] java_language_version_env = rule( - doc = "Forwards `target`, built with --java_language_version pinned to `java_language_version`.", + doc = "Forwards `target`, built with a pinned Java language version and extra toolchains.", implementation = _java_language_version_env_impl, attrs = { + "extra_toolchains": attr.string_list(default = []), "java_language_version": attr.string(mandatory = True), "target": attr.label(mandatory = True, cfg = _pin_java_language_version), "_allowlist_function_transition": attr.label(
diff --git a/src/test/kotlin/io/bazel/kotlin/JavacJvmTargetAssertionTest.kt b/src/test/kotlin/io/bazel/kotlin/JavacJvmTargetAssertionTest.kt index 1e831f6..52444ca 100644 --- a/src/test/kotlin/io/bazel/kotlin/JavacJvmTargetAssertionTest.kt +++ b/src/test/kotlin/io/bazel/kotlin/JavacJvmTargetAssertionTest.kt
@@ -23,9 +23,10 @@ fun javaHalfIsCompiledForTheKotlincJvmTarget() { jarTestCase( "mixed_jvm8.jar", - description = "In a mixed Kotlin/Java target the Java sources must compile to the same " + - "bytecode version as the kotlinc jvm_target", + description = "In a mixed Kotlin/Java target Java must compile against file-private Kotlin " + + "classes and use the same bytecode version as the kotlinc jvm_target", ) { + assertContainsEntries("mixed/PrivateKotlinClass.class") // The Java half must follow the kotlinc jvm_target (1.8 -> major 52), not the pinned default. assertEquals( 52,
diff --git a/src/test/starlark/rules/BUILD.bazel b/src/test/starlark/rules/BUILD.bazel index 1b75f6d..be364dc 100644 --- a/src/test/starlark/rules/BUILD.bazel +++ b/src/test/starlark/rules/BUILD.bazel
@@ -17,7 +17,7 @@ name = "associates_tests", ) -# Only used by associates_tests, which pulls it in with --extra_toolchains. +# Only used by tests that enable private-class removal through --extra_toolchains. define_kt_toolchain( name = "remove_private_classes_toolchain", experimental_remove_private_classes_in_abi_jars = True,