Introduce configuration transition fragment declarations.
See https://github.com/bazelbuild/bazel/issues/11258 for context.
This essentially converts ConfigurationTransition.apply(BuildOptions...)
to ConfigurationTransition.apply(RestrictedBuildOptions...). The new
BuildOptionsView wraps BuildOptions while only allowing access
to options fragments the transitions declare.
Because there are a *lot* of uses of PatchTransition and SplitTransition,
this change only adds a parallel interface to PatchTransition.patch and
SplitTransition.split. Implementers continue to work as-is with the
BuildOptions variant, while we can incrementally switch them over to
the RestrictedBuildOptions variant at whatever pace we desire.
This helps decouple risk of failing CI if/when we accidentally forget
to migrate a few implementers or get their set of declared fragments wrong.
This implements step 1 of https://github.com/bazelbuild/bazel/issues/11258.
PiperOrigin-RevId: 312311815
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/CircularDependencyTest.java b/src/test/java/com/google/devtools/build/lib/analysis/CircularDependencyTest.java
index 77fdbda..b49af3d 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/CircularDependencyTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/CircularDependencyTest.java
@@ -37,6 +37,7 @@
import com.google.devtools.build.lib.packages.NoSuchTargetException;
import com.google.devtools.build.lib.packages.Package;
import com.google.devtools.build.lib.testutil.TestRuleClassProvider;
+import java.util.Map;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@@ -266,15 +267,19 @@
new TransitionFactory<AttributeTransitionData>() {
@Override
public SplitTransition create(AttributeTransitionData data) {
- return (BuildOptions options, EventHandler eventHandler) -> {
- String define = data.attributes().get("define", STRING);
- BuildOptions newOptions = options.clone();
- CoreOptions optionsFragment = newOptions.get(CoreOptions.class);
- optionsFragment.commandLineBuildVariables =
- optionsFragment.commandLineBuildVariables.stream()
- .filter((pair) -> !pair.getKey().equals(define))
- .collect(toImmutableList());
- return ImmutableMap.of("define_cleaner", newOptions);
+ return new SplitTransition() {
+ @Override
+ public Map<String, BuildOptions> split(
+ BuildOptions options, EventHandler eventHandler) {
+ String define = data.attributes().get("define", STRING);
+ BuildOptions newOptions = options.clone();
+ CoreOptions optionsFragment = newOptions.get(CoreOptions.class);
+ optionsFragment.commandLineBuildVariables =
+ optionsFragment.commandLineBuildVariables.stream()
+ .filter((pair) -> !pair.getKey().equals(define))
+ .collect(toImmutableList());
+ return ImmutableMap.of("define_cleaner", newOptions);
+ }
};
}