aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
authorGravatar cparsons <cparsons@google.com>2017-10-13 23:40:31 +0200
committerGravatar Jakob Buchgraber <buchgr@google.com>2017-10-16 17:48:44 +0200
commit0dcffc5af767c80cd3831e8d34161f5e5a039246 (patch)
tree4c2007628022ef979e43b62bd4f5c94d6c50db2c /src/main/java/com/google/devtools/build/lib
parentf7d5010785c8118e0a28d296a6cabee94706293a (diff)
Extract more RuleContext error-related methods into RuleErrorConsumer
This will make it easier to pass only error-handling functionality into support classes. RELNOTES: None. PiperOrigin-RevId: 172148072
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java75
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/RuleErrorConsumer.java35
2 files changed, 86 insertions, 24 deletions
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 f94ac86ca3..e948dd31d8 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
@@ -311,18 +311,12 @@ public final class RuleContext extends TargetContext
return attributes;
}
- /**
- * Returns whether this instance is known to have errors at this point during analysis. Do not
- * call this method after the initializationHook has returned.
- */
+ @Override
public boolean hasErrors() {
return getAnalysisEnvironment().hasErrors();
}
- /**
- * No-op if {@link #hasErrors} is false, throws {@link RuleErrorException} if it is true.
- * This provides a convenience to early-exit of configured target creation if there are errors.
- */
+ @Override
public void assertNoErrors() throws RuleErrorException {
if (hasErrors()) {
throw new RuleErrorException();
@@ -452,13 +446,8 @@ public final class RuleContext extends TargetContext
reporter.ruleError(message);
}
- /**
- * Convenience function to report non-attribute-specific errors in the current rule and then
- * throw a {@link RuleErrorException}, immediately exiting the build invocation. Alternatively,
- * invoke {@link #ruleError} instead to collect additional error information before ending the
- * invocation.
- */
- public void throwWithRuleError(String message) throws RuleErrorException {
+ @Override
+ public RuleErrorException throwWithRuleError(String message) throws RuleErrorException {
reporter.ruleError(message);
throw new RuleErrorException();
}
@@ -484,15 +473,7 @@ public final class RuleContext extends TargetContext
reporter.attributeError(attrName, message);
}
- /**
- * Convenience function to report attribute-specific errors in the current rule, and then throw a
- * {@link RuleErrorException}, immediately exiting the build invocation. Alternatively, invoke
- * {@link #attributeError} instead to collect additional error information before ending the
- * invocation.
- *
- * <p>If the name of the attribute starts with <code>$</code>
- * it is replaced with a string <code>(an implicit dependency)</code>.
- */
+ @Override
public RuleErrorException throwWithAttributeError(String attrName, String message)
throws RuleErrorException {
reporter.attributeError(attrName, message);
@@ -1598,6 +1579,27 @@ public final class RuleContext extends TargetContext
reporter.attributeWarning(attrName, message);
}
+ @Override
+ public RuleErrorException throwWithRuleError(String message) throws RuleErrorException {
+ throw reporter.throwWithRuleError(message);
+ }
+
+ @Override
+ public RuleErrorException throwWithAttributeError(String attrName, String message)
+ throws RuleErrorException {
+ throw reporter.throwWithAttributeError(attrName, message);
+ }
+
+ @Override
+ public boolean hasErrors() {
+ return reporter.hasErrors();
+ }
+
+ @Override
+ public void assertNoErrors() throws RuleErrorException {
+ reporter.assertNoErrors();
+ }
+
private String badPrerequisiteMessage(String targetKind, ConfiguredTarget prerequisite,
String reason, boolean isWarning) {
String msgPrefix = targetKind != null ? targetKind + " " : "";
@@ -1879,6 +1881,31 @@ public final class RuleContext extends TargetContext
reportError(rule.getAttributeLocation(attrName), completeAttributeMessage(attrName, message));
}
+ @Override
+ public RuleErrorException throwWithRuleError(String message) throws RuleErrorException {
+ ruleError(message);
+ throw new RuleErrorException();
+ }
+
+ @Override
+ public RuleErrorException throwWithAttributeError(String attrName, String message)
+ throws RuleErrorException {
+ attributeError(attrName, message);
+ throw new RuleErrorException();
+ }
+
+ @Override
+ public boolean hasErrors() {
+ return env.hasErrors();
+ }
+
+ @Override
+ public void assertNoErrors() throws RuleErrorException {
+ if (hasErrors()) {
+ throw new RuleErrorException();
+ }
+ }
+
public void reportWarning(Location location, String message) {
env.getEventHandler().handle(Event.warn(location, message));
}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleErrorConsumer.java b/src/main/java/com/google/devtools/build/lib/packages/RuleErrorConsumer.java
index c5b8a79a2d..9e1683e82b 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RuleErrorConsumer.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RuleErrorConsumer.java
@@ -14,6 +14,8 @@
package com.google.devtools.build.lib.packages;
+import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
+
/**
* A thin interface exposing only the warning and error reporting functionality
* of a rule.
@@ -24,6 +26,7 @@ package com.google.devtools.build.lib.packages;
* <p>This interface should only be implemented by {@code RuleContext}.
*/
public interface RuleErrorConsumer {
+
/**
* Consume a non-attribute-specific warning in a rule.
*/
@@ -43,4 +46,36 @@ public interface RuleErrorConsumer {
* Consume an attribute-specific error in a rule.
*/
void attributeError(String attrName, String message);
+
+ /**
+ * Convenience function to report non-attribute-specific errors in the current rule and then
+ * throw a {@link RuleErrorException}, immediately exiting the build invocation. Alternatively,
+ * invoke {@link #ruleError} instead to collect additional error information before ending the
+ * invocation.
+ */
+ RuleErrorException throwWithRuleError(String message) throws RuleErrorException;
+
+ /**
+ * Convenience function to report attribute-specific errors in the current rule, and then throw a
+ * {@link RuleErrorException}, immediately exiting the build invocation. Alternatively, invoke
+ * {@link #attributeError} instead to collect additional error information before ending the
+ * invocation.
+ *
+ * <p>If the name of the attribute starts with <code>$</code>
+ * it is replaced with a string <code>(an implicit dependency)</code>.
+ */
+ RuleErrorException throwWithAttributeError(String attrName, String message)
+ throws RuleErrorException;
+
+ /**
+ * Returns whether this instance is known to have errors at this point during analysis. Do not
+ * call this method after the initializationHook has returned.
+ */
+ boolean hasErrors();
+
+ /**
+ * No-op if {@link #hasErrors} is false, throws {@link RuleErrorException} if it is true.
+ * This provides a convenience to early-exit of configured target creation if there are errors.
+ */
+ void assertNoErrors() throws RuleErrorException;
}