Gracefully fail when exceptions are thrown during starlark transition application/validation.
Most of this change is just exception propagation immediately after configuration resolution since we usually wait and realize we've made a mistake later on.
#5574
RELNOTES: None.
PiperOrigin-RevId: 229555753
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
index 6f2d6b5..937eed7 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
@@ -42,6 +42,7 @@
import com.google.devtools.build.lib.analysis.config.InvalidConfigurationException;
import com.google.devtools.build.lib.analysis.configuredtargets.MergedConfiguredTarget.DuplicateException;
import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget;
+import com.google.devtools.build.lib.analysis.skylark.StarlarkTransition.TransitionException;
import com.google.devtools.build.lib.buildeventstream.BuildEventId;
import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId.ConfigurationId;
import com.google.devtools.build.lib.causes.AnalysisFailedCause;
@@ -84,6 +85,7 @@
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.Set;
import java.util.concurrent.Semaphore;
import java.util.stream.Collectors;
@@ -119,6 +121,10 @@
super(cause);
}
+ public DependencyEvaluationException(TransitionException cause) {
+ super(cause);
+ }
+
@Override
public synchronized Exception getCause() {
return (Exception) super.getCause();
@@ -263,7 +269,8 @@
// more root causes during computeDependencies.
// Note that this doesn't apply to AspectFunction, because aspects can't have configurable
// attributes.
- if (!transitiveRootCauses.isEmpty() && configConditions != NO_CONFIG_CONDITIONS) {
+ if (!transitiveRootCauses.isEmpty()
+ && !Objects.equals(configConditions, NO_CONFIG_CONDITIONS)) {
throw new ConfiguredTargetFunctionException(
new ConfiguredValueCreationException(
"Cannot compute config conditions", configuration, transitiveRootCauses.build()));