--- title: Release Notes 5.5.0 tags: [release_notes] keywords: release notes, announcements, what's new, new features last_updated: June 25, 2016 summary: "Version 5.5.0 of the PMD Open Source Project, released June 25, 2016." sidebar: mydoc_sidebar permalink: 2016-06-25-release-notes-5-5-0.html folder: mydoc --- ## System requirements PMD and CPD need at least a java7 runtime environment. For analyzing Salesforce.com Apex source code, you’ll need a java8 runtime environment. ## New Supported Languages * Salesforce.com Apex is now supported by PMD and CPD. See [PR#86](https://github.com/pmd/pmd/pull/86). * CPD now supports Perl. See [PR#82](https://github.com/pmd/pmd/pull/82). * CPD now supports Swift. See [PR#33](https://github.com/adangel/pmd/pull/33). ## New and Modified Rules * New rules in Java: * java-logging-java/InvalidSlf4jMessageFormat: Check for invalid message format in slf4j loggers. See [PR#73](https://github.com/pmd/pmd/pull/73). * java-design/ConstantsInInterface: Avoid constants in interfaces. Interfaces should define types, constants are implementation details better placed in classes or enums. See Effective Java, item 19\. See [PR#93](https://github.com/pmd/pmd/pull/93). * Modified rules in Java: * java-comments/CommentRequired: New property serialVersionUIDCommentRequired which controls the comment requirements for _serialVersionUID_ fields. By default, no comment is required for this field. * java-design/UseVargs: public static void main method is ignored now and so are methods, that are annotated with Override. See [PR#79](https://github.com/pmd/pmd/pull/79). * New rules for Salesforce.com Apex: * apex-complexity: AvoidDeeplyNestedIfStmts, ExcessiveParameterList, ExcessiveClassLength, NcssMethodCount, NcssTypeCount, NcssConstructorCount, StdCyclomaticComplexity, TooManyFields, ExcessivePublicCount * apex-performance: AvoidDmlStatementsInLoops, AvoidSoqlInLoops * apex-style: VariableNamingConventions, MethodNamingConventions, ClassNamingConventions, MethodWithSameNameAsEnclosingClass, AvoidLogicInTrigger, AvoidGlobalModifier * Javascript * New Rule: ecmascript-unnecessary/NoElseReturn: The else block in a if-else-construct is unnecessary if the if block contains a return. Then the content of the else block can be put outside. See [#1486](https://sourceforge.net/p/pmd/bugs/1486/). ## Improvements and CLI Changes * A JSON-renderer for PMD which is compatible with CodeClimate. See [PR#83](https://github.com/pmd/pmd/pull/83). * [#1360](https://sourceforge.net/p/pmd/bugs/1360/): [core] [java] Provide backwards compatibility for PMD configuration file * CPD: If a complete filename is specified, the language dependent filename filter is not applied. This allows to scan files, that are not using the standard file extension. If a directory is specified, the filename filter is still applied and only those files with the correct file extension of the language are scanned. * CPD: If no problems found, an empty report will be output instead of nothing. See also [#1481](https://sourceforge.net/p/pmd/bugs/1481/) * CPD: New command line parameter --ignore-usings: Ignore using directives in C# when comparing text. * PMD: New command line parameter: -norulesetcompatibility - this disables the ruleset factory compatibility filter and fails, if e.g. an old rule name is used in the ruleset. See also [#1360](https://sourceforge.net/p/pmd/bugs/1360/). This option is also available for the ant task: true. * PMD: New command line parameter: -filelist- this provides an alternative way to define, which files should be process by PMD. With this option, you can provide the path to a single file containing a comma delimited list of files to analyze. If this is given, then you don’t need to provide -dir. See [PR#98](https://github.com/pmd/pmd/pull/98). ## Pull Requests * [#25](https://github.com/adangel/pmd/pull/25): [cs] Added option to exclude C# using directives from CPD analysis * [#27](https://github.com/adangel/pmd/pull/27): [cpp] Added support for Raw String Literals (C++11). * [#29)(https://github.com/adangel/pmd/pull/29): [jsp] Added support for files with UTF-8 BOM to JSP tokenizer. * [#30](https://github.com/adangel/pmd/pull/30): [core] CPD: Removed file filter for files that are explicitly specified on the CPD command line using the ‘–files’ command line option. * [#31](https://github.com/adangel/pmd/pull/31): [core] CPD: Added file encoding detection to CPD. * [#32](https://github.com/adangel/pmd/pull/32): [objectivec] Extended Objective-C grammar to accept UTF-8 escapes (\uXXXX) in string literals. * [#33](https://github.com/adangel/pmd/pull/33): [swift] Added support for Swift to CPD. * [#34](https://github.com/adangel/pmd/pull/34): multiple code improvements: squid:S1192, squid:S1118, squid:S1066, squid:S1854, squid:S2864 * [#35](https://github.com/adangel/pmd/pull/35): [javascript] Javascript tokenizer now ignores comment tokens. * [#72](https://github.com/pmd/pmd/pull/72): [java] [jsp] Added capability in Java and JSP parser for tracking tokens. * [#73](https://github.com/pmd/pmd/pull/73): [java] InvalidSlf4jMessageFormat: Add rule to look for invalid message format in slf4j loggers * [#74](https://github.com/pmd/pmd/pull/74): [java] CommentDefaultAccessModifier: Fix rendering CommentDefaultAccessModifier description as code * [#75](https://github.com/pmd/pmd/pull/75): [core] RuleSetFactory Performance Enhancement * [#76](https://github.com/pmd/pmd/pull/76): [java] DoNotCallGarbageCollectionExplicitly: fix formatting typos in an example * [#77](https://github.com/pmd/pmd/pull/77): [java] [plsql] Fix various typos * [#78](https://github.com/pmd/pmd/pull/78): [java] MissingStaticMethodInNonInstantiatableClass: Add Builder pattern check * [#79](https://github.com/pmd/pmd/pull/79): [java] UseVarargs: do not flag public static void main(String[]), ignore @Override * [#80](https://github.com/pmd/pmd/pull/80): [site] Update mvn-plugin.md * [#82](https://github.com/pmd/pmd/pull/82): [perl] Add Perl support to CPD. * [#83](https://github.com/pmd/pmd/pull/83): [core] CodeClimateRenderer: Adds new Code Climate-compliant JSON renderer * [#84](https://github.com/pmd/pmd/pull/84): [java] EmptyMethodInAbstractClassShouldBeAbstract: Change rule’s description. * [#85](https://github.com/pmd/pmd/pull/85): [java] UseStringBufferForStringAppends: False Positive with Ternary Operator (#1340) * [#86](https://github.com/pmd/pmd/pull/86): [apex] Added language module for Salesforce.com Apex incl. rules ported from Java and new ones. * [#87](https://github.com/pmd/pmd/pull/87): [core] [apex] Customize Code Climate Json “categories” + “remediation_points” as PMD rule properties * [#88](https://github.com/pmd/pmd/pull/88): [core] [apex] Fixed typo in ruleset.xml and problems with the CodeClimate renderer * [#89](https://github.com/pmd/pmd/pull/89): [core] Some code enhancements * [#90](https://github.com/pmd/pmd/pull/90): [core] Refactored two test to stop using the deprecated ant class BuildFileTest * [#91](https://github.com/pmd/pmd/pull/91): [core] [java] [jsp] [plsql] [test] [vm] Small code enhancements, basically reordering variable declarations, constructors and variable modifiers * [#92](https://github.com/pmd/pmd/pull/92): [core] [apex] Improved Code Climate Renderer Output and a Bugfix for Apex StdCyclomaticComplexityRule on triggers * [#93](https://github.com/pmd/pmd/pull/93): [java] ConstantsInInterface: Add ConstantsInInterface rule. Effective Java, 19 * [#94](https://github.com/pmd/pmd/pull/94): [core] [apex] Added property, fixed code climate renderer output and deleted unused rulessets * [#95](https://github.com/pmd/pmd/pull/95): [apex] AvoidDmlStatementsInLoops: New apex rule AvoidDmlStatementsInLoops * [#96](https://github.com/pmd/pmd/pull/96): [core] CodeClimateRenderer: Clean up Code Climate renderer * [#97](https://github.com/pmd/pmd/pull/97): [java] BooleanGetMethodName: Don’t report bad method names on @Override * [#98](https://github.com/pmd/pmd/pull/98): [core] PMD: Input filelist parameter * [#99](https://github.com/pmd/pmd/pull/99): [apex] Fixed Trigger name is reported incorrectly * [#100](https://github.com/pmd/pmd/pull/100): [core] CSVRenderer: escape filenames with commas in csvrenderer ## Bugfixes * java-basic * [#1471](https://sourceforge.net/p/pmd/bugs/1471/): [java] DoubleCheckedLocking: False positives * [#1424](https://sourceforge.net/p/pmd/bugs/1424/): [java] SimplifiedTernary: False positive with ternary operator * java-codesize * [#1457](https://sourceforge.net/p/pmd/bugs/1457/): [java] TooManyMethods: counts inner class methods * java-comments * [#1430](https://sourceforge.net/p/pmd/bugs/1430/): [java] CommentDefaultAccessModifier: triggers on field annotated with @VisibleForTesting * [#1434](https://sourceforge.net/p/pmd/bugs/1434/): [java] CommentRequired: raises violation on serialVersionUID field * java-controversial * [#1449](https://sourceforge.net/p/pmd/bugs/1449/): [java] AvoidUsingShortType: false positive when casting a variable to short * java-design * [#1452](https://sourceforge.net/p/pmd/bugs/1452/): [java] AccessorClassGenerationRule: ArrayIndexOutOfBoundsException with Annotations * [#1479](https://sourceforge.net/p/pmd/bugs/1479/): [java] CloseResource: false positive on Statement * [#1438](https://sourceforge.net/p/pmd/bugs/1438/): [java] UseNotifyAllInsteadOfNotify: false positive * [#1467](https://sourceforge.net/p/pmd/bugs/1467/): [java] UseUtilityClass: can’t correctly check functions with multiple annotations * java-finalizers * [#1440](https://sourceforge.net/p/pmd/bugs/1440/): [java] AvoidCallingFinalize: NPE * java-imports * [#1436](https://sourceforge.net/p/pmd/bugs/1436/): [java] UnnecessaryFullyQualifiedName: false positive on clashing static imports with enums * [#1465](https://sourceforge.net/p/pmd/bugs/1465/): [java] UnusedImports: False Positve with javadoc @link * java-junit * [#1373](https://sourceforge.net/p/pmd/bugs/1373/): [java] JUnitAssertionsShouldIncludeMessage: is no longer compatible with TestNG * [#1453](https://sourceforge.net/p/pmd/bugs/1453/): [java] TestClassWithoutTestCases: false positive * java-migrating * [#1446](https://sourceforge.net/p/pmd/bugs/1446/): [java] JUnit4TestShouldUseBeforeAnnotation: False positive when TestNG is used * java-naming * [#1431](https://sourceforge.net/p/pmd/bugs/1431/): [java] SuspiciousEqualsMethodName: false positive * java-optimizations * [#1443](https://sourceforge.net/p/pmd/bugs/1443/): [java] RedundantFieldInitializer: False positive for small floats * [#1340](https://sourceforge.net/p/pmd/bugs/1340/): [java] UseStringBufferForStringAppends: False Positive with ternary operator * java-sunsecure * [#1476](https://sourceforge.net/p/pmd/bugs/1476/): [java] ArrayIsStoredDirectly: False positive * [#1475](https://sourceforge.net/p/pmd/bugs/1475/): [java] MethodReturnsInternalArray: False positive * java-unnecessary * [#1464](https://sourceforge.net/p/pmd/bugs/1464/): [java] UnnecessaryFinalModifier: false positive on a @SafeVarargs method * [#1422](https://sourceforge.net/p/pmd/bugs/1422/): [java] UselessQualifiedThis: False positive with Java 8 Function * java-unusedcode * [#1456](https://sourceforge.net/p/pmd/bugs/1456/): [java] UnusedFormalParameter: should ignore overriding methods * [#1484](https://sourceforge.net/p/pmd/bugs/1484/): [java] UnusedLocalVariable: false positive - parenthesis * [#1480](https://sourceforge.net/p/pmd/bugs/1480/): [java] UnusedModifier: false positive on public modifier used with inner interface in enum * [#1428](https://sourceforge.net/p/pmd/bugs/1428/): [java] UnusedPrivateField: False positive when local variable hides member variable hides member variable * General * [#1425](https://sourceforge.net/p/pmd/bugs/1425/): [core] XMLRenderer: Invalid XML Characters in Output * [#1429](https://sourceforge.net/p/pmd/bugs/1429/): [java] Parser Error: Cast in return expression * [#1441](https://sourceforge.net/p/pmd/bugs/1441/): [site] PMD: Update documentation how to compile after modularization * [#1442](https://sourceforge.net/p/pmd/bugs/1442/): [java] PDMASMClassLoader: Java 9 Jigsaw readiness * [#1455](https://sourceforge.net/p/pmd/bugs/1455/): [java] Parser: PMD doesn’t handle Java 8 explicit receiver parameters * [#1458](https://sourceforge.net/p/pmd/bugs/1458/): [xml] Performance degradation scanning large XML files with XPath custom rules * [#1461](https://sourceforge.net/p/pmd/bugs/1461/): [core] RuleSetFactory: Possible threading issue due to PR#75 * [#1470](https://sourceforge.net/p/pmd/bugs/1470/): [java] Parser: Error with type-bound lambda * [#1478](https://sourceforge.net/p/pmd/bugs/1478/): [core] PMD CLI: Use first language as default if Java is not available * [#1481](https://sourceforge.net/p/pmd/bugs/1481/): [core] CPD: no problems found results in blank file instead of empty xml * [#1485](https://sourceforge.net/p/pmd/bugs/1485/): [apex] Analysis of some apex classes cause a stackoverflow error * [#1488](https://sourceforge.net/p/pmd/bugs/1488/): [apex] Windows line endings falsify the location of issues * [#1491](https://sourceforge.net/p/pmd/bugs/1491/): [core] CodeClimateRenderer: corrupt JSON output with real line breaks * [#1492](https://sourceforge.net/p/pmd/bugs/1492/): [core] PMD CLI: IncompatibleClassChangeError when running PMD {% include links.html %}