PMD 6.11.0 released PMD Source Code Analyzer Home Documentation Bugs About News Downloads Support Plugins PMD 6.11.0 released 27 January 2019 27-January-2019 - 6.11.0 The PMD team is pleased to announce PMD 6.11.0. This is a minor release. Table Of Contents New and noteworthy Updated Apex Support PL/SQL Grammar improvements New Rules Modified Rules Deprecated Rules Fixed Issues API Changes External Contributions New and noteworthy Updated Apex Support The Apex language support has been bumped to version 45 (Spring ‘19). All new language features are now properly parsed and processed. Many nodes now expose more informations, such as the operator for BooleanExpressions. This makes these operators consumable by XPath rules, e.g. //BooleanExpression[@Operator='&&']. PL/SQL Grammar improvements In this release, many parser bugs in our PL/SQL support have been fixed. This adds e.g. support for table collection expressions (SELECT * FROM TABLE(expr)). Support for parsing insert statements has been added. More improvements are planned for the next release of PMD. New Rules The new Java rule UnsynchronizedStaticFormatter (java-multithreading) detects unsynchronized usages of static java.text.Format instances. This rule is a more generic replacement of the rule UnsynchronizedStaticDateFormatter which focused just on DateFormat. The new Java rule ForLoopVariableCount (java-bestpractices) checks for the number of control variables in a for-loop. Having a lot of control variables makes it harder to understand what the loop does. The maximum allowed number of variables is by default 1 and can be configured by a property. The new Java rule AvoidReassigningLoopVariables (java-bestpractices) searches for loop variables that are reassigned. Changing the loop variables additionally to the loop itself can lead to hard-to-find bugs. The new Java rule UseDiamondOperator (java-codestyle) looks for constructor calls with explicit type parameters. Since Java 1.7, these type parameters are not necessary anymore, as they can be inferred now. Modified Rules The Java rule LocalVariableCouldBeFinal (java-codestyle) has a new property ignoreForEachDecl, which is by default disabled. The new property allows for ignoring non-final loop variables in a for-each statement. Deprecated Rules The Java rule UnsynchronizedStaticDateFormatter has been deprecated and will be removed with PMD 7.0.0. The rule is replaced by the more general UnsynchronizedStaticFormatter. Fixed Issues core #1196: [core] CPD results not consistent between runs #1496 [core] Refactor metrics to be dealt with generically from pmd-core apex #1542: [apex] Include the documentation category #1546: [apex] PMD parsing exception for Apex classes using ‘inherited sharing’ keyword #1568: [apex] AST node attribute @Image not usable / always null in XPath rule / Designer java #1556: [java] Default methods should not be considered abstract #1578: [java] Private field is detected as public inside nested classes in interfaces java-bestpractices #658: [java] OneDeclarationPerLine: False positive for loops #1518: [java] New rule: AvoidReassigningLoopVariable #1519: [java] New rule: ForLoopVariableCount java-codestyle #1513: [java] LocalVariableCouldBeFinal: allow excluding the variable in a for-each loop #1517: [java] New Rule: UseDiamondOperator java-errorprone #1035: [java] ReturnFromFinallyBlock: False positive on lambda expression in finally block #1549: [java] NPE in PMD 6.8.0 InvalidSlf4jMessageFormat java-multithreading #1533: [java] New rule: UnsynchronizedStaticFormatter plsql #1507: [plsql] Parse Exception when using ‘ ’ operator in where clause #1508: [plsql] Parse Exception when using SELECT COUNT(*) #1509: [plsql] Parse Exception with OUTER/INNER Joins #1511: [plsql] Parse Exception with IS NOT NULL #1526: [plsql] ParseException when using TableCollectionExpression #1583: [plsql] Update Set Clause should allow multiple columns #1586: [plsql] Parse Exception when functions are used with LIKE #1588: [plsql] Parse Exception with function calls in WHERE clause API Changes StatisticalRule and the related helper classes and base rule classes are deprecated for removal in 7.0.0. This includes all of net.sourceforge.pmd.stat and net.sourceforge.pmd.lang.rule.stat, and also AbstractStatisticalJavaRule, AbstractStatisticalApexRule and the like. The methods Report#addMetric and metricAdded will also be removed. setProperty is deprecated, because MultiValuePropertyDescriptor is deprecated as well External Contributions #1503: [java] Fix for ReturnFromFinallyBlock false-positives - RishabhDeep Singh #1514: [java] LocalVariableCouldBeFinal: allow excluding the variable in a for-each loop - Kris Scheibe #1516: [java] OneDeclarationPerLine: Don’t report multiple variables in a for statement. - Kris Scheibe #1520: [java] New rule: ForLoopVariableCount: check the number of control variables in a for loop - Kris Scheibe #1521: [java] Upgrade to ASM7 for JDK 11 support - Mark Pritchard #1530: [java] New rule: AvoidReassigningLoopVariables - Kris Scheibe #1534: [java] This is the change regarding the usediamondoperator #1517 - hemanshu070 #1545: [doc] fixing dead links + tool to check for dead links automatically - Kris Scheibe #1551: [java] InvalidSlf4jMessageFormatRule should not throw NPE for enums - Robbie Martinus #1552: [core] Upgrading Google Gson from 2.5 to 2.8.5 - Thunderforge #1553: [core] Upgrading System Rules dependency from 1.8.0 to 1.19.0 - Thunderforge #1554: [plsql] updates should allow for multiple statements - tashiscool #1584: [core] Fixes 1196: inconsistencies of clones returned by different CPD executions for the same files - Bruno Ferreira Home ⋅ Documentation ⋅ Bugs ⋅ About ⋅ News ⋅ Support ⋅ Downloads ⋅ Plugins Copyright © 2025 PMD. All Rights Reserved. Credits: Landing Page Theme, based on free to use, open source Bootstrap theme created by Start Bootstrap.