Skip to content

Commit

Permalink
Simplify cleanup in DocGenProcessor
Browse files Browse the repository at this point in the history
PiperOrigin-RevId: 551303866
  • Loading branch information
cushon authored and Error Prone Team committed Jul 26, 2023
1 parent 77ba705 commit c6549b8
Showing 1 changed file with 28 additions and 21 deletions.
Expand Up @@ -20,9 +20,14 @@

import com.google.auto.service.AutoService;
import com.google.gson.Gson;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UncheckedIOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.ProcessingEnvironment;
Expand Down Expand Up @@ -51,42 +56,44 @@ public SourceVersion getSupportedSourceVersion() {
return SourceVersion.latest();
}

private final Gson gson = new Gson();

private PrintWriter pw;
private final Map<String, BugPatternInstance> bugPatterns = new HashMap<>();

/** {@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<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
for (Element element : roundEnv.getElementsAnnotatedWith(BugPattern.class)) {
gson.toJson(BugPatternInstance.fromElement(element), pw);
pw.println();
BugPatternInstance bugPattern = BugPatternInstance.fromElement(element);
bugPatterns.put(bugPattern.name, bugPattern);
}

if (roundEnv.processingOver()) {
// this was the last round, do cleanup
cleanup();
try {
FileObject manifest =
processingEnv
.getFiler()
.createResource(StandardLocation.SOURCE_OUTPUT, "", "bugPatterns.txt");
try (OutputStream os = manifest.openOutputStream();
PrintWriter pw =
new PrintWriter(new BufferedWriter(new OutputStreamWriter(os, UTF_8)))) {
Gson gson = new Gson();
bugPatterns.entrySet().stream()
.sorted(Map.Entry.comparingByKey())
.forEachOrdered(
e -> {
gson.toJson(e.getValue(), pw);
pw.println();
});
}
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
return false;
}

/** Perform cleanup after last round of annotation processing. */
private void cleanup() {
pw.close();
}
}

0 comments on commit c6549b8

Please sign in to comment.