Include the srcjar (if there is one) in the _validation output group so blaze will check whether the srcjar file actually exists. RELNOTES: If a java_import target's srcjar attribute refers to a source file, the file should exist. PiperOrigin-RevId: 822801332 Change-Id: Ie5b364aa873a07b4cda6d528f1a1d69bdb5b9089
diff --git a/java/common/rules/impl/bazel_java_import_impl.bzl b/java/common/rules/impl/bazel_java_import_impl.bzl index ce338cb..7ca9cf7 100644 --- a/java/common/rules/impl/bazel_java_import_impl.bzl +++ b/java/common/rules/impl/bazel_java_import_impl.bzl
@@ -190,11 +190,18 @@ ) output_group_src_jars = depset() if srcjar == None else depset([srcjar]) + + validation_group = [] + if jdeps_artifact != None: + validation_group.append(jdeps_artifact) + if srcjar != None: + validation_group.append(srcjar) + target["OutputGroupInfo"] = OutputGroupInfo( **{ "_source_jars": output_group_src_jars, "_direct_source_jars": output_group_src_jars, - "_validation": depset() if jdeps_artifact == None else depset([jdeps_artifact]), + "_validation": depset(validation_group), "_hidden_top_level_INTERNAL_": target["ProguardSpecProvider"].specs, } )
diff --git a/test/java/common/rules/java_import_tests.bzl b/test/java/common/rules/java_import_tests.bzl index e949e17..37941ef 100644 --- a/test/java/common/rules/java_import_tests.bzl +++ b/test/java/common/rules/java_import_tests.bzl
@@ -293,6 +293,33 @@ "{package}/library.srcjar", ]) +def _test_srcjar_added_to_validation_output_group(name): + util.helper_target( + java_import, + name = name + "/libraryjar_with_srcjar", + jars = ["import.jar"], + srcjar = "library.srcjar", + ) + + analysis_test( + name = name, + impl = _test_srcjar_added_to_validation_output_group_impl, + target = name + "/libraryjar_with_srcjar", + # Starlark rules are only used with Bazel 8 onwards. + attr_values = {"tags": ["min_bazel_8"]}, + ) + +def _test_srcjar_added_to_validation_output_group_impl(env, target): + assert_java_info = java_info_subject.from_target(env, target) + assert_java_info.outputs().source_output_jars().contains_exactly([ + "{package}/library.srcjar", + ]) + + # Check that the srcjar is in the _validation output group. + env.expect.that_target(target).output_group("_validation").contains_at_least([ + "{package}/library.srcjar", + ]) + def _test_from_genrule(name): target_name = name + "/library-jar" util.helper_target( @@ -933,6 +960,7 @@ _test_java_library_allows_import_in_deps, _test_module_flags, _test_src_jars, + _test_srcjar_added_to_validation_output_group, _test_from_genrule, _test_transitive_dependencies, _test_exposes_java_provider,