26-November-2022 - 6.52.0
The PMD team is pleased to announce PMD 6.52.0.
This is a minor release.
New and noteworthy
- The new Java rule
InvalidJavaBeanidentifies beans, that don’t follow the JavaBeans API specification, like beans with missing getters or setters.
The Java rule
BeanMembersShouldSerializehas been renamed to
NonSerializableClass. It has been revamped to only check for classes that are marked with
Serializableand reports each field in it, that is not serializable.
prefixhas been deprecated, since in a serializable class all fields have to be serializable regardless of the name.
ClassNamingConventionshas a new property
testClassPattern, which is applied to test classes. By default, test classes should end with the suffix “Test”. Test classes are top-level classes, that either inherit from JUnit 3 TestCase or have at least one method annotated with the Test annotations from JUnit4/5 or TestNG.
ImmutableFieldhas been deprecated and doesn’t have any effect anymore. Since PMD 6.47.0, the rule only considers fields, that are initialized once and never changed. If the field is just declared but never explicitly initialized, it won’t be reported. That’s the typical case when a framework sets the field value by reflection. Therefore, the property is not needed anymore. If there is a special case where this rule misidentifies fields as immutable, then the rule should be suppressed for these fields explicitly.
- #4215: NullPointerException when trying to open designer
- #4207: [doc] List all languages in rule doc
- #4175: [java] ImmutableField - deprecate property
- #4177: [java] New Rule InvalidJavaBean
- #4188: [java] ClassWithOnlyPrivateConstructorsShouldBeFinal false positive with Lombok’s @NoArgsConstructor
- #4189: [java] AbstractClassWithoutAnyMethod should consider lombok’s @AllArgsConstructor
- #4200: [java] ClassWithOnlyPrivateConstructorsShouldBeFinal should consider lombok’s @Value
- #4175: [java] ImmutableField - deprecate property
- #1668: [java] BeanMembersShouldSerialize is extremely noisy
- #4172: [java] InvalidLogMessageFormat false positive on externally formatted strings
- #4174: [java] MissingStaticMethodInNonInstantiatableClass does not consider nested builder class
- #4176: [java] Rename BeanMembersShouldSerialize to NonSerializableClass
- #4185: [java] InvalidLogMessageFormat rule produces a NPE
- #4224: [java] MissingStaticMethodInNonInstantiatableClass should consider Lombok’s @UtilityClass
- #4225: [java] MissingStaticMethodInNonInstantiatableClass should consider Lombok’s @NoArgsConstructor
- #4183: [java] AvoidArrayLoops regression: from false negative to false positive with final variables
PMD now supports a new
--use-versionflag, which receives a language-version pair (such as
apex-54). This supersedes the usage of
-v, allowing for multiple versions to be set in a single run. PMD 7 will completely remove support for
-versionin favor of this new flag.
-Vis being deprecated in favor of
--verbosein preparation for PMD 7. In PMD 7,
-vwill enable verbose mode and
-Vwill show the PMD version for consistency with most Unix/Linux tools.
-minis being deprecated in favor of
--minimum-priorityfor consistency with most Unix/Linux tools, where
-minwould be equivalent to
-m -i -n.
- CPD now supports using
--diras an alias to
--files, in favor of consistency with PMD. PMD 7 will remove support for
--filesin favor of these new flags.
Linux run.sh parameters
run.sh cpdguiwill now warn about it being deprecated. Use
The old designer (
run.sh designerold) is completely deprecated and will be removed in PMD 7. Switch to the new JavaFX designer:
The old visual AST viewer (
run.sh bgastviewer) is completely deprecated and will be removed in PMD 7. Switch to the new JavaFX designer:
run.sh designerfor a visual tool, or use
run.sh ast-dumpfor a text-based alternative.
- The following core APIs have been marked as deprecated for removal in PMD 7:
PMD.StatusCode- PMD 7 will ship with a revamped CLI split from pmd-core. To programmatically launch analysis you can use
PMDConfiguration#getAllInputPaths- It is now superseded by
PMDConfiguration#setInputPaths- It is now superseded by
PMDConfiguration#addInputPath- It is now superseded by
PMDConfiguration#getInputFilePath- It is now superseded by
PMDConfiguration#getIgnoreFilePath- It is now superseded by
PMDConfiguration#setInputFilePath- It is now superseded by
PMDConfiguration#setIgnoreFilePath- It is now superseded by
PMDConfiguration#getInputUri- It is now superseded by
PMDConfiguration#setInputUri- It is now superseded by
PMDConfiguration#getReportFile- It is now superseded by
PMDConfiguration#setReportFile- It is now superseded by
PMDConfiguration#setStressTest- Will be removed with no replacement.
PMDConfiguration#setBenchmark- Will be removed with no replacement, the CLI will still support it.
CPD.StatusCode- PMD 7 will ship with a revamped CLI split from pmd-core. An alterative to programatically launch CPD analysis will be added in due time.
- In order to reduce the dependency on Apex Jorje classes, the method
DataType#fromBasicTypehas been deprecated. The equivalent method
fromTypeNameshould be used instead.
- #4184: [java][doc] TestClassWithoutTestCases - fix small typo in description - Valery Yatsynovich (@valfirst)
- #4198: [doc] Add supported CPD languages - Jeroen van Wilgenburg (@jvwilge)
- #4202: [java] Fix #4200 and #4201: ClassWithOnlyPrivateConstructorsShouldBeFinal, CommentDefaultAccessModifier: Exclude lombok @Value annotation - Lynn (@LynnBroe)
- #4205: [doc] Clarify Scala support (no built-in rules) - Eldrick Wega (@Eldrick19)
- #4226: [visualforce] Replace uses of Jorje types in pmd-visualforce - Aaron Hurst (@aaronhurst-google)
- #4227: [java] Fix #4225 MissingStaticMethodInNonInstantiatableClass: Exclude lombok’s @NoArgsConstructor annotation - Lynn (@LynnBroe)
- #4228: [java] Fix #4224 MissingStaticMethodInNonInstantiatableClass: Exclude lombok’s UtilityClass - Lynn (@LynnBroe)
- #4232: [doc] Fixing typos - Andreas Deininger (@deining)
- 96 commits
- 40 closed tickets & PRs
- Days since last release: 28