aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar mstaib <mstaib@google.com>2018-06-01 15:23:00 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-06-01 15:24:18 -0700
commite59cbd0cbd3560d71cb592a943460f2721a710da (patch)
tree530bd8b339dba0bc5b61b93f69267e07d21a4e21 /src/main
parente21127b3cce295e51eb4a494938d58fd0447927e (diff)
Allow multiple trimming transition factories to be added.
If multiple trimming transition factories are added, they are composed in the order they were added. RELNOTES: None. PiperOrigin-RevId: 198934666
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java24
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/config/ConfigRules.java2
2 files changed, 16 insertions, 10 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
index c333d0563b..4821f6f961 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
@@ -32,6 +32,7 @@ import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration.Fragment;
import com.google.devtools.build.lib.analysis.config.BuildOptions;
+import com.google.devtools.build.lib.analysis.config.ComposingRuleTransitionFactory;
import com.google.devtools.build.lib.analysis.config.ConfigurationFragmentFactory;
import com.google.devtools.build.lib.analysis.config.DefaultsPackage;
import com.google.devtools.build.lib.analysis.config.FragmentOptions;
@@ -413,17 +414,22 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
}
/**
- * Sets the transition factory that produces a trimming transition to be run over all targets
+ * Adds a transition factory that produces a trimming transition to be run over all targets
* after other transitions.
*
- * <p>This is a temporary measure for supporting manual trimming of feature flags, and support
- * for this transition factory will likely be removed at some point in the future (whenever
- * automatic trimming is sufficiently workable).
+ * <p>Transitions are run in the order they're added.
+ *
+ * <p>This is a temporary measure for supporting trimming of test rules and manual trimming of
+ * feature flags, and support for this transition factory will likely be removed at some point
+ * in the future (whenever automatic trimming is sufficiently workable).
*/
- public Builder setTrimmingTransitionFactory(RuleTransitionFactory factory) {
- Preconditions.checkState(
- trimmingTransitionFactory == null, "Trimming transition factory already set");
- trimmingTransitionFactory = Preconditions.checkNotNull(factory);
+ public Builder addTrimmingTransitionFactory(RuleTransitionFactory factory) {
+ if (trimmingTransitionFactory == null) {
+ trimmingTransitionFactory = Preconditions.checkNotNull(factory);
+ } else {
+ trimmingTransitionFactory = new ComposingRuleTransitionFactory(
+ trimmingTransitionFactory, Preconditions.checkNotNull(factory));
+ }
return this;
}
@@ -435,7 +441,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
@VisibleForTesting(/* for testing trimming transition factories without relying on prod use */)
public Builder overrideTrimmingTransitionFactoryForTesting(RuleTransitionFactory factory) {
trimmingTransitionFactory = null;
- return this.setTrimmingTransitionFactory(factory);
+ return this.addTrimmingTransitionFactory(factory);
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRules.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRules.java
index 6a5fdaec6a..7531493e77 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRules.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigRules.java
@@ -32,7 +32,7 @@ public final class ConfigRules implements RuleSet {
@Override
public void init(ConfiguredRuleClassProvider.Builder builder) {
- builder.setTrimmingTransitionFactory(
+ builder.addTrimmingTransitionFactory(
new ConfigFeatureFlagTaggedTrimmingTransitionFactory(BaseRuleClasses.TAGGED_TRIMMING_ATTR));
builder.addRuleDefinition(new ConfigRuleClasses.ConfigBaseRule());
builder.addRuleDefinition(new ConfigRuleClasses.ConfigSettingRule());