PMD v6.25.0 Release Notes

Release Date: 2020-06-27 // almost 4 years ago
  • 27-June-2020 - 6.25.0

    The PMD team is pleased to announce PMD 6.25.0.

    ๐Ÿš€ This is a minor release.

    Table Of Contents

    ๐Ÿ†• New and noteworthy

    Scala cross compilation

    0๏ธโƒฃ Up until now the PMD Scala module has been compiled against scala 2.13 only by default.
    However, this makes it impossible to use pmd as a library in scala projects,
    ๐Ÿ”Œ that use scala 2.12, e.g. in sbt plugins. Therefore PMD now provides cross compiled pmd-scala
    modules for both versions: scala 2.12 and scala 2.13.

    The new modules have new maven artifactIds. The old artifactId net.sourceforge.pmd:pmd-scala:6.25.0
    ๐Ÿ—„ is still available, but is deprecated from now on. It has been demoted to be just a delegation to the new
    ๐Ÿšš pmd-scala_2.13 module and will be removed eventually.

    The coordinates for the new modules are:

    <dependency>
        <groupId>net.sourceforge.pmd</groupId>
        <artifactId>pmd-scala_2.12</artifactId>
        <version>6.25.0</version>
    </dependency>
    
    <dependency>
        <groupId>net.sourceforge.pmd</groupId>
        <artifactId>pmd-scala_2.13</artifactId>
        <version>6.25.0</version>
    </dependency>
    

    The command line version of PMD continues to use scala 2.13.

    ๐Ÿ†• New Rules

    The new Java Rule UnnecessaryCast (java-codestyle)
    finds casts that are unnecessary while accessing collection elements.

    The new Java Rule AvoidCalendarDateCreation (java-performance)
    finds usages of java.util.Calendar whose purpose is just to get the current date. This
    can be done in a more lightweight way.

    The new Java Rule UseIOStreamsWithApacheCommonsFileItem (java-performance)
    finds usage of FileItem.get() and FileItem.getString(). These two methods are problematic since
    they load the whole uploaded file into memory.

    Modified rules

    The Java rule UseDiamondOperator (java-codestyle) now by default
    finds unnecessary usages of type parameters, which are nested, involve wildcards and are used
    within a ternary operator. These usages are usually only unnecessary with Java8 and later, when
    the type inference in Java has been improved.

    In order to avoid false positives when checking Java7 only code, the rule has the new property
    0๏ธโƒฃ java7Compatibility, which is disabled by default. Settings this to "true" retains
    the old rule behaviour.

    ๐Ÿ›  Fixed Issues

    • apex-bestpractices
      • #2554: [apex] Exception applying rule UnusedLocalVariable on trigger
    • core
      • #971: [apex][plsql][java] Deprecate overly specific base rule classes
      • #2451: [core] Deprecate support for List attributes with XPath 2.0
      • #2599: [core] Fix XPath 2.0 Rule Chain Analyzer with Unions
      • #2483: [lang-test] Support cpd tests based on text comparison.
        ๐Ÿ‘€ For details see
        ๐Ÿš€ Testing your implementation
        ๐Ÿ“š in the developer documentation.
    • c#
      • #2551: [c#] CPD suppression with comments doesn't work
    • cpp
      • #1757: [cpp] Support unicode characters
    • java
      • #2549: [java] Auxclasspath in PMD CLI does not support relative file path
    • ๐Ÿ’… java-codestyle
      • #2545: [java] UseDiamondOperator false negatives
      • #2573: [java] DefaultPackage: Allow package default JUnit 5 Test methods
    • java-design
      • #2563: [java] UselessOverridingMethod false negative with already public methods
      • #2570: [java] NPathComplexity should mention the expected NPath complexity
    • java-errorprone
      • #2544: [java] UseProperClassLoader can not detect the case with method call on intermediate variable
    • ๐ŸŽ java-performance
      • #2591: [java] InefficientStringBuffering/AppendCharacterWithChar: Fix false negatives with concats in appends
      • #2600: [java] UseStringBufferForStringAppends: fix false negative with fields
    • scala
      • #2547: [scala] Add cross compilation for scala 2.12 and 2.13

    API Changes

    ๐Ÿ—„ The maven module net.sourceforge.pmd:pmd-scala is deprecated. Use net.sourceforge.pmd:pmd-scala_2.13
    or net.sourceforge.pmd:pmd-scala_2.12 instead.

    Rule implementation classes are internal API and should not be used by clients directly.
    The rules should only be referenced via their entry in the corresponding category ruleset
    (e.g. <rule ref="category/java/bestpractices.xml/AbstractClassWithoutAbstractMethod" />).

    ๐Ÿšš While we definitely won't move or rename the rule classes in PMD 6.x, we might consider changes
    in PMD 7.0.0 and onwards.

    ๐Ÿ—„ Deprecated APIs

    Internal API

    ๐Ÿšš Those APIs are not intended to be used by clients, and will be hidden or removed with PMD 7.0.0.
    ๐Ÿ—„ You can identify them with the @InternalApi annotation. You'll also get a deprecation warning.

    For removal

    External Contributions

    Stats

    • 135 commits
    • 31 closed tickets & PRs
    • ๐Ÿš€ Days since last release: 33