From 52083a2475f478b0c93f30f7d108e2fbd501f73c Mon Sep 17 00:00:00 2001 From: Donald Duo Zhao Date: Wed, 26 Jul 2023 00:29:55 -0700 Subject: [PATCH] Test double closing of outputstream PiperOrigin-RevId: 551115792 --- .../google/errorprone/DocGenProcessor.java | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/docgen_processor/src/main/java/com/google/errorprone/DocGenProcessor.java b/docgen_processor/src/main/java/com/google/errorprone/DocGenProcessor.java index 59ecddae763..6b8011fb52a 100644 --- a/docgen_processor/src/main/java/com/google/errorprone/DocGenProcessor.java +++ b/docgen_processor/src/main/java/com/google/errorprone/DocGenProcessor.java @@ -23,9 +23,9 @@ import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; +import java.io.UncheckedIOException; import java.util.Set; import javax.annotation.processing.AbstractProcessor; -import javax.annotation.processing.ProcessingEnvironment; import javax.annotation.processing.Processor; import javax.annotation.processing.RoundEnvironment; import javax.annotation.processing.SupportedAnnotationTypes; @@ -55,24 +55,23 @@ public SourceVersion getSupportedSourceVersion() { private PrintWriter pw; - /** {@inheritDoc} */ - @Override - public synchronized void init(ProcessingEnvironment processingEnv) { - super.init(processingEnv); - try { - FileObject manifest = - processingEnv - .getFiler() - .createResource(StandardLocation.SOURCE_OUTPUT, "", "bugPatterns.txt"); - pw = new PrintWriter(new OutputStreamWriter(manifest.openOutputStream(), UTF_8), true); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - /** {@inheritDoc} */ @Override public boolean process(Set annotations, RoundEnvironment roundEnv) { + // Initializes field pw in the first round instead of the init method to ensure the created + // PrintWriter instance is always closed during cleanup. + if (pw == null) { + try { + FileObject manifest = + processingEnv + .getFiler() + .createResource(StandardLocation.SOURCE_OUTPUT, "", "bugPatterns.txt"); + pw = new PrintWriter(new OutputStreamWriter(manifest.openOutputStream(), UTF_8), true); + } catch (IOException e) { + cleanup(); + throw new UncheckedIOException(e); + } + } for (Element element : roundEnv.getElementsAnnotatedWith(BugPattern.class)) { gson.toJson(BugPatternInstance.fromElement(element), pw); pw.println();