aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar mstaib <mstaib@google.com>2017-03-29 20:12:19 +0000
committerGravatar Philipp Wollermann <philwo@google.com>2017-03-31 17:06:27 +0200
commit274cb26c2b1198aa1da4871022f8e3ddf14b4e84 (patch)
tree77712673829b1232b8b4fd1c64ef27c2a82d0724 /src
parent115ea10fe907b80ea11ad7db6f50657ecc2c18cb (diff)
BuildView#getConfiguredTargetForTesting respects null transitions.
RuleTransitionFactory#buildTransitionFor is @Nullable, but the SkyframeExecutor expects a non-null Transition. If the factory returns null, the SkyframeExecutor should be passed NONE, not null. PiperOrigin-RevId: 151615724
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/BuildView.java6
-rw-r--r--src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsWithDynamicConfigurationsTest.java20
2 files changed, 25 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
index 2524deb5bc..c9709ab4ef 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
@@ -1101,7 +1101,11 @@ public class BuildView {
RuleTransitionFactory factory = rule
.getRuleClassObject()
.getTransitionFactory();
- return (factory == null) ? ConfigurationTransition.NONE : factory.buildTransitionFor(rule);
+ if (factory == null) {
+ return ConfigurationTransition.NONE;
+ }
+ Transition transition = factory.buildTransitionFor(rule);
+ return (transition == null) ? ConfigurationTransition.NONE : transition;
}
/**
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsWithDynamicConfigurationsTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsWithDynamicConfigurationsTest.java
index a587ebaf01..9612febb38 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsWithDynamicConfigurationsTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsWithDynamicConfigurationsTest.java
@@ -209,6 +209,26 @@ public class ConfigurationsForTargetsWithDynamicConfigurationsTest
.isEqualTo("SET BY PATCH FACTORY: Maximum Dance");
}
+ @Test
+ public void topLevelRuleTransitionFactoryCanReturnNullInTesting() throws Exception {
+ setRulesAvailableInTests(
+ new TestAspects.BaseRule(), new TestAspects.UsesRuleTransitionFactoryRule());
+ useConfiguration("--test_filter=SET ON COMMAND LINE: original and best");
+ scratch.file(
+ "a/BUILD",
+ "uses_rule_transition_factory(",
+ " name='factory',",
+ " sets_test_filter_to='',",
+ ")");
+ update("@//a:factory");
+ ConfiguredTarget target = getView().getConfiguredTargetForTesting(
+ reporter,
+ Label.parseAbsoluteUnchecked("@//a:factory"),
+ getTargetConfiguration(true));
+ assertThat(target.getConfiguration().getTestFilter())
+ .isEqualTo("SET ON COMMAND LINE: original and best");
+ }
+
/**
* Returns a custom {@link PatchTransition} with the given value added to
* {@link BuildConfiguration.Options#testFilter}.