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;

Reply via email to