n/a

PiperOrigin-RevId: 463748100
diff --git a/kotlin/common.bzl b/kotlin/common.bzl
index cc05af2..58b18d1 100644
--- a/kotlin/common.bzl
+++ b/kotlin/common.bzl
@@ -15,6 +15,7 @@
 """Common Kotlin definitions."""
 
 load("@bazel_skylib//lib:sets.bzl", "sets")
+load("@bazel_skylib//lib:structs.bzl", "structs")
 load("@bazel_skylib//rules:common_settings.bzl", "BuildSettingInfo")
 load("@//bazel:stubs.bzl", "BASE_JVMOPTS")
 load("@//bazel:stubs.bzl", "DEFAULT_BUILTIN_PROCESSORS")
@@ -358,7 +359,6 @@
         kt_srcs = [],
         common_srcs = [],
         java_srcs_and_dirs = [],
-        merged_deps = None,
         kotlincopts = [],
         compile_jdeps = depset(),
         toolchain = None,
@@ -366,21 +366,23 @@
         directdep_jars = depset(),
         kt_plugin_configs = [],
         friend_jars = depset(),
+        enforce_strict_deps = False,
         enforce_complete_jdeps = False):
     if output.extension != "jar":
         fail("Expect to output a Jar but got %s" % output)
+
+    kt_plugin_configs = list(kt_plugin_configs)
+
     kt_ijar = ctx.actions.declare_file(output.basename[:-4] + "-ijar.jar", sibling = output)
-
-    def write_opts_jvm_abi_gen(args):
-        args.add("-P", kt_ijar, format = "plugin:org.jetbrains.kotlin.jvm.abi:outputDir=%s")
-
-    kt_plugin_configs = [
+    kt_plugin_configs.append(
         _kt_plugin_config(
             jar = toolchain.jvm_abi_gen_plugin,
             outputs = [kt_ijar],
-            write_opts = write_opts_jvm_abi_gen,
+            write_opts = lambda args: (
+                args.add("-P", kt_ijar, format = "plugin:org.jetbrains.kotlin.jvm.abi:outputDir=%s"),
+            ),
         ),
-    ] + kt_plugin_configs
+    )
 
     inputs = depset(
         direct = (
@@ -456,11 +458,10 @@
         kt_srcs + common_srcs,
     )
 
-    return JavaInfo(
+    return struct(
         output_jar = output,
         compile_jar = kt_ijar,
         source_jar = srcjar,
-        deps = [merged_deps],
     )
 
 def _get_original_kt_target_label(ctx):
@@ -795,7 +796,6 @@
     out_jars = []
     out_srcjars = []
     out_compilejars = []
-    kt_java_info = None
     kapt_outputs = struct(jar = None, manifest = None, srcjar = None)
 
     # Kotlin compilation requires two passes when annotation processing is
@@ -830,33 +830,37 @@
             compile_jar = kapt_outputs.jar,
         )])
 
-    kotlin_jdeps_output = None
+    kotlinc_result = None
     if kt_srcs or common_srcs:
-        main_compile_plugin_configs = list(kt_plugin_configs)
-
-        kt_jar = ctx.actions.declare_file(ctx.label.name + "-kt.jar")
-        kt_java_info = _run_kotlinc(
+        kotlinc_result = _run_kotlinc(
             ctx,
             kt_srcs = kt_srcs,
             common_srcs = common_srcs,
             java_srcs_and_dirs = java_srcs + java_syncer.dirs,
-            output = kt_jar,
-            merged_deps = merged_deps,
+            output = ctx.actions.declare_file(ctx.label.name + "-kt.jar"),
             kotlincopts = kotlincopts,
             compile_jdeps = compile_jdeps,
             toolchain = kt_toolchain,
             classpath = full_classpath,
-            kt_plugin_configs = main_compile_plugin_configs,
+            kt_plugin_configs = kt_plugin_configs,
             friend_jars = friend_jars,
+            enforce_strict_deps = enforce_strict_deps,
             enforce_complete_jdeps = enforce_complete_jdeps,
         )
 
         # Use un-instrumented Jar at compile-time to avoid double-instrumenting inline functions
         # (see b/110763361 for the comparable Gradle issue)
-        out_compilejars.extend(kt_java_info.compile_jars.to_list())  # unpack singleton depset
+        out_compilejars.append(kotlinc_result.compile_jar)
+        out_srcjars.append(kotlinc_result.source_jar)
 
-        out_jars.append(kt_jar)
-        out_srcjars.extend(kt_java_info.source_jars)
+        # Apply coverage instrumentation if requested, and add dep on JaCoCo runtime to merged_deps.
+        # The latter helps jdeps computation (b/130747644) but could be runtime-only if we computed
+        # compile-time Jdeps based using the compile Jar (which doesn't contain instrumentation).
+        # See b/117897097 for why it's still useful to make the (runtime) dep explicit.
+        if ctx.coverage_instrumented():
+            pass
+        else:
+            out_jars.append(kotlinc_result.output_jar)
 
     javac_java_info = None
     java_native_headers_jar = None
@@ -870,7 +874,7 @@
             source_jars = java_syncer.srcjars,
             resources = classpath_resources,
             output = javac_out,
-            deps = ([kt_java_info] if kt_java_info else []) + [merged_deps],
+            deps = ([JavaInfo(**structs.to_dict(kotlinc_result))] if kotlinc_result else []) + [merged_deps],
             # Include default_javac_flags, which reflect Blaze's --javacopt flag, so they win over
             # all sources of default flags (for Ellipsis builds, see b/125452475).
             # TODO: remove default_javac_flags here once java_common.compile is fixed.