Relanding "Don't try to use delegate which could not be created"
This cherry-picks 615061f619c3d367da1faa2faf6f2926d8cf30cc.
The change was reverted as part of 523ef9455bab0bd029227982f0ade905d710feeb.
Bug: 140095216
Change-Id: Id37741cdccd0e4776df097329d607786a8848df4
diff --git a/src/main/java/com/android/tools/r8/StringConsumer.java b/src/main/java/com/android/tools/r8/StringConsumer.java
index 6e440eb..4c091a5 100644
--- a/src/main/java/com/android/tools/r8/StringConsumer.java
+++ b/src/main/java/com/android/tools/r8/StringConsumer.java
@@ -95,6 +95,7 @@
private final Path outputPath;
private Charset encoding = StandardCharsets.UTF_8;
private WriterConsumer delegate = null;
+ private boolean failedToCreateDelegate = false;
/** Consumer that writes to {@param outputPath}. */
public FileConsumer(Path outputPath) {
@@ -129,13 +130,21 @@
@Override
public void accept(String string, DiagnosticsHandler handler) {
super.accept(string, handler);
+ if (failedToCreateDelegate) {
+ return;
+ }
ensureDelegate(handler);
- delegate.accept(string, handler);
+ if (delegate != null) {
+ delegate.accept(string, handler);
+ }
}
@Override
public void finished(DiagnosticsHandler handler) {
super.finished(handler);
+ if (failedToCreateDelegate) {
+ return;
+ }
if (delegate != null) {
delegate.finished(handler);
delegate = null;
@@ -154,6 +163,7 @@
}
delegate = new WriterConsumer(origin, Files.newBufferedWriter(outputPath, encoding));
} catch (IOException e) {
+ failedToCreateDelegate = true;
handler.error(new ExceptionDiagnostic(e, origin));
}
}