Replace Attribute.SplitTransition with config.transitions.SplitTransition.
PiperOrigin-RevId: 179948322
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java
index 7b9d60d..d268e7d 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java
@@ -27,6 +27,7 @@
import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException;
import com.google.devtools.build.lib.analysis.config.PatchTransition;
import com.google.devtools.build.lib.analysis.config.TransitionResolver;
+import com.google.devtools.build.lib.analysis.config.transitions.SplitTransition;
import com.google.devtools.build.lib.analysis.config.transitions.Transition;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
@@ -422,7 +423,7 @@
* transition does not apply.
*
* <p>Even though the attribute may have a split, splits don't have to apply in every
- * configuration (see {@link Attribute.SplitTransition#split}).
+ * configuration (see {@link SplitTransition#split}).
*/
private static Collection<BuildOptions> getSplitOptions(ConfiguredAttributeMapper attributeMap,
Attribute attribute,
@@ -430,9 +431,7 @@
if (!attribute.hasSplitConfigurationTransition()) {
return ImmutableList.<BuildOptions>of();
}
- @SuppressWarnings("unchecked") // Attribute.java doesn't have the BuildOptions symbol.
- Attribute.SplitTransition<BuildOptions> transition =
- (Attribute.SplitTransition<BuildOptions>) attribute.getSplitTransition(attributeMap);
+ SplitTransition transition = attribute.getSplitTransition(attributeMap);
return transition.split(ruleConfig.getOptions());
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
index 6abf491..ce2569a 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java
@@ -47,6 +47,7 @@
import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider;
import com.google.devtools.build.lib.analysis.config.FragmentCollection;
import com.google.devtools.build.lib.analysis.config.PatchTransition;
+import com.google.devtools.build.lib.analysis.config.transitions.SplitTransition;
import com.google.devtools.build.lib.analysis.config.transitions.Transition;
import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.analysis.fileset.FilesetProvider;
@@ -65,7 +66,6 @@
import com.google.devtools.build.lib.packages.AspectDescriptor;
import com.google.devtools.build.lib.packages.Attribute;
import com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition;
-import com.google.devtools.build.lib.packages.Attribute.SplitTransition;
import com.google.devtools.build.lib.packages.AttributeMap;
import com.google.devtools.build.lib.packages.BuildType;
import com.google.devtools.build.lib.packages.ConfigurationFragmentPolicy;
@@ -768,10 +768,8 @@
checkAttribute(attributeName, Mode.SPLIT);
Attribute attributeDefinition = attributes().getAttributeDefinition(attributeName);
- @SuppressWarnings("unchecked") // Attribute.java doesn't have the BuildOptions symbol.
- SplitTransition<BuildOptions> transition =
- (SplitTransition<BuildOptions>) attributeDefinition.getSplitTransition(
- ConfiguredAttributeMapper.of(rule, configConditions));
+ SplitTransition transition = attributeDefinition.getSplitTransition(
+ ConfiguredAttributeMapper.of(rule, configConditions));
List<ConfiguredTarget> deps = targetMap.get(attributeName);
List<BuildOptions> splitOptions = transition.split(getConfiguration().getOptions());
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/ComposingSplitTransition.java b/src/main/java/com/google/devtools/build/lib/analysis/config/ComposingSplitTransition.java
index b984ee4..41cb44d 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/ComposingSplitTransition.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/ComposingSplitTransition.java
@@ -16,9 +16,9 @@
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
+import com.google.devtools.build.lib.analysis.config.transitions.SplitTransition;
import com.google.devtools.build.lib.analysis.config.transitions.Transition;
import com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition;
-import com.google.devtools.build.lib.packages.Attribute.SplitTransition;
import java.util.List;
/**
@@ -35,7 +35,7 @@
* combination thereof. We implement this class as a {@link SplitTransition} since that abstraction
* captures all possible combinations.
*/
-public class ComposingSplitTransition implements SplitTransition<BuildOptions> {
+public class ComposingSplitTransition implements SplitTransition {
private Transition transition1;
private Transition transition2;
@@ -63,7 +63,7 @@
*/
private Transition verifySupported(Transition transition) {
Preconditions.checkArgument(transition instanceof PatchTransition
- || transition instanceof SplitTransition<?>);
+ || transition instanceof SplitTransition);
return transition;
}
@@ -77,7 +77,7 @@
} else if (transition instanceof PatchTransition) {
return ImmutableList.<BuildOptions>of(((PatchTransition) transition).apply(fromOptions));
} else if (transition instanceof SplitTransition) {
- SplitTransition split = (SplitTransition<BuildOptions>) transition;
+ SplitTransition split = (SplitTransition) transition;
List<BuildOptions> splitOptions = split.split(fromOptions);
if (splitOptions.isEmpty()) {
return ImmutableList.<BuildOptions>of(fromOptions);
@@ -91,4 +91,3 @@
}
}
}
-
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigurationResolver.java b/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigurationResolver.java
index 9a16f0b..d09219e 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigurationResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigurationResolver.java
@@ -26,6 +26,7 @@
import com.google.common.collect.Sets;
import com.google.devtools.build.lib.analysis.Dependency;
import com.google.devtools.build.lib.analysis.TargetAndConfiguration;
+import com.google.devtools.build.lib.analysis.config.transitions.SplitTransition;
import com.google.devtools.build.lib.analysis.config.transitions.Transition;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.concurrent.ThreadSafety;
@@ -417,10 +418,8 @@
} else if (transition instanceof PatchTransition) {
// TODO(bazel-team): safety-check that this never mutates fromOptions.
result = ImmutableList.<BuildOptions>of(((PatchTransition) transition).apply(fromOptions));
- } else if (transition instanceof Attribute.SplitTransition) {
- @SuppressWarnings("unchecked") // Attribute.java doesn't have the BuildOptions symbol.
- List<BuildOptions> toOptions =
- ((Attribute.SplitTransition<BuildOptions>) transition).split(fromOptions);
+ } else if (transition instanceof SplitTransition) {
+ List<BuildOptions> toOptions = ((SplitTransition) transition).split(fromOptions);
if (toOptions.isEmpty()) {
// When the split returns an empty list, it's signaling it doesn't apply to this instance.
// So return the original options.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/DynamicTransitionMapper.java b/src/main/java/com/google/devtools/build/lib/analysis/config/DynamicTransitionMapper.java
index 0ccb19a..4c49201 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/DynamicTransitionMapper.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/DynamicTransitionMapper.java
@@ -14,6 +14,7 @@
package com.google.devtools.build.lib.analysis.config;
import com.google.common.collect.ImmutableMap;
+import com.google.devtools.build.lib.analysis.config.transitions.SplitTransition;
import com.google.devtools.build.lib.analysis.config.transitions.Transition;
import com.google.devtools.build.lib.packages.Attribute;
import com.google.devtools.build.lib.packages.RuleClass;
@@ -72,7 +73,7 @@
*/
public Transition map(Transition fromTransition) {
if (fromTransition instanceof PatchTransition
- || fromTransition instanceof Attribute.SplitTransition<?>
+ || fromTransition instanceof SplitTransition
|| fromTransition == null) {
return fromTransition;
}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/TransitionResolver.java b/src/main/java/com/google/devtools/build/lib/analysis/config/TransitionResolver.java
index b84c5db..27c3548 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/TransitionResolver.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/TransitionResolver.java
@@ -17,10 +17,10 @@
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
import com.google.devtools.build.lib.analysis.TargetAndConfiguration;
+import com.google.devtools.build.lib.analysis.config.transitions.SplitTransition;
import com.google.devtools.build.lib.analysis.config.transitions.Transition;
import com.google.devtools.build.lib.packages.Attribute;
import com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition;
-import com.google.devtools.build.lib.packages.Attribute.SplitTransition;
import com.google.devtools.build.lib.packages.ConfiguredAttributeMapper;
import com.google.devtools.build.lib.packages.InputFile;
import com.google.devtools.build.lib.packages.PackageGroup;
@@ -112,8 +112,7 @@
// TODO(gregce): make the below transitions composable (i.e. take away the "else" clauses).
// The "else" is a legacy restriction from static configurations.
if (attribute.hasSplitConfigurationTransition()) {
- currentTransition = split(currentTransition,
- (SplitTransition<BuildOptions>) attribute.getSplitTransition(attributeMap));
+ currentTransition = split(currentTransition, attribute.getSplitTransition(attributeMap));
} else {
// III. Attributes determine configurations. The configuration of a prerequisite is determined
// by the attribute.
@@ -195,8 +194,7 @@
/**
* Applies the given split and composes it after an existing transition.
*/
- private static Transition split(Transition currentTransition,
- SplitTransition<BuildOptions> split) {
+ private static Transition split(Transition currentTransition, SplitTransition split) {
Preconditions.checkState(currentTransition != Attribute.ConfigurationTransition.NULL,
"cannot apply splits after null transitions (null transitions are expected to be final)");
Preconditions.checkState(currentTransition != HostTransition.INSTANCE,
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/SplitTransition.java b/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/SplitTransition.java
index 9dc4eee..dd1cea1 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/SplitTransition.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/transitions/SplitTransition.java
@@ -24,6 +24,7 @@
* handle this.
*/
@ThreadSafety.Immutable
+@FunctionalInterface
public interface SplitTransition extends Transition {
/**
* Return the list of {@code BuildOptions} after splitting; empty if not applicable.
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkAttr.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkAttr.java
index b04a855..78e393f 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkAttr.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkAttr.java
@@ -20,13 +20,13 @@
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.analysis.config.HostTransition;
+import com.google.devtools.build.lib.analysis.config.transitions.SplitTransition;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.packages.Attribute;
import com.google.devtools.build.lib.packages.Attribute.AllowedValueSet;
import com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition;
import com.google.devtools.build.lib.packages.Attribute.SkylarkComputedDefaultTemplate;
-import com.google.devtools.build.lib.packages.Attribute.SplitTransition;
import com.google.devtools.build.lib.packages.Attribute.SplitTransitionProvider;
import com.google.devtools.build.lib.packages.AttributeValueSource;
import com.google.devtools.build.lib.packages.BuildType;
@@ -298,8 +298,8 @@
builder.cfg(ConfigurationTransition.DATA);
} else if (trans.equals("host")) {
builder.cfg(HostTransition.INSTANCE);
- } else if (trans instanceof SplitTransition<?>) {
- builder.cfg((SplitTransition<?>) trans);
+ } else if (trans instanceof SplitTransition) {
+ builder.cfg((SplitTransition) trans);
} else if (trans instanceof SplitTransitionProvider) {
builder.cfg((SplitTransitionProvider) trans);
} else if (!trans.equals("target")) {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
index b736613..38fdda7 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
@@ -29,8 +29,8 @@
import com.google.common.collect.Ordering;
import com.google.common.collect.Sets;
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
+import com.google.devtools.build.lib.analysis.config.transitions.SplitTransition;
import com.google.devtools.build.lib.analysis.config.transitions.Transition;
-import com.google.devtools.build.lib.concurrent.ThreadSafety;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassNamePredicate;
@@ -148,23 +148,6 @@
}
/**
- * A configuration split transition; this should be used to transition to multiple configurations
- * simultaneously. Note that the corresponding rule implementations must have special support to
- * handle this.
- *
- * <p>{@code T} must always be {@code BuildOptions}, but it can't be defined that way because
- * the symbol isn't available here.
- */
- // TODO(bazel-team): Serializability constraints?
- @ThreadSafety.Immutable
- public interface SplitTransition<T> extends Transition {
- /**
- * Return the list of {@code BuildOptions} after splitting; empty if not applicable.
- */
- List<T> split(T buildOptions);
- }
-
- /**
* Declaration how the configuration should change when following a label or label list attribute.
*
* <p>Do not add to this. Use {@link
@@ -316,7 +299,7 @@
/**
* Returns the {@link SplitTransition} given the attribute mapper of the originating rule.
*/
- SplitTransition<?> apply(AttributeMap attributeMap);
+ SplitTransition apply(AttributeMap attributeMap);
}
/**
@@ -325,14 +308,14 @@
*/
private static class BasicSplitTransitionProvider implements SplitTransitionProvider {
- private final SplitTransition<?> splitTransition;
+ private final SplitTransition splitTransition;
- BasicSplitTransitionProvider(SplitTransition<?> splitTransition) {
+ BasicSplitTransitionProvider(SplitTransition splitTransition) {
this.splitTransition = splitTransition;
}
@Override
- public SplitTransition<?> apply(AttributeMap attributeMap) {
+ public SplitTransition apply(AttributeMap attributeMap) {
return splitTransition;
}
}
@@ -533,7 +516,7 @@
* Defines the configuration transition for this attribute. Defaults to
* {@code NONE}.
*/
- public Builder<TYPE> cfg(SplitTransition<?> configTransition) {
+ public Builder<TYPE> cfg(SplitTransition configTransition) {
return cfg(new BasicSplitTransitionProvider(Preconditions.checkNotNull(configTransition)));
}
@@ -547,7 +530,7 @@
Preconditions.checkArgument(configTransition != ConfigurationTransition.SPLIT,
"split transitions must be defined using the SplitTransition object");
if (configTransition instanceof SplitTransition) {
- return cfg((SplitTransition<?>) configTransition);
+ return cfg((SplitTransition) configTransition);
} else {
this.configTransition = configTransition;
return this;
@@ -1971,7 +1954,7 @@
* @return a SplitTransition<BuildOptions> object
* @throws IllegalStateException if {@link #hasSplitConfigurationTransition} is not true
*/
- public SplitTransition<?> getSplitTransition(AttributeMap attributeMapper) {
+ public SplitTransition getSplitTransition(AttributeMap attributeMapper) {
Preconditions.checkState(hasSplitConfigurationTransition());
return splitTransitionProvider.apply(attributeMapper);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
index 6a8a0a9..c08da7a 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
@@ -37,13 +37,13 @@
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.config.BuildOptions;
import com.google.devtools.build.lib.analysis.config.HostTransition;
+import com.google.devtools.build.lib.analysis.config.transitions.SplitTransition;
import com.google.devtools.build.lib.analysis.config.transitions.Transition;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.packages.Attribute;
import com.google.devtools.build.lib.packages.Attribute.AllowedValueSet;
import com.google.devtools.build.lib.packages.Attribute.LateBoundDefault;
-import com.google.devtools.build.lib.packages.Attribute.SplitTransition;
import com.google.devtools.build.lib.packages.AttributeMap;
import com.google.devtools.build.lib.packages.ImplicitOutputsFunction.SafeImplicitOutputsFunction;
import com.google.devtools.build.lib.packages.Rule;
@@ -206,11 +206,9 @@
(rule, attributes, configuration) -> configuration.getSdk());
}
- public static final SplitTransition<BuildOptions> ANDROID_SPLIT_TRANSITION =
- new AndroidSplitTransition();
+ public static final SplitTransition ANDROID_SPLIT_TRANSITION = new AndroidSplitTransition();
- private static final class AndroidSplitTransition
- implements SplitTransition<BuildOptions>, SkylarkValue {
+ private static final class AndroidSplitTransition implements SplitTransition, SkylarkValue {
private static void setCrosstoolToAndroid(BuildOptions output, BuildOptions input) {
AndroidConfiguration.Options inputAndroidOptions =
input.get(AndroidConfiguration.Options.class);
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkCommon.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkCommon.java
index fe8a9dd..be66ad6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkCommon.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidSkylarkCommon.java
@@ -14,8 +14,7 @@
package com.google.devtools.build.lib.rules.android;
import com.google.devtools.build.lib.actions.Artifact;
-import com.google.devtools.build.lib.analysis.config.BuildOptions;
-import com.google.devtools.build.lib.packages.Attribute.SplitTransition;
+import com.google.devtools.build.lib.analysis.config.transitions.SplitTransition;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -47,7 +46,7 @@
+ "the --fat_apk_cpu and --android_crosstool_top flags.",
structField = true
)
- public SplitTransition<BuildOptions> getAndroidSplitTransition() {
+ public SplitTransition getAndroidSplitTransition() {
return AndroidRuleClasses.ANDROID_SPLIT_TRANSITION;
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchSplitTransitionProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchSplitTransitionProvider.java
index 394c220..8284011 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchSplitTransitionProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/MultiArchSplitTransitionProvider.java
@@ -24,7 +24,7 @@
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration.Options;
import com.google.devtools.build.lib.analysis.config.BuildOptions;
-import com.google.devtools.build.lib.packages.Attribute.SplitTransition;
+import com.google.devtools.build.lib.analysis.config.transitions.SplitTransition;
import com.google.devtools.build.lib.packages.Attribute.SplitTransitionProvider;
import com.google.devtools.build.lib.packages.AttributeMap;
import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
@@ -125,7 +125,7 @@
}
@Override
- public SplitTransition<?> apply(AttributeMap attrMapper) {
+ public SplitTransition apply(AttributeMap attrMapper) {
String platformTypeString = attrMapper.get(PlatformRule.PLATFORM_TYPE_ATTR_NAME, STRING);
String minimumOsVersionString = attrMapper.get(PlatformRule.MINIMUM_OS_VERSION, STRING);
PlatformType platformType;
@@ -164,7 +164,7 @@
* platform-specific cpu flag for a particular platform type (for example, --watchos_cpus
* for watchos platform type).
*/
- protected static class AppleBinaryTransition implements SplitTransition<BuildOptions> {
+ protected static class AppleBinaryTransition implements SplitTransition {
private final PlatformType platformType;
// TODO(b/37096178): This should be a mandatory attribute.
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/LateBoundSplitUtil.java b/src/test/java/com/google/devtools/build/lib/analysis/LateBoundSplitUtil.java
index 4296f10..a721f4e 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/LateBoundSplitUtil.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/LateBoundSplitUtil.java
@@ -24,6 +24,7 @@
import com.google.devtools.build.lib.analysis.config.ConfigurationFragmentFactory;
import com.google.devtools.build.lib.analysis.config.FragmentOptions;
import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException;
+import com.google.devtools.build.lib.analysis.config.transitions.SplitTransition;
import com.google.devtools.build.lib.analysis.util.MockRule;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.packages.Attribute;
@@ -33,7 +34,6 @@
import com.google.devtools.common.options.Option;
import com.google.devtools.common.options.OptionDocumentationCategory;
import com.google.devtools.common.options.OptionEffectTag;
-import java.util.List;
/**
* Rule and configuration class definitions for testing late-bound split attributes.
@@ -55,17 +55,14 @@
/**
* The split.
*/
- private static final Attribute.SplitTransition<BuildOptions> SIMPLE_SPLIT =
- new Attribute.SplitTransition<BuildOptions>() {
- @Override
- public List<BuildOptions> split(BuildOptions buildOptions) {
- BuildOptions split1 = buildOptions.clone();
- split1.get(TestOptions.class).fooFlag = "one";
- BuildOptions split2 = buildOptions.clone();
- split2.get(TestOptions.class).fooFlag = "two";
- return ImmutableList.<BuildOptions>of(split1, split2);
- }
- };
+ private static final SplitTransition SIMPLE_SPLIT =
+ (SplitTransition) buildOptions -> {
+ BuildOptions split1 = buildOptions.clone();
+ split1.get(TestOptions.class).fooFlag = "one";
+ BuildOptions split2 = buildOptions.clone();
+ split2.get(TestOptions.class).fooFlag = "two";
+ return ImmutableList.of(split1, split2);
+ };
/**
* The {@link BuildConfiguration.Fragment} that contains the options.
diff --git a/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java b/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java
index 4adef68..f4b5662 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/AttributeTest.java
@@ -27,9 +27,9 @@
import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.analysis.config.BuildOptions;
import com.google.devtools.build.lib.analysis.config.HostTransition;
+import com.google.devtools.build.lib.analysis.config.transitions.SplitTransition;
import com.google.devtools.build.lib.analysis.util.TestAspects;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.packages.Attribute.SplitTransition;
import com.google.devtools.build.lib.packages.Attribute.SplitTransitionProvider;
import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassNamePredicate;
import com.google.devtools.build.lib.syntax.Type;
@@ -295,7 +295,7 @@
assertThat(attr.hasSplitConfigurationTransition()).isFalse();
}
- private static class TestSplitTransition implements SplitTransition<BuildOptions> {
+ private static class TestSplitTransition implements SplitTransition {
@Override
public List<BuildOptions> split(BuildOptions buildOptions) {
return ImmutableList.of(buildOptions.clone(), buildOptions.clone());
@@ -304,7 +304,7 @@
private static class TestSplitTransitionProvider implements SplitTransitionProvider {
@Override
- public SplitTransition<?> apply(AttributeMap attrMapper) {
+ public SplitTransition apply(AttributeMap attrMapper) {
return new TestSplitTransition();
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcRuleTestCase.java b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcRuleTestCase.java
index c5577e7..74b5a4d 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcRuleTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/objc/ObjcRuleTestCase.java
@@ -74,11 +74,11 @@
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.config.BuildOptions;
import com.google.devtools.build.lib.analysis.config.CompilationMode;
+import com.google.devtools.build.lib.analysis.config.transitions.SplitTransition;
import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
import com.google.devtools.build.lib.analysis.util.ScratchAttributeWriter;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.cmdline.RepositoryName;
-import com.google.devtools.build.lib.packages.Attribute.SplitTransition;
import com.google.devtools.build.lib.packages.util.MockJ2ObjcSupport;
import com.google.devtools.build.lib.packages.util.MockObjcSupport;
import com.google.devtools.build.lib.packages.util.MockProtoSupport;
@@ -420,7 +420,7 @@
* configuration.
*/
protected List<BuildConfiguration> getSplitConfigurations(BuildConfiguration configuration,
- SplitTransition<BuildOptions> splitTransition) throws InterruptedException {
+ SplitTransition splitTransition) throws InterruptedException {
ImmutableList.Builder<BuildConfiguration> splitConfigs = ImmutableList.builder();
for (BuildOptions splitOptions : splitTransition.split(configuration.getOptions())) {
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsWithTrimmedConfigurationsTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsWithTrimmedConfigurationsTest.java
index 56c4d29..64e141d 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsWithTrimmedConfigurationsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsWithTrimmedConfigurationsTest.java
@@ -31,6 +31,7 @@
import com.google.devtools.build.lib.analysis.config.ConfigurationResolver;
import com.google.devtools.build.lib.analysis.config.PatchTransition;
import com.google.devtools.build.lib.analysis.config.TransitionResolver;
+import com.google.devtools.build.lib.analysis.config.transitions.SplitTransition;
import com.google.devtools.build.lib.analysis.config.transitions.Transition;
import com.google.devtools.build.lib.analysis.test.TestConfiguration;
import com.google.devtools.build.lib.analysis.util.MockRule;
@@ -38,8 +39,6 @@
import com.google.devtools.build.lib.analysis.util.TestAspects;
import com.google.devtools.build.lib.analysis.util.TestAspects.DummyRuleFactory;
import com.google.devtools.build.lib.cmdline.Label;
-import com.google.devtools.build.lib.packages.Attribute;
-import com.google.devtools.build.lib.packages.Attribute.SplitTransition;
import com.google.devtools.build.lib.packages.NonconfigurableAttributeMapper;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.RuleTransitionFactory;
@@ -70,14 +69,14 @@
return super.defaultFlags().with(Flag.TRIMMED_CONFIGURATIONS);
}
- private static class EmptySplitTransition implements SplitTransition<BuildOptions> {
+ private static class EmptySplitTransition implements SplitTransition {
@Override
public List<BuildOptions> split(BuildOptions buildOptions) {
return ImmutableList.of();
}
}
- private static class SetsHostCpuSplitTransition implements SplitTransition<BuildOptions> {
+ private static class SetsHostCpuSplitTransition implements SplitTransition {
@Override
public List<BuildOptions> split(BuildOptions buildOptions) {
BuildOptions result = buildOptions.clone();
@@ -86,7 +85,7 @@
}
}
- private static class SetsCpuSplitTransition implements SplitTransition<BuildOptions> {
+ private static class SetsCpuSplitTransition implements SplitTransition {
@Override
public List<BuildOptions> split(BuildOptions buildOptions) {
@@ -368,25 +367,22 @@
}
/**
- * Returns a custom {@link Attribute.SplitTransition} that splits {@link
+ * Returns a custom {@link SplitTransition} that splits {@link
* TestConfiguration.TestOptions#testFilter} down two paths: {@code += prefix + "1"} and {@code +=
* prefix + "2"}.
*/
- private static Attribute.SplitTransition<BuildOptions> newSplitTransition(final String prefix) {
- return new Attribute.SplitTransition<BuildOptions>() {
- @Override
- public List<BuildOptions> split(BuildOptions buildOptions) {
- ImmutableList.Builder<BuildOptions> result = ImmutableList.builder();
- for (int index = 1; index <= 2; index++) {
- BuildOptions toOptions = buildOptions.clone();
- TestConfiguration.TestOptions baseOptions =
- toOptions.get(TestConfiguration.TestOptions.class);
- baseOptions.testFilter =
- (baseOptions.testFilter == null ? "" : baseOptions.testFilter) + prefix + index;
- result.add(toOptions);
- }
- return result.build();
+ private static SplitTransition newSplitTransition(final String prefix) {
+ return buildOptions -> {
+ ImmutableList.Builder<BuildOptions> result = ImmutableList.builder();
+ for (int index = 1; index <= 2; index++) {
+ BuildOptions toOptions = buildOptions.clone();
+ TestConfiguration.TestOptions baseOptions =
+ toOptions.get(TestConfiguration.TestOptions.class);
+ baseOptions.testFilter =
+ (baseOptions.testFilter == null ? "" : baseOptions.testFilter) + prefix + index;
+ result.add(toOptions);
}
+ return result.build();
};
}