Properly throw exceptions in ResourceProcessorBusyBox, and log exceptions in CompileLibraryResourcesAction.
Fixes https://github.com/bazelbuild/bazel/issues/7442
RELNOTES: Fixed issue where exceptions and stacktraces were silently swallowed in the Android resource processing pipeline.
PiperOrigin-RevId: 234224275
diff --git a/src/tools/android/java/com/google/devtools/build/android/CompileLibraryResourcesAction.java b/src/tools/android/java/com/google/devtools/build/android/CompileLibraryResourcesAction.java
index 9b95e54..0a96595 100644
--- a/src/tools/android/java/com/google/devtools/build/android/CompileLibraryResourcesAction.java
+++ b/src/tools/android/java/com/google/devtools/build/android/CompileLibraryResourcesAction.java
@@ -26,9 +26,11 @@
import com.google.devtools.common.options.OptionsBase;
import com.google.devtools.common.options.OptionsParser;
import com.google.devtools.common.options.ShellQuotedParamsFilePreProcessor;
+import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
+import java.util.concurrent.ExecutionException;
import java.util.logging.Logger;
/** Compiles resources using aapt2 and archives them to zip. */
@@ -136,6 +138,9 @@
options.dataBindingInfoOut, options.packagePath, databindingResourcesRoot)
.compile(compiler, compiledResources)
.copyResourcesZipTo(options.output);
+ } catch (IOException | ExecutionException | InterruptedException e) {
+ logger.log(java.util.logging.Level.SEVERE, "Unexpected", e);
+ throw e;
}
}
}
diff --git a/src/tools/android/java/com/google/devtools/build/android/ResourceProcessorBusyBox.java b/src/tools/android/java/com/google/devtools/build/android/ResourceProcessorBusyBox.java
index 7188ca3..297d376 100644
--- a/src/tools/android/java/com/google/devtools/build/android/ResourceProcessorBusyBox.java
+++ b/src/tools/android/java/com/google/devtools/build/android/ResourceProcessorBusyBox.java
@@ -193,7 +193,7 @@
public Tool tool;
}
- public static void main(String[] args) {
+ public static void main(String[] args) throws Exception {
// It's cheaper and cleaner to detect for a single flag to start worker mode without having to
// initialize Options/OptionsParser here. This keeps the processRequest interface minimal and
// minimizes moving option state between these methods.
@@ -204,7 +204,7 @@
}
}
- private static int runPersistentWorker() {
+ private static int runPersistentWorker() throws Exception {
while (true) {
try {
WorkRequest request = WorkRequest.parseDelimitedFrom(System.in);
@@ -228,7 +228,7 @@
return 0;
}
- private static int processRequest(List<String> args) {
+ private static int processRequest(List<String> args) throws Exception {
OptionsParser optionsParser = OptionsParser.newOptionsParser(Options.class);
optionsParser.setAllowResidue(true);
optionsParser.enableParamsFileSupport(
@@ -245,10 +245,10 @@
| Aapt2Exception
| InvalidJavaIdentifier e) {
logSuppressed(e);
- return 1;
+ throw e;
} catch (Exception e) {
logger.log(Level.SEVERE, "Error during processing", e);
- return 1;
+ throw e;
}
return 0;
}