You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ad...@apache.org on 2023/01/26 14:08:37 UTC

[maven-pmd-plugin] branch pmd7 updated: Remove CPDRenderer workaround

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 cb73659  Remove CPDRenderer workaround
cb73659 is described below

commit cb7365979490b9a29fd63f0d9468be467b17e94b
Author: Andreas Dangel <ad...@apache.org>
AuthorDate: Thu Jan 26 14:59:24 2023 +0100

    Remove CPDRenderer workaround
---
 .../net/sourceforge/pmd/cpd/CPDReportFriend.java   | 44 ----------------------
 .../sourceforge/pmd/cpd/renderer/CPDRenderer.java  | 38 -------------------
 .../apache/maven/plugins/pmd/exec/CpdExecutor.java | 30 +++------------
 ...rtRendererAdapter.java => CpdReportFilter.java} | 31 +++++++++------
 4 files changed, 26 insertions(+), 117 deletions(-)

diff --git a/src/main/java/net/sourceforge/pmd/cpd/CPDReportFriend.java b/src/main/java/net/sourceforge/pmd/cpd/CPDReportFriend.java
deleted file mode 100644
index d50a2a8..0000000
--- a/src/main/java/net/sourceforge/pmd/cpd/CPDReportFriend.java
+++ /dev/null
@@ -1,44 +0,0 @@
-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/net/sourceforge/pmd/cpd/renderer/CPDRenderer.java b/src/main/java/net/sourceforge/pmd/cpd/renderer/CPDRenderer.java
deleted file mode 100644
index 6b4a5f3..0000000
--- a/src/main/java/net/sourceforge/pmd/cpd/renderer/CPDRenderer.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package net.sourceforge.pmd.cpd.renderer;
-
-/*
- * 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 java.util.Iterator;
-
-import net.sourceforge.pmd.cpd.Match;
-
-/**
- * Readd this interface here. Not needed anymore,
- * once <a href="https://github.com/pmd/pmd/pull/4343">[core] CPD - implement
- * CPDReportRenderer for all renderers #4343</a>
- * is done.
- */
-@Deprecated
-public interface CPDRenderer
-{
-    void render( Iterator<Match> var1, Writer var2 ) throws IOException;
-}
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 b50aea4..d840007 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
@@ -27,8 +27,6 @@ import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.io.OutputStreamWriter;
 import java.io.Writer;
-import java.util.ArrayList;
-import java.util.List;
 import java.util.Objects;
 
 import org.apache.maven.plugin.MojoExecutionException;
@@ -41,14 +39,12 @@ 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;
 import net.sourceforge.pmd.cpd.JavaLanguage;
 import net.sourceforge.pmd.cpd.Language;
 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.CPDReportRenderer;
@@ -299,11 +295,11 @@ public class CpdExecutor extends Executor
         }
         else if ( "csv".equals( format ) )
         {
-            renderer = new CPDReportRendererAdapter( new CSVRenderer() );
+            renderer = new CSVRenderer();
         }
         else if ( "txt".equals( format ) )
         {
-            renderer = new CPDReportRendererAdapter( new SimpleRenderer() );
+            renderer = new SimpleRenderer();
         }
         else if ( !"".equals( format ) && !"none".equals( format ) )
         {
@@ -325,23 +321,9 @@ public class CpdExecutor extends Executor
     {
         LOG.debug( "Filtering duplications. Using " + excludeDuplicationsFromFile.countExclusions()
             + " configured exclusions." );
-
-        List<Match> filteredMatches = new ArrayList<>();
-        int excludedDuplications = 0;
-        for ( Match match : report.getMatches() )
-        {
-            if ( excludeDuplicationsFromFile.isExcludedFromFailure( match ) )
-            {
-                excludedDuplications++;
-            }
-            else
-            {
-                filteredMatches.add( match );
-            }
-        }
-
-        LOG.debug( "Excluded " + excludedDuplications + " duplications." );
-        return CPDReportFriend.newReport( filteredMatches, report.getNumberOfTokensPerFile() );
+        CpdReportFilter filter = new CpdReportFilter( excludeDuplicationsFromFile );
+        CPDReport filteredReport = report.filterMatches( filter );
+        LOG.debug( "Excluded " + filter.getExcludedDuplications() + " duplications." );
+        return filteredReport;
     }
-
 }
diff --git a/src/main/java/org/apache/maven/plugins/pmd/exec/CPDReportRendererAdapter.java b/src/main/java/org/apache/maven/plugins/pmd/exec/CpdReportFilter.java
similarity index 54%
rename from src/main/java/org/apache/maven/plugins/pmd/exec/CPDReportRendererAdapter.java
rename to src/main/java/org/apache/maven/plugins/pmd/exec/CpdReportFilter.java
index c161480..c01157b 100644
--- a/src/main/java/org/apache/maven/plugins/pmd/exec/CPDReportRendererAdapter.java
+++ b/src/main/java/org/apache/maven/plugins/pmd/exec/CpdReportFilter.java
@@ -19,25 +19,34 @@ package org.apache.maven.plugins.pmd.exec;
  * under the License.
  */
 
-import java.io.IOException;
-import java.io.Writer;
+import org.apache.maven.plugins.pmd.ExcludeDuplicationsFromFile;
 
-import net.sourceforge.pmd.cpd.CPDReport;
-import net.sourceforge.pmd.cpd.renderer.CPDRenderer;
-import net.sourceforge.pmd.cpd.renderer.CPDReportRenderer;
+import net.sourceforge.pmd.cpd.Match;
+import net.sourceforge.pmd.util.Predicate;
 
-final class CPDReportRendererAdapter implements CPDReportRenderer
+class CpdReportFilter implements Predicate<Match>
 {
-    private final CPDRenderer renderer;
+    private final ExcludeDuplicationsFromFile excludeDuplicationsFromFile;
+    private int excludedDuplications = 0;
 
-    CPDReportRendererAdapter( CPDRenderer renderer )
+    CpdReportFilter( ExcludeDuplicationsFromFile excludeDuplicationsFromFile )
     {
-        this.renderer = renderer;
+        this.excludeDuplicationsFromFile = excludeDuplicationsFromFile;
     }
 
     @Override
-    public void render( CPDReport cpdReport, Writer writer ) throws IOException
+    public boolean test( Match match )
     {
-        renderer.render( cpdReport.getMatches().iterator(), writer );
+        if ( excludeDuplicationsFromFile.isExcludedFromFailure( match ) )
+        {
+            excludedDuplications++;
+            return false;
+        }
+        return true;
+    }
+
+    int getExcludedDuplications()
+    {
+        return excludedDuplications;
     }
 }