This is an automated email from the ASF dual-hosted git repository. elharo pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/maven-pmd-plugin.git
The following commit(s) were added to refs/heads/master by this push: new 1366b7c Buffer the writers (#218) 1366b7c is described below commit 1366b7ca899e188757ef24ae18a5f1ca7e553cd2 Author: Elliotte Rusty Harold <elh...@users.noreply.github.com> AuthorDate: Thu Jun 5 15:00:08 2025 +0000 Buffer the writers (#218) * Buffer the writers * Reproduce original exceptions --- .../maven/plugins/pmd/exec/CpdReportConsumer.java | 21 +++++++++------- .../apache/maven/plugins/pmd/exec/PmdExecutor.java | 28 ++++++++++++---------- 2 files changed, 29 insertions(+), 20 deletions(-) diff --git a/src/main/java/org/apache/maven/plugins/pmd/exec/CpdReportConsumer.java b/src/main/java/org/apache/maven/plugins/pmd/exec/CpdReportConsumer.java index 86b6439..4e6a04b 100644 --- a/src/main/java/org/apache/maven/plugins/pmd/exec/CpdReportConsumer.java +++ b/src/main/java/org/apache/maven/plugins/pmd/exec/CpdReportConsumer.java @@ -19,10 +19,13 @@ package org.apache.maven.plugins.pmd.exec; import java.io.File; -import java.io.FileOutputStream; import java.io.IOException; -import java.io.OutputStreamWriter; +import java.io.UnsupportedEncodingException; import java.io.Writer; +import java.nio.charset.Charset; +import java.nio.charset.IllegalCharsetNameException; +import java.nio.charset.UnsupportedCharsetException; +import java.nio.file.Files; import java.util.function.Consumer; import java.util.function.Predicate; @@ -50,7 +53,7 @@ class CpdReportConsumer implements Consumer<CPDReport> { @Override public void accept(CPDReport report) { try { - // always create XML format. we need to output it even if the file list is empty or we have no + // Always create XML format. We need to output it even if the file list is empty, or we have no // duplications so that the "check" goals can check for violations writeXmlReport(report); @@ -77,8 +80,8 @@ class CpdReportConsumer implements Consumer<CPDReport> { } private void writeFormattedReport(CPDReport cpd) throws IOException, MavenReportException { - CPDReportRenderer r = CpdExecutor.createRenderer(request.getFormat(), request.getOutputEncoding()); - writeReport(cpd, r, request.getFormat()); + CPDReportRenderer renderer = CpdExecutor.createRenderer(request.getFormat(), request.getOutputEncoding()); + writeReport(cpd, renderer, request.getFormat()); } private File writeReport(CPDReport cpd, CPDReportRenderer renderer, String extension) throws IOException { @@ -92,11 +95,13 @@ class CpdReportConsumer implements Consumer<CPDReport> { } File targetFile = new File(targetDir, "cpd." + extension); - try (Writer writer = new OutputStreamWriter(new FileOutputStream(targetFile), request.getOutputEncoding())) { + try (Writer writer = + Files.newBufferedWriter(targetFile.toPath(), Charset.forName(request.getOutputEncoding()))) { renderer.render(cpd.filterMatches(filterMatches()), writer); - writer.flush(); + return targetFile; + } catch (UnsupportedCharsetException | IllegalCharsetNameException ex) { + throw new UnsupportedEncodingException(ex.getMessage()); } - return targetFile; } private Predicate<Match> filterMatches() { diff --git a/src/main/java/org/apache/maven/plugins/pmd/exec/PmdExecutor.java b/src/main/java/org/apache/maven/plugins/pmd/exec/PmdExecutor.java index d2a0002..0fcb502 100644 --- a/src/main/java/org/apache/maven/plugins/pmd/exec/PmdExecutor.java +++ b/src/main/java/org/apache/maven/plugins/pmd/exec/PmdExecutor.java @@ -26,8 +26,12 @@ import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStreamWriter; +import java.io.UnsupportedEncodingException; import java.io.Writer; import java.nio.charset.Charset; +import java.nio.charset.IllegalCharsetNameException; +import java.nio.charset.UnsupportedCharsetException; +import java.nio.file.Files; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -306,9 +310,6 @@ public class PmdExecutor extends Executor { /** * Use the PMD XML renderer to create the XML report format used by the * check mojo later on. - * - * @param report - * @throws MavenReportException */ private void writeXmlReport(Report report) throws IOException { File targetFile = writeReport(report, new XMLRenderer(request.getOutputEncoding())); @@ -321,8 +322,8 @@ public class PmdExecutor extends Executor { } } - private File writeReport(Report report, Renderer r) throws IOException { - if (r == null) { + private File writeReport(Report report, Renderer renderer) throws IOException { + if (renderer == null) { return null; } @@ -331,16 +332,19 @@ public class PmdExecutor extends Executor { throw new IOException("Couldn't create report target directory: " + targetDir); } - String extension = r.defaultFileExtension(); + String extension = renderer.defaultFileExtension(); File targetFile = new File(targetDir, "pmd." + extension); - try (Writer writer = new OutputStreamWriter(new FileOutputStream(targetFile), request.getOutputEncoding())) { - r.setWriter(writer); - r.start(); + try (Writer writer = + Files.newBufferedWriter(targetFile.toPath(), Charset.forName(request.getOutputEncoding()))) { + renderer.setWriter(writer); + renderer.start(); if (report != null) { - r.renderFileReport(report); + renderer.renderFileReport(report); } - r.end(); - r.flush(); + renderer.end(); + renderer.flush(); + } catch (UnsupportedCharsetException | IllegalCharsetNameException ex) { + throw new UnsupportedEncodingException(ex.getMessage()); } return targetFile;