From 888ab1f33a2c2a55ec0015a9dd5bb4a0fa6487e8 Mon Sep 17 00:00:00 2001 From: Googler Date: Mon, 30 Sep 2024 11:47:12 -0700 Subject: [PATCH] Munge visibility attribute for symbolic macros This implements the behavior that the `visibility` attribute of symbolic macros is whatever the user specifies concatenated with the callsite's location. It also ensures that the package's default visibility is used for top-level symbolic macros (and only top-level ones). The bulk of the work is done in the attribute value processing logic of `MacroClass#instantiateMacro`. The new code is strategically placed before most of the other attribute processing to avoid violating invariants (like "by this point, all attr values have had `copyAndLift...()` applied to them). Note that, unlike the `visibility` attribute of rules, the `visibility` attribute of macros always materializes the true visibility, even for macros that are declared at the top level. I.e., if you already have a macro's computed visibility value, you don't need to also have the package's default visibility value. `MacroInstance` gains a `getVisibility()` accessor, the value of which it validates in its constructor. This means the constructor can now throw EvalException. In `SymbolicMacroTest`, delete unused scratch files and do minor formatting fixes for symmetry with .bzl style expectations. Work toward #19922. PiperOrigin-RevId: 680661002 Change-Id: Ibaba32f458f69d3b7ad14db0afc68aaf9468e3a7 --- .../build/lib/packages/MacroClass.java | 38 +++- .../build/lib/packages/MacroInstance.java | 35 +++- .../devtools/build/lib/packages/Package.java | 3 +- .../google/devtools/build/lib/analysis/BUILD | 1 + .../lib/analysis/MacroVisibilityTest.java | 27 +-- .../build/lib/analysis/SymbolicMacroTest.java | 195 ++++++++++++++++-- 6 files changed, 260 insertions(+), 39 deletions(-) diff --git a/src/main/java/com/google/devtools/build/lib/packages/MacroClass.java b/src/main/java/com/google/devtools/build/lib/packages/MacroClass.java index 6b0415da8fe243..7bc2640e639c20 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/MacroClass.java +++ b/src/main/java/com/google/devtools/build/lib/packages/MacroClass.java @@ -23,6 +23,7 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import com.google.devtools.build.lib.cmdline.Label; +import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.packages.TargetRecorder.MacroFrame; import com.google.devtools.build.lib.packages.TargetRecorder.NameConflictException; @@ -30,6 +31,7 @@ import com.google.errorprone.annotations.CanIgnoreReturnValue; import java.util.ArrayList; import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; import javax.annotation.Nullable; import net.starlark.java.eval.EvalException; @@ -227,6 +229,41 @@ private MacroInstance instantiateMacro(Package.Builder pkgBuilder, Map liftedVisibility = + (List