From cd82f68cfdf44aabaea1931ea9ff870ec7bb4af1 Mon Sep 17 00:00:00 2001 From: Googler Date: Mon, 30 Sep 2024 16:31:14 -0700 Subject: [PATCH] Allow //visibility:public and //visibility:private in non-singleton visibility declarations ... but simplify the resulting visibility appropriately when saving the visibility attribute: $foo plus public is public; $foo plus private is $foo; and an empty visibility list is canonicalized to ["//visibility:private"]. This makes it easier for symbolic macros to grant visibilities on targets that they declare. Work toward https://github.com/bazelbuild/bazel/issues/19922. The canonicalization of an empty visibility list to ["//visibility:private"] is technically an incompatible change affecting query output, but is very unlikely to break anything in practice. RELNOTES: Non-singleton target visibility lists can now contain "//visibility:public" and "//visibility:private" elements; the result is appropriately simplified when assigned to an attribute: ["//foo:__subpackages__", "//visibility:public"] is saved as ["//visibility:public"], ["//foo:__subpackages__", "//visibility:private"] is saved as ["//foo:__subpackages__"], and for consistency's sake, an empty target visibility list [] is saved as ["//visibility:private"]. PiperOrigin-RevId: 680761159 Change-Id: Ic2edaf13dfe48b0f0014d404ced34aa7632d33c7 --- .../packages/PackageGroupsRuleVisibility.java | 21 +++- .../build/lib/packages/RuleClass.java | 2 +- .../build/lib/packages/RuleVisibility.java | 83 +++++++++---- .../devtools/build/lib/packages/RuleTest.java | 52 +++++--- .../lib/packages/RuleVisibilityTest.java | 112 ++++++++++++++++-- src/test/shell/bazel/bazel_rules_test.sh | 16 --- 6 files changed, 218 insertions(+), 68 deletions(-) diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageGroupsRuleVisibility.java b/src/main/java/com/google/devtools/build/lib/packages/PackageGroupsRuleVisibility.java index 2f4beb46810c51..048367e47f32a3 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/PackageGroupsRuleVisibility.java +++ b/src/main/java/com/google/devtools/build/lib/packages/PackageGroupsRuleVisibility.java @@ -13,6 +13,8 @@ // limitations under the License. package com.google.devtools.build.lib.packages; +import static com.google.common.base.Preconditions.checkArgument; + import com.google.auto.value.AutoValue; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.cmdline.Label; @@ -29,16 +31,31 @@ public abstract class PackageGroupsRuleVisibility implements RuleVisibility { @Override public abstract ImmutableList