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));
       }
     }