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/05/19 17:30:15 UTC
[maven-pmd-plugin] 01/10: Upgrade to PMD 7.0.0-rc2
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
commit a9fb72a8643f8f230ccb645d2c2684fd3cc27f2a
Author: Andreas Dangel <ad...@apache.org>
AuthorDate: Thu Jun 9 18:50:10 2022 +0200
Upgrade to PMD 7.0.0-rc2
---
pom.xml | 4 +-
.../org/apache/maven/plugins/pmd/CpdReport.java | 13 -------
.../apache/maven/plugins/pmd/exec/CpdExecutor.java | 40 +++++++------------
.../maven/plugins/pmd/exec/CpdReportFilter.java | 45 ++++++++++++++++++++++
.../apache/maven/plugins/pmd/exec/PmdExecutor.java | 2 +-
.../apache/maven/plugins/pmd/PmdReportTest.java | 20 ++++++----
6 files changed, 74 insertions(+), 50 deletions(-)
diff --git a/pom.xml b/pom.xml
index be8acfb..b945e06 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,7 +28,7 @@ under the License.
</parent>
<artifactId>maven-pmd-plugin</artifactId>
- <version>3.21.1-SNAPSHOT</version>
+ <version>3.21.1-pmd-7-SNAPSHOT</version>
<packaging>maven-plugin</packaging>
<name>Apache Maven PMD Plugin</name>
@@ -83,7 +83,7 @@ under the License.
<properties>
<mavenVersion>3.2.5</mavenVersion>
<javaVersion>8</javaVersion>
- <pmdVersion>6.55.0</pmdVersion>
+ <pmdVersion>7.0.0-rc2</pmdVersion>
<slf4jVersion>1.7.36</slf4jVersion>
<aetherVersion>1.0.0.v20140518</aetherVersion>
<doxiaVersion>1.12.0</doxiaVersion>
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 c01fdbc..45660e0 100644
--- a/src/main/java/org/apache/maven/plugins/pmd/CpdReport.java
+++ b/src/main/java/org/apache/maven/plugins/pmd/CpdReport.java
@@ -24,7 +24,6 @@ import java.util.Locale;
import java.util.Properties;
import net.sourceforge.pmd.cpd.JavaTokenizer;
-import net.sourceforge.pmd.cpd.renderer.CPDRenderer;
import org.apache.maven.plugins.annotations.Component;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
@@ -229,16 +228,4 @@ public class CpdReport extends AbstractPmdReport {
public String getOutputName() {
return "cpd";
}
-
- /**
- * 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/CpdExecutor.java b/src/main/java/org/apache/maven/plugins/pmd/exec/CpdExecutor.java
index 43ba3c0..4f0a25f 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
@@ -26,23 +26,20 @@ import java.io.ObjectInputStream;
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;
import net.sourceforge.pmd.cpd.CPD;
import net.sourceforge.pmd.cpd.CPDConfiguration;
+import net.sourceforge.pmd.cpd.CPDReport;
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.CPDRenderer;
+import net.sourceforge.pmd.cpd.renderer.CPDReportRenderer;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.pmd.ExcludeDuplicationsFromFile;
import org.apache.maven.reporting.MavenReportException;
@@ -207,7 +204,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) {
return null;
}
@@ -216,7 +213,7 @@ public class CpdExecutor extends Executor {
targetDir.mkdirs();
File targetFile = new File(targetDir, "cpd." + extension);
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) {
throw new MavenReportException(ioe.getMessage(), ioe);
@@ -225,7 +222,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());
}
@@ -235,8 +232,8 @@ 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) throws MavenReportException {
- CPDRenderer renderer = null;
+ public static CPDReportRenderer createRenderer(String format, String outputEncoding) throws MavenReportException {
+ CPDReportRenderer renderer = null;
if ("xml".equals(format)) {
renderer = new XMLRenderer(outputEncoding);
} else if ("csv".equals(format)) {
@@ -245,7 +242,8 @@ public class CpdExecutor extends Executor {
renderer = 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) {
throw new MavenReportException(
"Can't find CPD custom format " + format + ": "
@@ -257,22 +255,12 @@ 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()) {
- Match match = matches.next();
- if (excludeDuplicationsFromFile.isExcludedFromFailure(match)) {
- excludedDuplications++;
- } else {
- filteredMatches.add(match);
- }
- }
-
- LOG.debug("Excluded " + excludedDuplications + " duplications.");
- return filteredMatches.iterator();
+ 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/CpdReportFilter.java b/src/main/java/org/apache/maven/plugins/pmd/exec/CpdReportFilter.java
new file mode 100644
index 0000000..1a7c961
--- /dev/null
+++ b/src/main/java/org/apache/maven/plugins/pmd/exec/CpdReportFilter.java
@@ -0,0 +1,45 @@
+/*
+ * 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.
+ */
+package org.apache.maven.plugins.pmd.exec;
+
+import net.sourceforge.pmd.cpd.Match;
+import net.sourceforge.pmd.util.Predicate;
+import org.apache.maven.plugins.pmd.ExcludeDuplicationsFromFile;
+
+class CpdReportFilter implements Predicate<Match> {
+ private final ExcludeDuplicationsFromFile excludeDuplicationsFromFile;
+ private int excludedDuplications = 0;
+
+ CpdReportFilter(ExcludeDuplicationsFromFile excludeDuplicationsFromFile) {
+ this.excludeDuplicationsFromFile = excludeDuplicationsFromFile;
+ }
+
+ @Override
+ public boolean test(Match match) {
+ if (excludeDuplicationsFromFile.isExcludedFromFailure(match)) {
+ excludedDuplications++;
+ return false;
+ }
+ return true;
+ }
+
+ int getExcludedDuplications() {
+ return excludedDuplications;
+ }
+}
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 8e96bf4..ad0a5d3 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
@@ -30,6 +30,7 @@ import java.io.Writer;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
+import java.util.function.Predicate;
import net.sourceforge.pmd.PMDConfiguration;
import net.sourceforge.pmd.PmdAnalysis;
@@ -50,7 +51,6 @@ import net.sourceforge.pmd.renderers.HTMLRenderer;
import net.sourceforge.pmd.renderers.Renderer;
import net.sourceforge.pmd.renderers.TextRenderer;
import net.sourceforge.pmd.renderers.XMLRenderer;
-import net.sourceforge.pmd.util.Predicate;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.pmd.ExcludeViolationsFromFile;
import org.apache.maven.reporting.MavenReportException;
diff --git a/src/test/java/org/apache/maven/plugins/pmd/PmdReportTest.java b/src/test/java/org/apache/maven/plugins/pmd/PmdReportTest.java
index 7bde404..e497f32 100644
--- a/src/test/java/org/apache/maven/plugins/pmd/PmdReportTest.java
+++ b/src/test/java/org/apache/maven/plugins/pmd/PmdReportTest.java
@@ -442,7 +442,8 @@ public class PmdReportTest extends AbstractPmdReportTestCase {
// check that there is no violation reported for "unusedVar2" - as it is suppressed
assertFalse(str.contains("Avoid unused private fields such as 'unusedVar2'.\n </violation>"));
// but it appears as suppressed
- assertTrue(str.contains("suppressiontype=\"nopmd\" msg=\"Avoid unused private fields such as 'unusedVar2'.\""));
+ assertTrue(
+ str.contains("suppressiontype=\"//nopmd\" msg=\"Avoid unused private fields such as 'unusedVar2'.\""));
// check if there's a link to the JXR files
str = readFile(generatedReport);
@@ -466,7 +467,8 @@ public class PmdReportTest extends AbstractPmdReportTestCase {
// check that there is no violation reported for "unusedVar2" - as it is suppressed
assertFalse(str.contains("Avoid unused private fields such as 'unusedVar2'.\n </violation>"));
// but it appears as suppressed
- assertTrue(str.contains("suppressiontype=\"nopmd\" msg=\"Avoid unused private fields such as 'unusedVar2'.\""));
+ assertTrue(
+ str.contains("suppressiontype=\"//nopmd\" msg=\"Avoid unused private fields such as 'unusedVar2'.\""));
// check if there's a link to the JXR files
str = readFile(generatedReport);
@@ -529,13 +531,14 @@ public class PmdReportTest extends AbstractPmdReportTestCase {
File generatedFile = new File(getBasedir(), "target/test/unit/parse-error/target/pmd.xml");
assertTrue(FileUtils.fileExists(generatedFile.getAbsolutePath()));
String str = readFile(generatedFile);
- assertTrue(str.contains("Error while parsing"));
// The parse exception must be in the XML report
- assertTrue(str.contains("ParseException: Encountered \"\" at line 23, column 5."));
+ assertTrue(str.contains("ParseException:"));
+ assertTrue(str.contains("Encountered at line 23, column 5."));
str = readFile(generatedReport);
// The parse exception must also be in the HTML report
- assertTrue(str.contains("ParseException: Encountered \"\" at line 23, column 5."));
+ assertTrue(str.contains("ParseException:"));
+ assertTrue(str.contains("Encountered at line 23, column 5."));
}
public void testPMDProcessingErrorWithDetailsNoReport() throws Exception {
@@ -549,13 +552,14 @@ public class PmdReportTest extends AbstractPmdReportTestCase {
File generatedFile = new File(getBasedir(), "target/test/unit/parse-error/target/pmd.xml");
assertTrue(FileUtils.fileExists(generatedFile.getAbsolutePath()));
String str = readFile(generatedFile);
- assertTrue(str.contains("Error while parsing"));
// The parse exception must be in the XML report
- assertTrue(str.contains("ParseException: Encountered \"\" at line 23, column 5."));
+ assertTrue(str.contains("ParseException:"));
+ assertTrue(str.contains("Encountered at line 23, column 5."));
str = readFile(generatedReport);
// The parse exception must NOT be in the HTML report, since reportProcessingErrors is false
- assertFalse(str.contains("ParseException: Encountered \"\" at line 23, column 5."));
+ assertFalse(str.contains("ParseException:"));
+ assertFalse(str.contains("Encountered at line 23, column 5."));
}
public void testPMDExcludeRootsShouldExcludeSubdirectories() throws Exception {