Edit me

??-August-2019 - 6.18.0

The PMD team is pleased to announce PMD 6.18.0.

This is a minor release.

New and noteworthy

New rule designer documentation

The documentation for the rule designer is now available on the main PMD documentation page: Rule Designer Reference. Check it out to learn about the usage and features of the rule designer.

New rules

  • The Java rule AvoidMessageDigestField (java-bestpractices) detects fields of the type java.security.MessageDigest. Using a message digest instance as a field would need to be synchronized, as it can easily be used by multiple threads. Without synchronization the calculated hash could be entirely wrong. Instead of declaring this as a field and synchronize access to use it from multiple threads, a new instance should be created when needed. This rule is also active when using java’s quickstart ruleset.

Modified Rules

  • The Java rule CloseResource (java-errorprone) now ignores by default instances of java.util.stream.Stream. These streams are AutoCloseable, but most streams are backed by collections, arrays, or generating functions, which require no special resource management. However, there are some exceptions: The stream returned by Files::lines(Path) is backed by a actual file and needs to be closed. These instances won’t be found by default by the rule anymore.

Fixed Issues

  • all
    • #1465: [core] Stylesheet pmd-report.xslt fails to display filepath if ‘java’ in path
    • #1983: [core] Avoid crashes with analysis cache when classpath references non-existing directories
    • #1990: [core] Incremental analysis mixes XPath rule violations
  • java-bestpractices
    • #1862: [java] New rule for MessageDigest.getInstance
    • #1952: [java] UnusedPrivateField not triggering if @Value annotation present
  • java-codestyle
    • #1951: [java] UnnecessaryFullyQualifiedName rule triggered when variable name clashes with package name
  • java-errorprone
    • #1922: [java] CloseResource possible false positive with Streams
    • #1966: [java] CloseResource false positive if Stream is passed as method parameter
    • #1967: [java] CloseResource false positive with late assignment of variable

API Changes

Deprecated APIs

For removal
Internal APIs
  • The contents of the package net.sourceforge.pmd.cache have been marked @InternalApi. That subsystem is very low-level and is not intended for public use. It will be hidden with PMD 7.0.0.

External Contributions