This is an automated email from the ASF dual-hosted git repository.

adangel pushed a commit to branch pmd7
in repository https://gitbox.apache.org/repos/asf/maven-pmd-plugin.git


The following commit(s) were added to refs/heads/pmd7 by this push:
     new 0b6b3ac  Refactor to use CPDReport and CPDReportRenderer
0b6b3ac is described below

commit 0b6b3acd5c41debc25b20dcbb182843256ec314e
Author: Andreas Dangel <adan...@apache.org>
AuthorDate: Thu Jan 19 09:45:46 2023 +0100

    Refactor to use CPDReport and CPDReportRenderer
---
 .../net/sourceforge/pmd/cpd/CPDReportFriend.java   | 44 ++++++++++++++++++++++
 .../org/apache/maven/plugins/pmd/CpdReport.java    | 14 -------
 .../plugins/pmd/exec/CPDReportRendererAdapter.java | 43 +++++++++++++++++++++
 .../apache/maven/plugins/pmd/exec/CpdExecutor.java | 28 +++++++-------
 4 files changed, 101 insertions(+), 28 deletions(-)

diff --git a/src/main/java/net/sourceforge/pmd/cpd/CPDReportFriend.java 
b/src/main/java/net/sourceforge/pmd/cpd/CPDReportFriend.java
new file mode 100644
index 0000000..d50a2a8
--- /dev/null
+++ b/src/main/java/net/sourceforge/pmd/cpd/CPDReportFriend.java
@@ -0,0 +1,44 @@
+package net.sourceforge.pmd.cpd;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Allows to create a new CPDReport as the ctor is package private
+ * in PMD.
+ *
+ * <p>Only needed temporarily until <a 
href="https://github.com/pmd/pmd/issues/4340";>[core] Allow to filter found
+ * matches in CPDReport #4340</a> is done.
+ */
+public final class CPDReportFriend
+{
+
+    private CPDReportFriend()
+    {
+        // utility
+    }
+
+    public static CPDReport newReport( List<Match> matches, Map<String, 
Integer> numberOfTokensPerFile )
+    {
+        return new CPDReport( matches, numberOfTokensPerFile );
+    }
+}
diff --git a/src/main/java/org/apache/maven/plugins/pmd/CpdReport.java 
b/src/main/java/org/apache/maven/plugins/pmd/CpdReport.java
index 522b350..83391bc 100644
--- a/src/main/java/org/apache/maven/plugins/pmd/CpdReport.java
+++ b/src/main/java/org/apache/maven/plugins/pmd/CpdReport.java
@@ -34,7 +34,6 @@ import org.apache.maven.reporting.MavenReportException;
 import org.apache.maven.toolchain.Toolchain;
 
 import net.sourceforge.pmd.cpd.JavaTokenizer;
-import net.sourceforge.pmd.cpd.renderer.CPDRenderer;
 
 /**
  * Creates a report for PMD's Copy/Paste Detector (CPD) tool.
@@ -259,17 +258,4 @@ public class CpdReport
     {
         return ResourceBundle.getBundle( "cpd-report", locale, 
CpdReport.class.getClassLoader() );
     }
-
-    /**
-     * Create and return the correct renderer for the output type.
-     *
-     * @return the renderer based on the configured output
-     * @throws org.apache.maven.reporting.MavenReportException if no renderer 
found for the output type
-     * @deprecated Use {@link CpdExecutor#createRenderer(String, String)} 
instead.
-     */
-    @Deprecated
-    public CPDRenderer createRenderer() throws MavenReportException
-    {
-        return CpdExecutor.createRenderer( format, getOutputEncoding() );
-    }
 }
diff --git 
a/src/main/java/org/apache/maven/plugins/pmd/exec/CPDReportRendererAdapter.java 
b/src/main/java/org/apache/maven/plugins/pmd/exec/CPDReportRendererAdapter.java
new file mode 100644
index 0000000..c161480
--- /dev/null
+++ 
b/src/main/java/org/apache/maven/plugins/pmd/exec/CPDReportRendererAdapter.java
@@ -0,0 +1,43 @@
+package org.apache.maven.plugins.pmd.exec;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.IOException;
+import java.io.Writer;
+
+import net.sourceforge.pmd.cpd.CPDReport;
+import net.sourceforge.pmd.cpd.renderer.CPDRenderer;
+import net.sourceforge.pmd.cpd.renderer.CPDReportRenderer;
+
+final class CPDReportRendererAdapter implements CPDReportRenderer
+{
+    private final CPDRenderer renderer;
+
+    CPDReportRendererAdapter( CPDRenderer renderer )
+    {
+        this.renderer = renderer;
+    }
+
+    @Override
+    public void render( CPDReport cpdReport, Writer writer ) throws IOException
+    {
+        renderer.render( cpdReport.getMatches().iterator(), writer );
+    }
+}
diff --git a/src/main/java/org/apache/maven/plugins/pmd/exec/CpdExecutor.java 
b/src/main/java/org/apache/maven/plugins/pmd/exec/CpdExecutor.java
index 998c8e3..b50aea4 100644
--- a/src/main/java/org/apache/maven/plugins/pmd/exec/CpdExecutor.java
+++ b/src/main/java/org/apache/maven/plugins/pmd/exec/CpdExecutor.java
@@ -28,7 +28,6 @@ import java.io.ObjectOutputStream;
 import java.io.OutputStreamWriter;
 import java.io.Writer;
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Objects;
 
