PMD 7.1.0 released
26 April 2024
26-April-2024 - 7.1.0
The PMD team is pleased to announce PMD 7.1.0.
This is a minor release.
Table Of Contents
๐ New and noteworthy
More robust CPD reports
There were a number of circumstances, specially around (but not limited to) literal sequences, were CPD would
report duplicate overlapping or partially overlapping matches. These have now been fixed, and CPD will report
only the longest non-overlapping duplicate.
These improvements apply to all supported languages, irrespective of supported flags.
โจ New Rules
- The new Java rule
UnnecessaryVarargsArrayCreation
reports explicit array creation
when a varargs is expected. This is more heavy to read and could be simplified.
- The new Java rule
ConfusingArgumentToVarargsMethod
reports some confusing situations
where a varargs method is called with an inexact argument type. These may end up in a mismatch between the expected
parameter type and the actual value.
- The new Java rule
LambdaCanBeMethodReference
reports lambda expressions that can be replaced
with a method reference. Please read the documentation of the rule for more info. This rule is now part of the Quickstart
ruleset.
๐ Rule Changes
๐ Fixed Issues
- core
- #494: [core] Adopt JApiCmp to enforce control over API changes
- #4942: [core] CPD:
--skip-duplicate-files
has no effect (7.0.0 regression)
- #4959: [core] Upgrade saxon to 12.4
- cli
- #4791: [cli] Could not find or load main class
- #4913: [cli] cpd-gui closes immediately
- doc
- #4901: [doc] Improve documentation on usage of violationSuppressXPath
- apex
- #4418: [apex] ASTAnnotation.getImage() does not return value as written in the class
- apex-errorprone
- #3953: [apex] EmptyCatchBlock false positive with formal (doc) comments
- cpp
- #2438: [cpp] Repeated Duplication blocks
- java
- #4899: [java] Parsing failed in ParseLock#doParse() java.io.IOException: Stream closed
- #4902: [java] โBad intersection, unrelated class typesโ for Constable[] and Enum[]
- #4947: [java] Broken TextBlock parser
- java-bestpractices
- #1084: [java] Allow JUnitTestsShouldIncludeAssert to configure verification methods
- #3216: [java] New rule: UnnecessaryVarargsArrayCreation
- #4435: [java] [7.0-rc1] UnusedAssignment for used field
- #4569: [java] ForLoopCanBeForeach reports on loop
for (int i = 0; i < list.size(); i += 2)
- #4618: [java] UnusedAssignment false positive with conditional assignments of fields
- java-codestyle
- #4602: [java] UnnecessaryImport: false positives with static imports
- #4785: [java] False Positive: PMD Incorrectly report violation for UnnecessaryImport
- #4779: [java] Examples in documentation of MethodArgumentCanBeFinal do not trigger the rule
- #4881: [java] ClassNamingConventions: interfaces are identified as abstract classes (regression in 7.0.0)
- java-design
- #2440: [java] FinalFieldCouldBeStatic FN when the right side of the assignment is a constant expression
- #3694: [java] SingularField ignores static variables
- #4873: [java] AvoidCatchingGenericException: Can no longer suppress on the exception itself
- java-errorprone
- #2056: [java] CloseResource false-positive with URLClassLoader in cast expression
- #4751: [java] PMD crashes when analyzing CloseResource Rule
- #4928: [java] EmptyCatchBlock false negative when allowCommentedBlocks=true
- #4948: [java] ImplicitSwitchFallThrough: False-positive with nested switch statements
- java-performance
- #3845: [java] InsufficientStringBufferDeclaration should consider literal expression
- #4874: [java] StringInstantiation: False-positive when using
new String(charArray)
- #4886: [java] BigIntegerInstantiation: False Positive with Java 17 and BigDecimal.TWO
- pom-errorprone
- #4388: [pom] InvalidDependencyTypes doesnโt consider dependencies at all
- misc
- #4967: Fix reproducible build issues with 7.0.0
๐จ API Changes
Deprecated methods
โจ External Contributions
- #4864: Fix #1084 [Java] add extra assert method names to Junit rules - Erwan Moutymbo (@emouty)
- #4894: Fix #4791 Error caused by space in JDK path - Scrates1 (@Scrates1)
๐ Stats
- 205 commits
- 71 closed tickets & PRs
- Days since last release: 34