Download Latest Version PMD 7.0.0-rc3 (30-May-2023).zip (18.8 MB)
Email in envelope

Get an email when there's a new version of pmd

Home / pmd_releases_5.5.4
Name Modified Size InfoDownloads / Week
Parent folder
pmd-doc-5.5.4.zip 2017-02-25 60.4 MB
pmd-src-5.5.4.zip 2017-02-25 28.3 MB
pmd-bin-5.5.4.zip 2017-02-25 58.8 MB
PMD 5.5.4 (25-Februar-2017).tar.gz 2017-02-25 27.0 MB
PMD 5.5.4 (25-Februar-2017).zip 2017-02-25 28.3 MB
README.md 2017-02-25 4.8 kB
Totals: 6 Items   202.7 MB 0

PMD Release Notes

25-Februar-2017 - 5.5.4

The PMD team is pleased to announce PMD 5.5.4

Table Of Contents

New and noteworthy

New Rules

AccessorMethodGeneration (java-design)

When accessing a private field / method from another class, the Java compiler will generate a accessor methods with package-private visibility. This adds overhead, and to the dex method count on Android. This situation can be avoided by changing the visibility of the field / method from private to package-private.

For instance, it would report violations on code such as:

public class OuterClass {
    private int counter;
    /* package */ int id;

    public class InnerClass {
        InnerClass() {
            OuterClass.this.counter++; // wrong, accessor method will be generated
        }

        public int getOuterClassId() {
            return OuterClass.this.id; // id is package-private, no accessor method needed
        }
    }
}

This new rule is part of the java-design ruleset.

Modified Rules

  • The Java rule UnusedModifier (ruleset java-unusedcode) has been expanded to consider more redundant modifiers.
  • Annotations marked as abstract.
  • Nested annotations marked as static.
  • Nested annotations within another interface or annotation marked as public.
  • Classes, interfaces or annotations nested within an annotation marked as public or static.
  • Nested enums marked as static.
  • The Java rule UnnecessaryLocalBeforeReturn (ruleset java-design) no longer requires the variable declaration and return statement to be on consecutive lines. Any variable that is used solely in a return statement will be reported.

Fixed Issues

  • General
  • #234: [core] Zip file stream closes spuriously when loading rulesets
  • #256: [core] shortnames option is broken with relative paths
  • apex-complexity
  • #251: [apex] NCSS Type length is incorrect when using method chaining
  • apex-security
  • #264: [apex] ApexXSSFromURLParamRule shouldn't enforce ESAPI usage. String.escapeHtml4 is sufficient.
  • java-basic
  • #232: [java] SimplifiedTernary: Incorrect ternary operation can be simplified.
  • java-coupling
  • #270: [java] LoD false positive
  • java-design
  • #933: [java] UnnecessaryLocalBeforeReturn false positive for SuppressWarnings annotation
  • #1496: [java] New Rule: AccesorMethodGeneration - complements accessor class rule
  • #216: [java] [doc] NonThreadSafeSingleton: Be more explicit as to why double checked locking is not recommended
  • #219: [java] UnnecessaryLocalBeforeReturn: ClassCastException in switch case with local variable returned
  • #240: [java] UnnecessaryLocalBeforeReturn: Enhance by checking usages
  • java-optimizations
  • #215: [java] RedundantFieldInitializer report for annotation field not explicitly marked as final
  • java-unusedcode
  • #246: [java] UnusedModifier doesn't check annotations
  • #247: [java] UnusedModifier doesn't check annotations inner classes
  • #248: [java] UnusedModifier doesn't check static keyword on nested enum declaration
  • #257: [java] UnusedLocalVariable false positive

External Contributions

  • #227: [apex] Improving detection of getters
  • #228: [apex] Excluding count from CRUD/FLS checks
  • #229: [apex] Dynamic SOQL is safe against Integer, Boolean, Double
  • #231: [apex] CRUD/FLS rule - add support for fields
  • #266: [java] corrected invalid reporting of LoD violation
  • #268: [apex] Support safe escaping via String method
  • #273: [apex] Shade jackson on apex
Source: README.md, updated 2017-02-25