Report the first rule error as a root cause event
This is not fool-proof. In particular, it is missing all errors
generated in the ConfiguredTargetFunction. However, it should give
us significantly better coverage being a more generic mechanism.
We might want to consider either adding an index to the root cause
events so we can report multiple, or collecting all error messages into
a single root cause event for each target.
PiperOrigin-RevId: 268639983
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 5bcaf64..ded8ede 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
@@ -1607,7 +1607,9 @@
if (configuration.allowAnalysisFailures()) {
reporter = new SuppressingErrorReporter();
} else {
- reporter = new ErrorReporter(env, target.getAssociatedRule(), getRuleClassNameForLogging());
+ reporter =
+ new ErrorReporter(
+ env, target.getAssociatedRule(), configuration, getRuleClassNameForLogging());
}
}
@@ -2124,10 +2126,16 @@
private static final class ErrorReporter extends EventHandlingErrorReporter
implements RuleErrorConsumer {
private final Rule rule;
+ private final BuildConfiguration configuration;
- ErrorReporter(AnalysisEnvironment env, Rule rule, String ruleClassNameForLogging) {
+ ErrorReporter(
+ AnalysisEnvironment env,
+ Rule rule,
+ BuildConfiguration configuration,
+ String ruleClassNameForLogging) {
super(ruleClassNameForLogging, env);
this.rule = rule;
+ this.configuration = configuration;
}
@Override
@@ -2150,6 +2158,11 @@
}
@Override
+ protected BuildConfiguration getConfiguration() {
+ return configuration;
+ }
+
+ @Override
protected Location getRuleLocation() {
return rule.getLocation();
}