@@ -41,6 +40,8 @@ import org.slf4j.LoggerFactory;
 
 import net.sourceforge.pmd.cpd.CPD;
 import net.sourceforge.pmd.cpd.CPDConfiguration;
+import net.sourceforge.pmd.cpd.CPDReport;
+import net.sourceforge.pmd.cpd.CPDReportFriend;
 import net.sourceforge.pmd.cpd.CSVRenderer;
 import net.sourceforge.pmd.cpd.EcmascriptLanguage;
 import net.sourceforge.pmd.cpd.JSPLanguage;
@@ -50,7 +51,7 @@ import net.sourceforge.pmd.cpd.LanguageFactory;
 import net.sourceforge.pmd.cpd.Match;
 import net.sourceforge.pmd.cpd.SimpleRenderer;
 import net.sourceforge.pmd.cpd.XMLRenderer;
-import net.sourceforge.pmd.cpd.renderer.CPDRenderer;
+import net.sourceforge.pmd.cpd.renderer.CPDReportRenderer;
 
 /**
  * Executes CPD with the configuration provided via {@link CpdRequest}.
@@ -251,7 +252,7 @@ public class CpdExecutor extends Executor
         }
     }
 
-    private File writeReport( CPD cpd, CPDRenderer r, String extension ) 
throws MavenReportException
+    private File writeReport( CPD cpd, CPDReportRenderer r, String extension ) 
throws MavenReportException
     {
         if ( r == null )
         {
@@ -264,7 +265,7 @@ public class CpdExecutor extends Executor
         try ( Writer writer = new OutputStreamWriter( new FileOutputStream( 
targetFile ),
                 request.getOutputEncoding() ) )
         {
-            r.render( filterMatches( cpd.getMatches() ), writer );
+            r.render( filterMatches( cpd.toReport() ), writer );
             writer.flush();
         }
         catch ( IOException ioe )
@@ -277,7 +278,7 @@ public class CpdExecutor extends Executor
     private void writeFormattedReport( CPD cpd )
             throws MavenReportException
         {
-            CPDRenderer r = createRenderer( request.getFormat(), 
request.getOutputEncoding() );
+            CPDReportRenderer r = createRenderer( request.getFormat(), 
request.getOutputEncoding() );
             writeReport( cpd, r, request.getFormat() );
 
         }
@@ -288,27 +289,27 @@ public class CpdExecutor extends Executor
      * @return the renderer based on the configured output
      * @throws org.apache.maven.reporting.MavenReportException if no renderer 
found for the output type
      */
-    public static CPDRenderer createRenderer( String format, String 
outputEncoding )
+    public static CPDReportRenderer createRenderer( String format, String 
outputEncoding )
         throws MavenReportException
     {
-        CPDRenderer renderer = null;
+        CPDReportRenderer renderer = null;
         if ( "xml".equals( format ) )
         {
             renderer = new XMLRenderer( outputEncoding );
         }
         else if ( "csv".equals( format ) )
         {
-            renderer = new CSVRenderer();
+            renderer = new CPDReportRendererAdapter( new CSVRenderer() );
         }
         else if ( "txt".equals( format ) )
         {
-            renderer = new SimpleRenderer();
+            renderer = new CPDReportRendererAdapter( new SimpleRenderer() );
         }
         else if ( !"".equals( format ) && !"none".equals( format ) )
         {
             try
             {
-                renderer = (CPDRenderer) Class.forName( format 
).getConstructor().newInstance();
+                renderer = (CPDReportRenderer) Class.forName( format 
).getConstructor().newInstance();
             }
             catch ( Exception e )
             {
@@ -320,16 +321,15 @@ public class CpdExecutor extends Executor
         return renderer;
     }
 
-    private Iterator<Match> filterMatches( Iterator<Match> matches )
+    private CPDReport filterMatches( CPDReport report )
     {
         LOG.debug( "Filtering duplications. Using " + 
excludeDuplicationsFromFile.countExclusions()
             + " configured exclusions." );
 
         List<Match> filteredMatches = new ArrayList<>();
         int excludedDuplications = 0;
-        while ( matches.hasNext() )
+        for ( Match match : report.getMatches() )
         {
-            Match match = matches.next();
             if ( excludeDuplicationsFromFile.isExcludedFromFailure( match ) )
             {
                 excludedDuplications++;
@@ -341,7 +341,7 @@ public class CpdExecutor extends Executor
         }
 
         LOG.debug( "Excluded " + excludedDuplications + " duplications." );
-        return filteredMatches.iterator();
+        return CPDReportFriend.newReport( filteredMatches, 
report.getNumberOfTokensPerFile() );
     }
 
 }

Reply via email to