aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis/config/ComposingRuleTransitionFactory.java
diff options
context:
space:
mode:
authorGravatar gregce <gregce@google.com>2018-05-29 10:47:33 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-05-29 10:48:55 -0700
commit2cb4f48dc5f674a4a99228cce7ca04aef5a0c335 (patch)
tree2053329c31e35c3a8ad64f6cf6f258e8aefeae33 /src/main/java/com/google/devtools/build/lib/analysis/config/ComposingRuleTransitionFactory.java
parent6d33f2874eb1647526557d291496e78163d94095 (diff)
Merge ComposingSplitTransition and ComposingPatchTransition.
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis/config/ComposingRuleTransitionFactory.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/config/ComposingRuleTransitionFactory.java12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/ComposingRuleTransitionFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/config/ComposingRuleTransitionFactory.java
index ec8cfc35f6..51dfa176c4 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/config/ComposingRuleTransitionFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/config/ComposingRuleTransitionFactory.java
@@ -15,6 +15,8 @@
package com.google.devtools.build.lib.analysis.config;
+import com.google.common.collect.Iterables;
+import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition;
import com.google.devtools.build.lib.analysis.config.transitions.PatchTransition;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.RuleTransitionFactory;
@@ -38,7 +40,15 @@ public class ComposingRuleTransitionFactory implements RuleTransitionFactory {
@Override
public PatchTransition buildTransitionFor(Rule rule) {
- return TransitionResolver.composePatchTransitions(
+ ConfigurationTransition composedTransition = TransitionResolver.composeTransitions(
rtf1.buildTransitionFor(rule), rtf2.buildTransitionFor(rule));
+ // Even though we know the composed transition isn't a split (because neither of its children
+ // can be splits), the returned type is a generic ConfigurationTransition. So cast that back to
+ // a PatchTransition here.
+ //
+ // We could alternatively change RuleTransitionFactory's signature to a ConfigurationTransition.
+ // But it's nice to strongly enforce the interface expectation that rule transitions don't
+ // split.
+ return (BuildOptions options) -> Iterables.getOnlyElement(composedTransition.apply(options));
}
}