diff options
author | Carmi Grushko <carmi@google.com> | 2016-12-22 18:20:26 +0000 |
---|---|---|
committer | Klaus Aehlig <aehlig@google.com> | 2016-12-23 09:43:10 +0000 |
commit | 985f343ea5c5400bd45743b10c4fb85233113c61 (patch) | |
tree | 5e6b735a7ac1f01330383813b7aea71a38713570 /src/main/java/com/google/devtools/build/lib/rules/proto/ProtoCompileActionBuilder.java | |
parent | 92a1eb7232c44baf8db485755967efcd4fd1629a (diff) |
Do not crash when there's an error in the rule.
In ProtoCompileActionBuilder.registerActions(), we check for rule errors
immediately after retrieving the value of :proto_compiler.
However, this picks-up existing errors, not necessarily from
retrieving the value of :proto_compiler.
--
PiperOrigin-RevId: 142777231
MOS_MIGRATED_REVID=142777231
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules/proto/ProtoCompileActionBuilder.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/proto/ProtoCompileActionBuilder.java | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoCompileActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoCompileActionBuilder.java index 8936c24d29..39896b6652 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoCompileActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoCompileActionBuilder.java @@ -211,7 +211,7 @@ public class ProtoCompileActionBuilder { } } - private SpawnAction.Builder createAction() { + private SpawnAction.Builder createAction() throws MissingPrerequisiteException { SpawnAction.Builder result = new SpawnAction.Builder().addTransitiveInputs(supportData.getTransitiveImports()); @@ -222,7 +222,7 @@ public class ProtoCompileActionBuilder { FilesToRunProvider compilerTarget = ruleContext.getExecutablePrerequisite(":proto_compiler", RuleConfiguredTarget.Mode.HOST); - if (ruleContext.hasErrors()) { + if (compilerTarget == null) { throw new MissingPrerequisiteException(); } @@ -246,20 +246,21 @@ public class ProtoCompileActionBuilder { } @Nullable - private FilesToRunProvider getLangPluginTarget() { + private FilesToRunProvider getLangPluginTarget() throws MissingPrerequisiteException { if (langPluginName == null) { return null; } FilesToRunProvider result = ruleContext.getExecutablePrerequisite(langPluginName, RuleConfiguredTarget.Mode.HOST); - if (ruleContext.hasErrors()) { + if (result == null) { throw new MissingPrerequisiteException(); } return result; } /** Commandline generator for protoc invocations. */ - private CustomCommandLine.Builder createProtoCompilerCommandLine() { + private CustomCommandLine.Builder createProtoCompilerCommandLine() + throws MissingPrerequisiteException { CustomCommandLine.Builder result = CustomCommandLine.builder(); if (langPluginName == null) { @@ -351,7 +352,7 @@ public class ProtoCompileActionBuilder { } /** Signifies that a prerequisite could not be satisfied. */ - private static class MissingPrerequisiteException extends RuntimeException {} + private static class MissingPrerequisiteException extends Exception {} public static void writeDescriptorSet( RuleContext ruleContext, @@ -421,8 +422,8 @@ public class ProtoCompileActionBuilder { FilesToRunProvider compilerTarget = ruleContext.getExecutablePrerequisite(":proto_compiler", RuleConfiguredTarget.Mode.HOST); - if (ruleContext.hasErrors()) { - throw new MissingPrerequisiteException(); + if (compilerTarget == null) { + return; } result |