From 036991ed293c11fc18d4730c66113066e73d7daf Mon Sep 17 00:00:00 2001 From: Googler Date: Tue, 11 Apr 2023 04:02:22 -0700 Subject: [PATCH] Fix runtime classpath for bazel `java_test` The native rule used three slightly different runtime classpaths in different cases. This fixes the case for adding `$test_support` to the classpath for the one version check action conditioned on the value of `--explicit_java_test_deps` Fixes https://github.com/bazelbuild/bazel/issues/17985 PiperOrigin-RevId: 523359353 Change-Id: I57b6b7b6af95708a62e47c3395de0292c7e15cbc --- .../builtins_bzl/bazel/java/bazel_java_binary.bzl | 10 +++++++--- .../builtins_bzl/common/java/java_binary.bzl | 15 ++++++++++++--- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/main/starlark/builtins_bzl/bazel/java/bazel_java_binary.bzl b/src/main/starlark/builtins_bzl/bazel/java/bazel_java_binary.bzl index 7cb4707aa0fb55..f948fb4c631dc5 100644 --- a/src/main/starlark/builtins_bzl/bazel/java/bazel_java_binary.bzl +++ b/src/main/starlark/builtins_bzl/bazel/java/bazel_java_binary.bzl @@ -23,6 +23,12 @@ load(":common/paths.bzl", "paths") JavaInfo = _builtins.toplevel.JavaInfo def _bazel_java_binary_impl(ctx): + return _bazel_base_binary_impl(ctx, is_test_rule_class = False) + +def _bazel_java_test_impl(ctx): + return _bazel_base_binary_impl(ctx, is_test_rule_class = True) + helper.test_providers(ctx) + +def _bazel_base_binary_impl(ctx, is_test_rule_class): deps = _collect_all_targets_as_deps(ctx, classpath_type = "compile_only") runtime_deps = _collect_all_targets_as_deps(ctx) @@ -51,6 +57,7 @@ def _bazel_java_binary_impl(ctx): executable, feature_config, strip_as_default, + is_test_rule_class = is_test_rule_class, ) if ctx.attr.use_testrunner: @@ -85,9 +92,6 @@ def _bazel_java_binary_impl(ctx): return providers.values() -def _bazel_java_test_impl(ctx): - return _bazel_java_binary_impl(ctx) + helper.test_providers(ctx) - def _collect_all_targets_as_deps(ctx, classpath_type = "all"): deps = helper.collect_all_targets_as_deps(ctx, classpath_type = classpath_type) diff --git a/src/main/starlark/builtins_bzl/common/java/java_binary.bzl b/src/main/starlark/builtins_bzl/common/java/java_binary.bzl index 85cb7deefc0e92..c2f49c56ebc05e 100644 --- a/src/main/starlark/builtins_bzl/common/java/java_binary.bzl +++ b/src/main/starlark/builtins_bzl/common/java/java_binary.bzl @@ -14,7 +14,7 @@ """ Implementation of java_binary for bazel """ -load(":common/java/java_common.bzl", "BASIC_JAVA_LIBRARY_IMPLICIT_ATTRS", "basic_java_library") +load(":common/java/java_common.bzl", "BASIC_JAVA_LIBRARY_IMPLICIT_ATTRS", "basic_java_library", "collect_deps") load(":common/java/java_util.bzl", "create_single_jar") load(":common/java/java_helper.bzl", helper = "util") load(":common/java/java_semantics.bzl", "semantics") @@ -131,7 +131,16 @@ def basic_java_binary( add_opens = ctx.attr.add_opens, ) java_info = target["JavaInfo"] - runtime_classpath = java_info.compilation_info.runtime_classpath + runtime_classpath = depset( + order = "preorder", + transitive = [ + java_info.transitive_runtime_jars + for java_info in ( + collect_deps(ctx.attr.runtime_deps + deps) + + ([coverage_config.runner] if coverage_config and coverage_config.runner else []) + ) + ], + ) if extension_registry_provider: runtime_classpath = depset(order = "preorder", direct = [extension_registry_provider.class_jar], transitive = [runtime_classpath]) java_info = java_common.merge( @@ -193,7 +202,7 @@ def basic_java_binary( transitive = [output_groups["_source_jars"]], ) - one_version_output = _create_one_version_check(ctx, java_info.transitive_runtime_jars) if ( + one_version_output = _create_one_version_check(ctx, java_attrs.runtime_classpath) if ( ctx.fragments.java.one_version_enforcement_on_java_tests or not is_test_rule_class ) else None validation_outputs = [one_version_output] if one_version_output else []