diff --git a/docs/_config.yml b/docs/_config.yml
index 7d821a9e62..f53795d99a 100644
--- a/docs/_config.yml
+++ b/docs/_config.yml
@@ -1,9 +1,9 @@
repository: pmd/pmd
pmd:
- version: 7.1.0
- previous_version: 7.0.0
- date: 26-April-2024
+ version: 7.2.0-SNAPSHOT
+ previous_version: 7.1.0
+ date: 31-May-2024
release_type: minor
# release types: major, minor, bugfix
diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md
index d15a5d50ed..e8d7cdbf90 100644
--- a/docs/pages/release_notes.md
+++ b/docs/pages/release_notes.md
@@ -14,91 +14,11 @@ This is a {{ site.pmd.release_type }} release.
### 🚀 New and noteworthy
-#### More robust CPD reports
-There were a number of circumstances, specially around (but not limited to) literal sequences, were CPD would
-report duplicate overlapping or partially overlapping matches. These have now been fixed, and CPD will report
-only the longest non-overlapping duplicate.
-
-These improvements apply to all supported languages, irrespective of supported flags.
-
-#### ✨ New Rules
-- The new Java rule {%rule java/bestpractices/UnnecessaryVarargsArrayCreation %} reports explicit array creation
- when a varargs is expected. This is more heavy to read and could be simplified.
-- The new Java rule {%rule java/errorprone/ConfusingArgumentToVarargsMethod %} reports some confusing situations
- where a varargs method is called with an inexact argument type. These may end up in a mismatch between the expected
- parameter type and the actual value.
-- The new Java rule {% rule "java/codestyle/LambdaCanBeMethodReference" %} reports lambda expressions that can be replaced
- with a method reference. Please read the documentation of the rule for more info. This rule is now part of the Quickstart
- ruleset.
-
-#### 🌟 Rule Changes
-* {%rule java/bestpractices/JUnitTestsShouldIncludeAssert %} and {% rule java/bestpractices/JUnitTestContainsTooManyAsserts %}
- have a new property named `extraAssertMethodNames`. With this property, you can configure which additional static
- methods should be considered as valid verification methods. This allows to use custom mocking or assertion libraries.
-
### 🐛 Fixed Issues
-* core
- * [#494](https://github.com/pmd/pmd/issues/494): \[core] Adopt JApiCmp to enforce control over API changes
- * [#4942](https://github.com/pmd/pmd/issues/4942): \[core] CPD: `--skip-duplicate-files` has no effect (7.0.0 regression)
- * [#4959](https://github.com/pmd/pmd/pull/4959): \[core] Upgrade saxon to 12.4
-* cli
- * [#4791](https://github.com/pmd/pmd/issues/4791): \[cli] Could not find or load main class
- * [#4913](https://github.com/pmd/pmd/issues/4913): \[cli] cpd-gui closes immediately
-* doc
- * [#4901](https://github.com/pmd/pmd/issues/4901): \[doc] Improve documentation on usage of violationSuppressXPath
-* apex
- * [#4418](https://github.com/pmd/pmd/issues/4418): \[apex] ASTAnnotation.getImage() does not return value as written in the class
-* apex-errorprone
- * [#3953](https://github.com/pmd/pmd/issues/3953): \[apex] EmptyCatchBlock false positive with formal (doc) comments
-* cpp
- * [#2438](https://github.com/pmd/pmd/issues/2438): \[cpp] Repeated Duplication blocks
-* java
- * [#4899](https://github.com/pmd/pmd/issues/4899): \[java] Parsing failed in ParseLock#doParse() java.io.IOException: Stream closed
- * [#4902](https://github.com/pmd/pmd/issues/4902): \[java] "Bad intersection, unrelated class types" for Constable\[] and Enum\[]
- * [#4947](https://github.com/pmd/pmd/issues/4947): \[java] Broken TextBlock parser
-* java-bestpractices
- * [#1084](https://github.com/pmd/pmd/issues/1084): \[java] Allow JUnitTestsShouldIncludeAssert to configure verification methods
- * [#3216](https://github.com/pmd/pmd/issues/3216): \[java] New rule: UnnecessaryVarargsArrayCreation
- * [#4435](https://github.com/pmd/pmd/issues/4435): \[java] \[7.0-rc1] UnusedAssignment for used field
- * [#4569](https://github.com/pmd/pmd/issues/4569): \[java] ForLoopCanBeForeach reports on loop `for (int i = 0; i < list.size(); i += 2)`
- * [#4618](https://github.com/pmd/pmd/issues/4618): \[java] UnusedAssignment false positive with conditional assignments of fields
-* java-codestyle
- * [#4602](https://github.com/pmd/pmd/issues/4602): \[java] UnnecessaryImport: false positives with static imports
- * [#4785](https://github.com/pmd/pmd/issues/4785): \[java] False Positive: PMD Incorrectly report violation for UnnecessaryImport
- * [#4779](https://github.com/pmd/pmd/issues/4779): \[java] Examples in documentation of MethodArgumentCanBeFinal do not trigger the rule
- * [#4881](https://github.com/pmd/pmd/issues/4881): \[java] ClassNamingConventions: interfaces are identified as abstract classes (regression in 7.0.0)
-* java-design
- * [#2440](https://github.com/pmd/pmd/issues/2440): \[java] FinalFieldCouldBeStatic FN when the right side of the assignment is a constant expression
- * [#3694](https://github.com/pmd/pmd/issues/3694): \[java] SingularField ignores static variables
- * [#4873](https://github.com/pmd/pmd/issues/4873): \[java] AvoidCatchingGenericException: Can no longer suppress on the exception itself
-* java-errorprone
- * [#2056](https://github.com/pmd/pmd/issues/2056): \[java] CloseResource false-positive with URLClassLoader in cast expression
- * [#4751](https://github.com/pmd/pmd/issues/4751): \[java] PMD crashes when analyzing CloseResource Rule
- * [#4928](https://github.com/pmd/pmd/issues/4928): \[java] EmptyCatchBlock false negative when allowCommentedBlocks=true
- * [#4948](https://github.com/pmd/pmd/issues/4948): \[java] ImplicitSwitchFallThrough: False-positive with nested switch statements
-* java-performance
- * [#3845](https://github.com/pmd/pmd/issues/3845): \[java] InsufficientStringBufferDeclaration should consider literal expression
- * [#4874](https://github.com/pmd/pmd/issues/4874): \[java] StringInstantiation: False-positive when using `new String(charArray)`
- * [#4886](https://github.com/pmd/pmd/issues/4886): \[java] BigIntegerInstantiation: False Positive with Java 17 and BigDecimal.TWO
-* pom-errorprone
- * [#4388](https://github.com/pmd/pmd/issues/4388): \[pom] InvalidDependencyTypes doesn't consider dependencies at all
-* misc
- * [#4967](https://github.com/pmd/pmd/pull/4967): Fix reproducible build issues with 7.0.0
### 🚨 API Changes
-#### Deprecated methods
-* pmd-java
- * {% jdoc !!java::lang.java.ast.ASTLambdaExpression#getBlock() %} and {% jdoc !!java::lang.java.ast.ASTLambdaExpression#getExpression() %}
- * {% jdoc !!java::lang.java.rule.design.SingularFieldRule#mayBeSingular(java::lang.java.ast.ModifierOwner) %} has been deprecated for
- removal. The method is only useful for the rule itself and shouldn't be used otherwise.
### ✨ External Contributions
-* [#4864](https://github.com/pmd/pmd/pull/4864): Fix #1084 \[Java] add extra assert method names to Junit rules - [Erwan Moutymbo](https://github.com/emouty) (@emouty)
-* [#4894](https://github.com/pmd/pmd/pull/4894): Fix #4791 Error caused by space in JDK path - [Scrates1](https://github.com/Scrates1) (@Scrates1)
-
-### 📈 Stats
-* 205 commits
-* 71 closed tickets & PRs
-* Days since last release: 34
{% endtocmaker %}
+
diff --git a/docs/pages/release_notes_old.md b/docs/pages/release_notes_old.md
index 2fedec6996..b4eaab15bd 100644
--- a/docs/pages/release_notes_old.md
+++ b/docs/pages/release_notes_old.md
@@ -5,6 +5,113 @@ permalink: pmd_release_notes_old.html
Previous versions of PMD can be downloaded here: [Releases - pmd/pmd (GitHub)](https://github.com/pmd/pmd/releases)
+## 26-April-2024 - 7.1.0
+
+The PMD team is pleased to announce PMD 7.1.0.
+
+This is a minor release.
+
+### Table Of Contents
+
+* [🚀 New and noteworthy](#new-and-noteworthy)
+ * [More robust CPD reports](#more-robust-cpd-reports)
+ * [✨ New Rules](#new-rules)
+ * [🌟 Rule Changes](#rule-changes)
+* [🐛 Fixed Issues](#fixed-issues)
+* [🚨 API Changes](#api-changes)
+ * [Deprecated methods](#deprecated-methods)
+* [✨ External Contributions](#external-contributions)
+* [📈 Stats](#stats)
+
+### 🚀 New and noteworthy
+
+#### More robust CPD reports
+There were a number of circumstances, specially around (but not limited to) literal sequences, were CPD would
+report duplicate overlapping or partially overlapping matches. These have now been fixed, and CPD will report
+only the longest non-overlapping duplicate.
+
+These improvements apply to all supported languages, irrespective of supported flags.
+
+#### ✨ New Rules
+- The new Java rule [`UnnecessaryVarargsArrayCreation`](https://docs.pmd-code.org/pmd-doc-7.1.0/pmd_rules_java_bestpractices.html#unnecessaryvarargsarraycreation) reports explicit array creation
+ when a varargs is expected. This is more heavy to read and could be simplified.
+- The new Java rule [`ConfusingArgumentToVarargsMethod`](https://docs.pmd-code.org/pmd-doc-7.1.0/pmd_rules_java_errorprone.html#confusingargumenttovarargsmethod) reports some confusing situations
+ where a varargs method is called with an inexact argument type. These may end up in a mismatch between the expected
+ parameter type and the actual value.
+- The new Java rule [`LambdaCanBeMethodReference`](https://docs.pmd-code.org/pmd-doc-7.1.0/pmd_rules_java_codestyle.html#lambdacanbemethodreference) reports lambda expressions that can be replaced
+ with a method reference. Please read the documentation of the rule for more info. This rule is now part of the Quickstart
+ ruleset.
+
+#### 🌟 Rule Changes
+* [`JUnitTestsShouldIncludeAssert`](https://docs.pmd-code.org/pmd-doc-7.1.0/pmd_rules_java_bestpractices.html#junittestsshouldincludeassert) and [`JUnitTestContainsTooManyAsserts`](https://docs.pmd-code.org/pmd-doc-7.1.0/pmd_rules_java_bestpractices.html#junittestcontainstoomanyasserts)
+ have a new property named `extraAssertMethodNames`. With this property, you can configure which additional static
+ methods should be considered as valid verification methods. This allows to use custom mocking or assertion libraries.
+
+### 🐛 Fixed Issues
+* core
+ * [#494](https://github.com/pmd/pmd/issues/494): \[core] Adopt JApiCmp to enforce control over API changes
+ * [#4942](https://github.com/pmd/pmd/issues/4942): \[core] CPD: `--skip-duplicate-files` has no effect (7.0.0 regression)
+ * [#4959](https://github.com/pmd/pmd/pull/4959): \[core] Upgrade saxon to 12.4
+* cli
+ * [#4791](https://github.com/pmd/pmd/issues/4791): \[cli] Could not find or load main class
+ * [#4913](https://github.com/pmd/pmd/issues/4913): \[cli] cpd-gui closes immediately
+* doc
+ * [#4901](https://github.com/pmd/pmd/issues/4901): \[doc] Improve documentation on usage of violationSuppressXPath
+* apex
+ * [#4418](https://github.com/pmd/pmd/issues/4418): \[apex] ASTAnnotation.getImage() does not return value as written in the class
+* apex-errorprone
+ * [#3953](https://github.com/pmd/pmd/issues/3953): \[apex] EmptyCatchBlock false positive with formal (doc) comments
+* cpp
+ * [#2438](https://github.com/pmd/pmd/issues/2438): \[cpp] Repeated Duplication blocks
+* java
+ * [#4899](https://github.com/pmd/pmd/issues/4899): \[java] Parsing failed in ParseLock#doParse() java.io.IOException: Stream closed
+ * [#4902](https://github.com/pmd/pmd/issues/4902): \[java] "Bad intersection, unrelated class types" for Constable\[] and Enum\[]
+ * [#4947](https://github.com/pmd/pmd/issues/4947): \[java] Broken TextBlock parser
+* java-bestpractices
+ * [#1084](https://github.com/pmd/pmd/issues/1084): \[java] Allow JUnitTestsShouldIncludeAssert to configure verification methods
+ * [#3216](https://github.com/pmd/pmd/issues/3216): \[java] New rule: UnnecessaryVarargsArrayCreation
+ * [#4435](https://github.com/pmd/pmd/issues/4435): \[java] \[7.0-rc1] UnusedAssignment for used field
+ * [#4569](https://github.com/pmd/pmd/issues/4569): \[java] ForLoopCanBeForeach reports on loop `for (int i = 0; i < list.size(); i += 2)`
+ * [#4618](https://github.com/pmd/pmd/issues/4618): \[java] UnusedAssignment false positive with conditional assignments of fields
+* java-codestyle
+ * [#4602](https://github.com/pmd/pmd/issues/4602): \[java] UnnecessaryImport: false positives with static imports
+ * [#4785](https://github.com/pmd/pmd/issues/4785): \[java] False Positive: PMD Incorrectly report violation for UnnecessaryImport
+ * [#4779](https://github.com/pmd/pmd/issues/4779): \[java] Examples in documentation of MethodArgumentCanBeFinal do not trigger the rule
+ * [#4881](https://github.com/pmd/pmd/issues/4881): \[java] ClassNamingConventions: interfaces are identified as abstract classes (regression in 7.0.0)
+* java-design
+ * [#2440](https://github.com/pmd/pmd/issues/2440): \[java] FinalFieldCouldBeStatic FN when the right side of the assignment is a constant expression
+ * [#3694](https://github.com/pmd/pmd/issues/3694): \[java] SingularField ignores static variables
+ * [#4873](https://github.com/pmd/pmd/issues/4873): \[java] AvoidCatchingGenericException: Can no longer suppress on the exception itself
+* java-errorprone
+ * [#2056](https://github.com/pmd/pmd/issues/2056): \[java] CloseResource false-positive with URLClassLoader in cast expression
+ * [#4751](https://github.com/pmd/pmd/issues/4751): \[java] PMD crashes when analyzing CloseResource Rule
+ * [#4928](https://github.com/pmd/pmd/issues/4928): \[java] EmptyCatchBlock false negative when allowCommentedBlocks=true
+ * [#4948](https://github.com/pmd/pmd/issues/4948): \[java] ImplicitSwitchFallThrough: False-positive with nested switch statements
+* java-performance
+ * [#3845](https://github.com/pmd/pmd/issues/3845): \[java] InsufficientStringBufferDeclaration should consider literal expression
+ * [#4874](https://github.com/pmd/pmd/issues/4874): \[java] StringInstantiation: False-positive when using `new String(charArray)`
+ * [#4886](https://github.com/pmd/pmd/issues/4886): \[java] BigIntegerInstantiation: False Positive with Java 17 and BigDecimal.TWO
+* pom-errorprone
+ * [#4388](https://github.com/pmd/pmd/issues/4388): \[pom] InvalidDependencyTypes doesn't consider dependencies at all
+* misc
+ * [#4967](https://github.com/pmd/pmd/pull/4967): Fix reproducible build issues with 7.0.0
+
+### 🚨 API Changes
+#### Deprecated methods
+* pmd-java
+ * ASTLambdaExpression#getBlock
and ASTLambdaExpression#getExpression
+ * SingularFieldRule#mayBeSingular
has been deprecated for
+ removal. The method is only useful for the rule itself and shouldn't be used otherwise.
+
+### ✨ External Contributions
+* [#4864](https://github.com/pmd/pmd/pull/4864): Fix #1084 \[Java] add extra assert method names to Junit rules - [Erwan Moutymbo](https://github.com/emouty) (@emouty)
+* [#4894](https://github.com/pmd/pmd/pull/4894): Fix #4791 Error caused by space in JDK path - [Scrates1](https://github.com/Scrates1) (@Scrates1)
+
+### 📈 Stats
+* 205 commits
+* 71 closed tickets & PRs
+* Days since last release: 34
+
## 22-March-2024 - 7.0.0
diff --git a/docs/pages/release_notes_pmd7.md b/docs/pages/release_notes_pmd7.md
index 3b7f58f544..8b13789179 100644
--- a/docs/pages/release_notes_pmd7.md
+++ b/docs/pages/release_notes_pmd7.md
@@ -1,3545 +1 @@
----
-title: Detailed Release Notes for PMD 7
-summary: "These are the detailed release notes for PMD 7."
-permalink: pmd_release_notes_pmd7.html
-keywords: changelog, release notes
----
-## 🚀 Major Features and Enhancements
-
-### New official logo
-
-Many of you probably have already seen the new logo, but now it's time to actually ship it. The new logo
-was long ago decided (see [#1663](https://github.com/pmd/pmd/issues/1663)).
-
-We decided it's time to have a modernized logo and get rid of the gun. This allows to include
-the logo anywhere without offense.
-
-The official logo is also without a tagline (such as "Code Quality Matters!") as the tagline created some
-controversies. Without a tagline, we are not limited in the direction of future development of PMD.
-
-
-
-The new logo is available from the [Logo Project Page](pmd_projectdocs_logo.html).
-
-### Revamped Java
-
-The Java grammar has been refactored substantially in order to make it easier to maintain and more correct
-regarding the Java Language Specification. It supports now also the edge-cases where PMD 6 was failing
-(e.g. annotations were not supported everywhere). Changing the grammar entails a changed AST and therefore changed
-rules. The PMD built-in rules have all been upgraded and many bugs have been fixed on the way.
-Unfortunately, if you are using custom rules, you will most probably need to accommodate these changes yourself.
-
-The type resolution framework has been rewritten from scratch and should now cover the entire Java spec correctly.
-The same is true for the symbol table.
-PMD 6 on the other hand has always had problems with advanced type inference, e.g. with lambdas and call chains.
-Since it was built on the core reflection API, it also was prone to linkage errors and classloader leaks for instance.
-PMD 7 does not need to load classes, and does not have these problems.
-
-The AST exposes much more semantic information now. For instance, you can jump from a method call to
-the declaration of the method being called, or from a field access to the field declaration. These
-improvements allow interesting rules to be written that need precise knowledge of the types
-in the program, for instance to detect [`UnnecessaryBoxing`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#unnecessaryboxing)
-or [`UseDiamondOperator`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#usediamondoperator).
-These are just a small preview of the new rules we will be adding in the PMD 7 release cycle.
-
-Overall, the changes to the parser, AST, type resolution and symbol table code has made PMD for
-Java **significantly faster**. On average, we have seen ~2-3X faster analysis, but as usual, this may change
-depending on your workload, configuration and ruleset.
-
-Contributors: [Clément Fournier](https://github.com/oowekyala) (@oowekyala),
-[Andreas Dangel](https://github.com/adangel) (@adangel),
-[Juan Martín Sotuyo Dodero](https://github.com/jsotuyod) (@jsotuyod)
-
-
PropertyFactory
to create properties.
-* All properties which accept multiple values now use a comma (`,`) as a delimiter. The previous default was a
- pipe character (`|`). The delimiter is not configurable anymore. If needed, the comma can be escaped
- with a backslash.
-* The `min` and `max` attributes in property definitions in the XML are now optional and can appear separately
- or be omitted.
-
-### Changed: Velocity Template Language (VTL)
-
-The module was named just "vm" which was not a good name. Its module name, language id and
-package names have been renamed to "velocity".
-
-If you import rules, you also need to adjust the paths, e.g.
-
-* `category/vm/...` ➡️ `category/velocity/...`
-
-### Changed: Visualforce
-
-There was an inconsistency between the naming of the maven module and the language id. The language id
-used the abbreviation "vf", while the maven module used the longer name "visualforce". This has been
-solved by renaming the language module to its full name "visualforce". The java packages have
-been renamed as well.
-
-If you import rules, you also need to adjust the paths, e.g.
-
-* `category/vf/security.xml` ➡️ `category/visualforce/security.xml`
-
-## 🌟 New and changed rules
-
-### New Rules
-
-**Apex**
-* [`OperationWithHighCostInLoop`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_apex_performance.html#operationwithhighcostinloop) finds Schema class methods called in a loop, which is a
- potential performance issue.
-* [`UnusedMethod`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_apex_design.html#unusedmethod) finds unused methods in your code.
-
-**Java**
-* [`UnnecessaryBoxing`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#unnecessaryboxing) reports boxing and unboxing conversions that may be made implicit.
-* [`UseExplicitTypes`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#useexplicittypes) reports usages of `var` keyword, which was introduced with Java 10.
-
-**Kotlin**
-* [`FunctionNameTooShort`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_kotlin_bestpractices.html#functionnametooshort) finds functions with a too short name.
-* [`OverrideBothEqualsAndHashcode`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_kotlin_errorprone.html#overridebothequalsandhashcode) finds classes with only
- either `equals` or `hashCode` overridden, but not both. This leads to unexpected behavior once instances
- of such classes are used in collections (Lists, HashMaps, ...).
-
-**Swift**
-* [`ForceCast`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_swift_errorprone.html#forcecast) flags all force casts, making sure you are
- defensively considering all types. Having the application crash shouldn't be an option.
-* [`ForceTry`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_swift_errorprone.html#forcetry) flags all force tries, making sure you are
- defensively handling exceptions. Having the application crash shouldn't be an option.
-* [`ProhibitedInterfaceBuilder`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_swift_bestpractices.html#prohibitedinterfacebuilder) flags any usage of interface
- builder. Interface builder files are prone to merge conflicts, and are impossible to code review, so larger
- teams usually try to avoid it or reduce its usage.
-* [`UnavailableFunction`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_swift_bestpractices.html#unavailablefunction) flags any function throwing
- a `fatalError` not marked as `@available(*, unavailable)` to ensure no calls are actually performed in
- the codebase.
-
-**XML**
-* [`MissingEncoding`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_xml_bestpractices.html#missingencoding) finds XML files without explicit encoding.
-
-### Changed Rules
-
-**General changes**
-
-* All statistical rules (like ExcessiveClassLength, ExcessiveParameterList) have been simplified and unified.
- The properties `topscore` and `sigma` have been removed. The property `minimum` is still there, however the type is not
- a decimal number anymore but has been changed to an integer. This affects rules in the languages Apex, Java, PLSQL
- and Velocity Template Language (velocity):
- * Apex: [`ExcessiveClassLength`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_apex_design.html#excessiveclasslength), [`ExcessiveParameterList`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_apex_design.html#excessiveparameterlist),
- [`ExcessivePublicCount`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_apex_design.html#excessivepubliccount), [`NcssConstructorCount`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_apex_design.html#ncssconstructorcount),
- [`NcssMethodCount`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_apex_design.html#ncssmethodcount), [`NcssTypeCount`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_apex_design.html#ncsstypecount)
- * Java: [`ExcessiveImports`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_design.html#excessiveimports), [`ExcessiveParameterList`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_design.html#excessiveparameterlist),
- [`ExcessivePublicCount`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_design.html#excessivepubliccount), [`SwitchDensity`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_design.html#switchdensity)
- * PLSQL: [`ExcessiveMethodLength`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_plsql_design.html#excessivemethodlength), [`ExcessiveObjectLength`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_plsql_design.html#excessiveobjectlength),
- [`ExcessivePackageBodyLength`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_plsql_design.html#excessivepackagebodylength), [`ExcessivePackageSpecificationLength`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_plsql_design.html#excessivepackagespecificationlength),
- [`ExcessiveParameterList`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_plsql_design.html#excessiveparameterlist), [`ExcessiveTypeLength`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_plsql_design.html#excessivetypelength),
- [`NcssMethodCount`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_plsql_design.html#ncssmethodcount), [`NcssObjectCount`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_plsql_design.html#ncssobjectcount),
- [`NPathComplexity`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_plsql_design.html#npathcomplexity)
- * Velocity: [`ExcessiveTemplateLength`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_velocity_design.html#excessivetemplatelength)
-
-* The general property `violationSuppressXPath` which is available for all rules to
- [suppress warnings](pmd_userdocs_suppressing_warnings.html) now uses XPath version 3.1 by default.
- This version of the XPath language is mostly identical to XPath 2.0. In PMD 6, XPath 1.0 has been used.
- If you upgrade from PMD 6, you need to verify your `violationSuppressXPath` properties.
-
-**Apex General changes**
-
-* The properties `cc_categories`, `cc_remediation_points_multiplier`, `cc_block_highlighting` have been removed
- from all rules. These properties have been deprecated since PMD 6.13.0.
- See [issue #1648](https://github.com/pmd/pmd/issues/1648) for more details.
-
-**Apex Codestyle**
-
-* [`MethodNamingConventions`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_apex_codestyle.html#methodnamingconventions): The deprecated rule property `skipTestMethodUnderscores` has
- been removed. It was actually deprecated since PMD 6.15.0, but was not mentioned in the release notes
- back then. Use the property `testPattern` instead to configure valid names for test methods.
-
-**Java General changes**
-
-* Violations reported on methods or classes previously reported the line range of the entire method
- or class. With PMD 7.0.0, the reported location is now just the identifier of the method or class.
- This affects various rules, e.g. [`CognitiveComplexity`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_design.html#cognitivecomplexity).
-
- The report location is controlled by the overrides of the method Node#getReportLocation
- in different node types.
-
- See [issue #4439](https://github.com/pmd/pmd/issues/4439) and [issue #730](https://github.com/pmd/pmd/issues/730)
- for more details.
-
-**Java Best Practices**
-
-* [`ArrayIsStoredDirectly`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_bestpractices.html#arrayisstoreddirectly): Violations are now reported on the assignment and not
- anymore on the formal parameter. The reported line numbers will probably move.
-* [`AvoidReassigningLoopVariables`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_bestpractices.html#avoidreassigningloopvariables): This rule might not report anymore all
- reassignments of the control variable in for-loops when the property `forReassign` is set to `skip`.
- See [issue #4500](https://github.com/pmd/pmd/issues/4500) for more details.
-* [`LooseCoupling`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_bestpractices.html#loosecoupling): The rule has a new property to allow some types to be coupled
- to (`allowedTypes`).
-* [`UnusedLocalVariable`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_bestpractices.html#unusedlocalvariable): This rule has some important false-negatives fixed
- and finds many more cases now. For details see issues [#2130](https://github.com/pmd/pmd/issues/2130),
- [#4516](https://github.com/pmd/pmd/issues/4516), and [#4517](https://github.com/pmd/pmd/issues/4517).
-
-**Java Codestyle**
-
-* [`MethodNamingConventions`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#methodnamingconventions): The property `checkNativeMethods` has been removed. The
- property was deprecated since PMD 6.3.0. Use the property `nativePattern` to control whether native methods
- should be considered or not.
-* [`ShortVariable`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#shortvariable): This rule now also reports short enum constant names.
-* [`UseDiamondOperator`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#usediamondoperator): The property `java7Compatibility` has been removed. The rule now
- handles Java 7 properly without a property.
-* [`UnnecessaryFullyQualifiedName`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname): The rule has two new properties,
- to selectively disable reporting on static field and method qualifiers. The rule also has been improved
- to be more precise.
-* [`UselessParentheses`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#uselessparentheses): The rule has two new properties which control how strict
- the rule should be applied. With `ignoreClarifying` (default: true) parentheses that are strictly speaking
- not necessary are allowed, if they separate expressions of different precedence.
- The other property `ignoreBalancing` (default: true) is similar, in that it allows parentheses that help
- reading and understanding the expressions.
-* [`EmptyControlStatement`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#emptycontrolstatement): The rule has a new property to allow empty blocks when
- they contain a comment (`allowCommentedBlocks`).
-
-**Java Design**
-
-* [`CyclomaticComplexity`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_design.html#cyclomaticcomplexity): The property `reportLevel` has been removed. The property was
- deprecated since PMD 6.0.0. The report level can now be configured separated for classes and methods using
- `classReportLevel` and `methodReportLevel` instead.
-* [`ImmutableField`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_design.html#immutablefield): The property `ignoredAnnotations` has been removed. The property was
- deprecated since PMD 6.52.0.
-* [`LawOfDemeter`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_design.html#lawofdemeter): The rule has a new property `trustRadius`. This defines the maximum degree
- of trusted data. The default of 1 is the most restrictive.
-* [`NPathComplexity`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_design.html#npathcomplexity): The property `minimum` has been removed. It was deprecated since PMD 6.0.0.
- Use the property `reportLevel` instead.
-* [`SingularField`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_design.html#singularfield): The properties `checkInnerClasses` and `disallowNotAssignment` have been removed.
- The rule is now more precise and will check these cases properly.
-* [`UseUtilityClass`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_design.html#useutilityclass): The property `ignoredAnnotations` has been removed.
-
-**Java Documentation**
-
-* [`CommentContent`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_documentation.html#commentcontent): The properties `caseSensitive` and `disallowedTerms` are removed. The
- new property `forbiddenRegex` can be used now to define the disallowed terms with a single regular
- expression.
-* [`CommentRequired`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_documentation.html#commentrequired):
- * Overridden methods are now detected even without the `@Override`
- annotation. This is relevant for the property `methodWithOverrideCommentRequirement`.
- See also [pull request #3757](https://github.com/pmd/pmd/pull/3757).
- * Elements in annotation types are now detected as well. This might lead to an increased number of violations
- for missing public method comments.
- * The deprecated property `headerCommentRequirement` has been removed. Use the property `classCommentRequirement`
- instead.
-* [`CommentSize`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_documentation.html#commentsize): When determining the line-length of a comment, the leading comment
- prefix markers (e.g. `*` or `//`) are ignored and don't add up to the line-length.
- See also [pull request #4369](https://github.com/pmd/pmd/pull/4369).
-
-**Java Error Prone**
-
-* [`AvoidDuplicateLiterals`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_errorprone.html#avoidduplicateliterals): The property `exceptionfile` has been removed. The property was
- deprecated since PMD 6.10.0. Use the property `exceptionList` instead.
-* [`DontImportSun`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_errorprone.html#dontimportsun): `sun.misc.Signal` is not special-cased anymore.
-* [`EmptyCatchBlock`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_errorprone.html#emptycatchblock): `CloneNotSupportedException` and `InterruptedException` are not
- special-cased anymore. Rename the exception parameter to `ignored` to ignore them.
-* [`ImplicitSwitchFallThrough`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_errorprone.html#implicitswitchfallthrough): Violations are now reported on the case statements
- rather than on the switch statements. This is more accurate but might result in more violations now.
-* [`NonSerializableClass`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_errorprone.html#nonserializableclass): The deprecated property `prefix` has been removed
- without replacement. In a serializable class all fields have to be serializable regardless of the name.
-
-### Deprecated Rules
-
-In PMD 7.0.0, there are no deprecated rules.
-
-### Removed Rules
-
-The following previously deprecated rules have been finally removed:
-
-**Apex**
-
-* performance.xml/AvoidSoqlInLoops (deleted) ➡️ use [`OperationWithLimitsInLoop`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_apex_performance.html#operationwithlimitsinloop)
-* performance.xml/AvoidSoslInLoops (deleted) ➡️ use [`OperationWithLimitsInLoop`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_apex_performance.html#operationwithlimitsinloop)
-* performance.xml/AvoidDmlStatementsInLoops (deleted) ➡️ use [`OperationWithLimitsInLoop`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_apex_performance.html#operationwithlimitsinloop)
-* codestyle.xml/VariableNamingConventions (deleted) ➡️ use [`FieldNamingConventions`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_apex_codestyle.html#fieldnamingconventions),
- [`FormalParameterNamingConventions`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_apex_codestyle.html#formalparameternamingconventions), [`LocalVariableNamingConventions`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_apex_codestyle.html#localvariablenamingconventions),
- or [`PropertyNamingConventions`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_apex_codestyle.html#propertynamingconventions)
-* security.xml/ApexCSRF (deleted) ➡️ use [`ApexCSRF`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_apex_errorprone.html#apexcsrf)
-
-**Java**
-
-* codestyle.xml/AbstractNaming (deleted) ➡️ use [`ClassNamingConventions`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#classnamingconventions)
-* codestyle.xml/AvoidFinalLocalVariable (deleted) ➡️ not replaced
-* codestyle.xml/AvoidPrefixingMethodParameters (deleted) ➡️ use [`FormalParameterNamingConventions`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#formalparameternamingconventions)
-* performance.xml/AvoidUsingShortType (deleted) ➡️ not replaced
-* errorprone.xml/BadComparison (deleted) ➡️ use [`ComparisonWithNaN`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_errorprone.html#comparisonwithnan)
-* errorprone.xml/BeanMembersShouldSerialize (deleted) ➡️ use [`NonSerializableClass`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_errorprone.html#nonserializableclass)
-* performance.xml/BooleanInstantiation (deleted) ➡️ use [`UnnecessaryBoxing`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#unnecessaryboxing)
- and [`PrimitiveWrapperInstantiation`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_bestpractices.html#primitivewrapperinstantiation)
-* performance.xml/ByteInstantiation (deleted) ➡️ use [`UnnecessaryBoxing`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#unnecessaryboxing)
- and [`PrimitiveWrapperInstantiation`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_bestpractices.html#primitivewrapperinstantiation)
-* errorprone.xml/CloneThrowsCloneNotSupportedException (deleted) ➡️ not replaced
-* errorprone.xml/DataflowAnomalyAnalysis (deleted) ➡️ use [`UnusedAssignment`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_bestpractices.html#unusedassignment)
-* codestyle.xml/DefaultPackage (deleted) ➡️ use [`CommentDefaultAccessModifier`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#commentdefaultaccessmodifier)
-* errorprone.xml/DoNotCallSystemExit (deleted) ➡️ use [`DoNotTerminateVM`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_errorprone.html#donotterminatevm)
-* codestyle.xml/DontImportJavaLang (deleted) ➡️ use [`UnnecessaryImport`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#unnecessaryimport)
-* codestyle.xml/DuplicateImports (deleted) ➡️ use [`UnnecessaryImport`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#unnecessaryimport)
-* errorprone.xml/EmptyFinallyBlock (deleted) ➡️ use [`EmptyControlStatement`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#emptycontrolstatement)
-* errorprone.xml/EmptyIfStmt (deleted) ➡️ use [`EmptyControlStatement`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#emptycontrolstatement)
-* errorprone.xml/EmptyInitializer (deleted) ➡️ use [`EmptyControlStatement`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#emptycontrolstatement)
-* errorprone.xml/EmptyStatementBlock (deleted) ➡️ use [`EmptyControlStatement`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#emptycontrolstatement)
-* errorprone.xml/EmptyStatementNotInLoop (deleted) ➡️ use [`UnnecessarySemicolon`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#unnecessarysemicolon)
-* errorprone.xml/EmptySwitchStatements (deleted) ➡️ use [`EmptyControlStatement`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#emptycontrolstatement)
-* errorprone.xml/EmptySynchronizedBlock (deleted) ➡️ use [`EmptyControlStatement`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#emptycontrolstatement)
-* errorprone.xml/EmptyTryBlock (deleted) ➡️ use [`EmptyControlStatement`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#emptycontrolstatement)
-* errorprone.xml/EmptyWhileStmt (deleted) ➡️ use [`EmptyControlStatement`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#emptycontrolstatement)
-* design.xml/ExcessiveClassLength (deleted) ➡️ use [`NcssCount`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_design.html#ncsscount)
-* design.xml/ExcessiveMethodLength (deleted) ➡️ use [`NcssCount`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_design.html#ncsscount)
-* codestyle.xml/ForLoopsMustUseBraces (deleted) ➡️ use [`ControlStatementBraces`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#controlstatementbraces)
-* codestyle.xml/IfElseStmtsMustUseBraces (deleted) ➡️ use [`ControlStatementBraces`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#controlstatementbraces)
-* codestyle.xml/IfStmtsMustUseBraces (deleted) ➡️ use [`ControlStatementBraces`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#controlstatementbraces)
-* errorprone.xml/ImportFromSamePackage (deleted) ➡️ use [`UnnecessaryImport`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#unnecessaryimport)
-* performance.xml/IntegerInstantiation (deleted) ➡️ use [`UnnecessaryBoxing`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#unnecessaryboxing)
- and [`PrimitiveWrapperInstantiation`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_bestpractices.html#primitivewrapperinstantiation)
-* errorprone.xml/InvalidSlf4jMessageFormat (deleted) ➡️ use [`InvalidLogMessageFormat`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_errorprone.html#invalidlogmessageformat)
-* errorprone.xml/LoggerIsNotStaticFinal (deleted) ➡️ use [`ProperLogger`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_errorprone.html#properlogger)
-* performance.xml/LongInstantiation (deleted) ➡️ use [`UnnecessaryBoxing`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#unnecessaryboxing)
- and [`PrimitiveWrapperInstantiation`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_bestpractices.html#primitivewrapperinstantiation)
-* codestyle.xml/MIsLeadingVariableName (deleted) ➡️ use [`FieldNamingConventions`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#fieldnamingconventions),
- [`FormalParameterNamingConventions`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#formalparameternamingconventions),
- or [`LocalVariableNamingConventions`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#localvariablenamingconventions)
-* errorprone.xml/MissingBreakInSwitch (deleted) ➡️ use [`ImplicitSwitchFallThrough`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_errorprone.html#implicitswitchfallthrough)
-* design.xml/ModifiedCyclomaticComplexity (deleted) ➡️ use [`CyclomaticComplexity`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_design.html#cyclomaticcomplexity)
-* design.xml/NcssConstructorCount (deleted) ➡️ use [`NcssCount`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_design.html#ncsscount)
-* design.xml/NcssMethodCount (deleted) ➡️ use [`NcssCount`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_design.html#ncsscount)
-* design.xml/NcssTypeCount (deleted) ➡️ use [`NcssCount`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_design.html#ncsscount)
-* bestpractices.xml/PositionLiteralsFirstInCaseInsensitiveComparisons (deleted) ➡️
- use [`LiteralsFirstInComparisons`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_bestpractices.html#literalsfirstincomparisons)
-* bestpractices.xml/PositionLiteralsFirstInComparisons (deleted) ➡️
- use [`LiteralsFirstInComparisons`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_bestpractices.html#literalsfirstincomparisons)
-* errorprone.xml/ReturnEmptyArrayRatherThanNull (deleted) ➡️
- use [`ReturnEmptyCollectionRatherThanNull`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_errorprone.html#returnemptycollectionratherthannull)
-* performance.xml/ShortInstantiation (deleted) ➡️ use [`UnnecessaryBoxing`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#unnecessaryboxing)
- and [`PrimitiveWrapperInstantiation`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_bestpractices.html#primitivewrapperinstantiation)
-* design.xml/SimplifyBooleanAssertion (deleted) ➡️ use [`SimplifiableTestAssertion`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_bestpractices.html#simplifiabletestassertion)
-* performance.xml/SimplifyStartsWith (deleted) ➡️ not replaced
-* design.xml/StdCyclomaticComplexity (deleted) ➡️ use [`CyclomaticComplexity`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_design.html#cyclomaticcomplexity)
-* codestyle.xml/SuspiciousConstantFieldName (deleted) ➡️ use [`FieldNamingConventions`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#fieldnamingconventions)
-* performance.xml/UnnecessaryWrapperObjectCreation (deleted) ➡️ use the new rule [`UnnecessaryBoxing`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#unnecessaryboxing)
-* multithreading.xml/UnsynchronizedStaticDateFormatter (deleted) ➡️ use [`UnsynchronizedStaticFormatter`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_multithreading.html#unsynchronizedstaticformatter)
-* bestpractices.xml/UnusedImports (deleted) ➡️ use [`UnnecessaryImport`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#unnecessaryimport)
-* bestpractices.xml/UseAssertEqualsInsteadOfAssertTrue (deleted) ➡️ use [`SimplifiableTestAssertion`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_bestpractices.html#simplifiabletestassertion)
-* bestpractices.xml/UseAssertNullInsteadOfAssertEquals (deleted) ➡️ use [`SimplifiableTestAssertion`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_bestpractices.html#simplifiabletestassertion)
-* bestpractices.xml/UseAssertSameInsteadOfAssertEquals (deleted) ➡️ use [`SimplifiableTestAssertion`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_bestpractices.html#simplifiabletestassertion)
-* bestpractices.xml/UseAssertTrueInsteadOfAssertEquals (deleted) ➡️ use [`SimplifiableTestAssertion`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_bestpractices.html#simplifiabletestassertion)
-* codestyle.xml/VariableNamingConventions (deleted) ➡️ use [`FieldNamingConventions`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#fieldnamingconventions),
- [`FormalParameterNamingConventions`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#formalparameternamingconventions), or [`LocalVariableNamingConventions`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#localvariablenamingconventions)
-* codestyle.xml/WhileLoopsMustUseBraces (deleted) ➡️ use [`ControlStatementBraces`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_java_codestyle.html#controlstatementbraces)
-
-### Removed rulesets
-
-The following previously deprecated rulesets have been removed. These were the left-over rulesets from PMD 5.
-The rules have been moved into categories with PMD 6.
-
-* rulesets/apex/apexunit.xml
-* rulesets/apex/braces.xml
-* rulesets/apex/complexity.xml
-* rulesets/apex/empty.xml
-* rulesets/apex/metrics.xml
-* rulesets/apex/performance.xml
-* rulesets/apex/ruleset.xml
-* rulesets/apex/securty.xml
-* rulesets/apex/style.xml
-* rulesets/java/android.xml
-* rulesets/java/basic.xml
-* rulesets/java/clone.xml
-* rulesets/java/codesize.xml
-* rulesets/java/comments.xml
-* rulesets/java/controversial.xml
-* rulesets/java/coupling.xml
-* rulesets/java/design.xml
-* rulesets/java/empty.xml
-* rulesets/java/finalizers.xml
-* rulesets/java/imports.xml
-* rulesets/java/j2ee.xml
-* rulesets/java/javabeans.xml
-* rulesets/java/junit.xml
-* rulesets/java/logging-jakarta-commons.xml
-* rulesets/java/logging-java.xml
-* rulesets/java/metrics.xml
-* rulesets/java/migrating.xml
-* rulesets/java/migrating_to_13.xml
-* rulesets/java/migrating_to_14.xml
-* rulesets/java/migrating_to_15.xml
-* rulesets/java/migrating_to_junit4.xml
-* rulesets/java/naming.xml
-* rulesets/java/optimizations.xml
-* rulesets/java/strictexception.xml
-* rulesets/java/strings.xml
-* rulesets/java/sunsecure.xml
-* rulesets/java/typeresolution.xml
-* rulesets/java/unnecessary.xml
-* rulesets/java/unusedcode.xml
-* rulesets/ecmascript/basic.xml
-* rulesets/ecmascript/braces.xml
-* rulesets/ecmascript/controversial.xml
-* rulesets/ecmascript/unnecessary.xml
-* rulesets/jsp/basic.xml
-* rulesets/jsp/basic-jsf.xml
-* rulesets/plsql/codesize.xml
-* rulesets/plsql/dates.xml
-* rulesets/plsql/strictsyntax.xml
-* rulesets/plsql/TomKytesDespair.xml
-* rulesets/vf/security.xml
-* rulesets/vm/basic.xml
-* rulesets/pom/basic.xml
-* rulesets/xml/basic.xml
-* rulesets/xsl/xpath.xml
-* rulesets/releases/*
-
-## 💥 Compatibility and Migration Notes
-
-AbstractRule#buildTargetSelector
- using RuleTargetSelector#forTypes
.
-* The asset filenames of PMD on [GitHub Releases](https://github.com/pmd/pmd/releases) are
- now `pmd-dist-PMD
is gone.
-
-## 🚨 API
-
-The API of PMD has been growing over the years and needed some cleanup. The goal is, to
-have a clear separation between a well-defined API and the implementation, which is internal.
-This should help us in future development.
-
-This however entails some incompatibilities and deprecations.
-
-See [ADR 3 - API evolution principles](pmd_projectdocs_decisions_adr_3.html) and
-[API changes](#api-changes) below.
-
-### Small Changes and cleanups
-
-* [#1648](https://github.com/pmd/pmd/issues/1648): \[apex,vf] Remove CodeClimate dependency - [Robert Sösemann](https://github.com/rsoesemann)
- Properties "cc_categories", "cc_remediation_points_multiplier", "cc_block_highlighting" can no longer be overridden in rulesets.
- They were deprecated without replacement.
-
-* The old GUI applications accessible through `run.sh designerold` and `run.sh bgastviewer`
- (and corresponding Batch scripts) have been removed from the PMD distribution. Please use the newer rule designer
- with `pmd designer`. The corresponding classes in packages `java.net.sourceforge.pmd.util.viewer` and
- `java.net.sourceforge.pmd.util.designer` have all been removed.
-
-* All API related to XPath support has been moved to the package net.sourceforge.pmd.lang.rule.xpath
.
- This includes API that was previously dispersed over `net.sourceforge.pmd.lang`, `net.sourceforge.pmd.lang.ast.xpath`,
- `net.sourceforge.pmd.lang.rule.xpath`, `net.sourceforge.pmd.lang.rule`, and various language-specific packages
- (which were made internal).
-
-* The implementation of the Ant integration has been moved from the module `pmd-core` to a new module `pmd-ant`.
- This involves classes in package net.sourceforge.pmd.ant
. The ant CPDTask class `net.sourceforge.pmd.cpd.CPDTask`
- has been moved into the same package net.sourceforge.pmd.ant
. You'll need to update your taskdef entries in your
- build.xml files with the FQCN net.sourceforge.pmd.ant.CPDTask
if you use it anywhere.
-
-* Utility classes in net.sourceforge.pmd.util
, that have previously marked as `@InternalApi` have been finally
- moved to an internal sub package and are now longer available.
- This includes ClasspathClassLoader, FileFinder, FileUtil, and IOUtil.
-
-* The following utility classes in net.sourceforge.pmd.util
are now considered public API:
- * AssertionUtil
- * CollectionUtil
- * ContextedAssertionError
- * ContextedStackOverflowError
- * GraphUtil
- * IteratorUtil
- * StringUtil
-
-* Moved the two classes AntlrCpdLexer
and JavaccCpdLexer
from
- `internal` package into package net.sourceforge.pmd.cpd.impl
. These two classes are part of the API and
- are base classes for CPD language implementations. Since 7.0.0-rc2.
- Note: These two classes have been previously called "AntlrTokenizer" and "JavaCCTokenizer".
-* `AntlrBaseRule` is gone in favor of AbstractVisitorRule
. Since 7.0.0-rc2.
-* The classes `net.sourceforge.pmd.lang.kotlin.ast.KotlinInnerNode` and
- `net.sourceforge.pmd.lang.swift.ast.SwiftInnerNode` are package-private now. Since 7.0.0-rc2.
-
-### XPath 3.1 support
-
-Support for XPath versions 1.0, 1.0-compatibility, 2.0 was removed. The default
-(and only) supported XPath version is now XPath 3.1. This version of the XPath language is mostly identical to
-XPath 2.0.
-
-Notable changes:
-* The deprecated support for sequence-valued attributes is removed. Sequence-valued properties are still supported.
-* Refer to [the Saxonica documentation](https://www.saxonica.com/html/documentation/expressions/xpath31new.html) for
- an introduction to new features in XPath 3.1.
-
-### Node stream API for AST traversal
-
-This version includes a powerful API to navigate trees, similar in usage to the Java 8 Stream API:
-```java
-node.descendants(ASTMethodCall.class)
- .filter(m -> "toString".equals(m.getMethodName()))
- .map(m -> m.getQualifier())
- .filter(q -> TypeTestUtil.isA(String.class, q))
- .foreach(System.out::println);
-```
-
-A pipeline like shown here traverses the tree lazily, which is more efficient than traversing eagerly to put all
-descendants in a list. It is also much easier to change than the old imperative way.
-
-To make this API as accessible as possible, the Node
interface has been fitted with new
-methods producing node streams. Those methods replace previous tree traversal methods like `Node#findDescendantsOfType`.
-In all cases, they should be more efficient and more convenient.
-
-See NodeStream
for more details.
-
-Contributors: [Clément Fournier](https://github.com/oowekyala) (@oowekyala)
-
-### Metrics framework
-
-The metrics framework has been made simpler and more general.
-
-* The metric interface takes an additional type parameter, representing the result type of the metric. This is
- usually `Integer` or `Double`. It avoids widening the result to a `double` just to narrow it down.
-
- This makes it so, that `Double.NaN` is not an appropriate sentinel value to represent "not supported" anymore.
- Instead, `computeFor` may return `null` in that case (or a garbage value). The value `null` may have caused
- problems with the narrowing casts, which through unboxing, might have thrown an NPE. But when we deprecated
- the language-specific metrics façades to replace them with the generic MetricsUtil
,
- we took care of making
- the new methods throw an exception if the metric cannot be computed on the parameter. This forces you to guard
- calls to MetricsUtil#computeMetric
(and other overloads)
- with something like `if (metric.supports(node))`. If you're following
- this pattern, then you won't observe the undefined behavior.
-
-* The `MetricKey` interface is not so useful and has been merged into the Metric
- interface and removed. So the Metric
interface has the new method
- displayName
.
-
-* The framework is not tied to at most 2 node types per language anymore. Previously those were nodes for
- classes and for methods/constructors. Instead, many metrics support more node types. For example, NCSS can
- be computed on any code block.
-
- For that reason, keeping around a hard distinction between "class metrics" and "operation metrics" is not
- useful. So in the Java framework for example, we removed the interfaces `JavaClassMetric`, `JavaOperationMetric`,
- abstract classes for those, `JavaClassMetricKey`, and `JavaOperationMetricKey`. Metric constants are now all
- inside the JavaMetrics
utility class. The same was done in the Apex framework.
-
- We don't really need abstract classes for metrics now. So `AbstractMetric` is also removed from pmd-core.
- There is a factory method on the Metric
interface to create a metric easily.
-
-* This makes it so, that LanguageMetricsProvider
does not need type parameters.
- It can just return a `SetSignature
s, their implementations, and the interface `SignedNode` have been
- removed. Node streams allow replacing their usages very easily.
-
-### Testing framework
-
-* PMD 7 has been upgraded to use JUnit 5 only. That means, that JUnit4 related classes have been removed, namely
- * `net.sourceforge.pmd.testframework.PMDTestRunner`
- * `net.sourceforge.pmd.testframework.RuleTestRunner`
- * `net.sourceforge.pmd.testframework.TestDescriptor`
-* Rule tests, that use SimpleAggregatorTst
or
- PmdRuleTst
work as before without change, but use
- now JUnit5 under the hood. If you added additional JUnit4 tests to your rule test classes, then you'll
- need to upgrade them to use JUnit5.
-
-### Language Lifecycle and Language Properties
-
-* Language modules now provide a proper lifecycle and can store global information. This enables the implementation
- of multifile analysis.
-* Language modules can define [custom language properties](pmd_languages_configuration.html)
- which can be set via environment variables. This allows to add and use language specific configuration options
- without the need to change pmd-core.
-
-The documentation page has been updated:
-[Adding a new language with JavaCC](pmd_devdocs_major_adding_new_language_javacc.html)
-and [Adding a new language with ANTLR](pmd_devdocs_major_adding_new_language_antlr.html)
-
-Related issue: [[core] Language lifecycle (#3782)](https://github.com/pmd/pmd/issues/3782)
-
-### Rule properties
-
-* The old deprecated classes like `IntProperty` and `StringProperty` have been removed. Please use
- PropertyFactory
to create properties.
-* All properties which accept multiple values now use a comma (`,`) as a delimiter. The previous default was a
- pipe character (`|`). The delimiter is not configurable anymore. If needed, the comma can be escaped
- with a backslash.
-* The `min` and `max` attributes in property definitions in the XML are now optional and can appear separately
- or be omitted.
-
-### New Programmatic API for CPD
-
-This release introduces a new programmatic API to replace the old class CPD
. The new API uses a similar model to
-PmdAnalysis
and is called CpdAnalysis
. Programmatic execution of CPD should now be
-done with a CPDConfiguration
and a CpdAnalysis
, for instance:
-
-```java
-CPDConfiguration config = new CPDConfiguration();
-config.setMinimumTileSize(100);
-config.setOnlyRecognizeLanguage(config.getLanguageRegistry().getLanguageById("java"));
-config.setSourceEncoding(StandardCharsets.UTF_8);
-config.addInputPath(Path.of("src/main/java")
-
-config.setIgnoreAnnotations(true);
-config.setIgnoreLiterals(false);
-
-config.setRendererName("text");
-
-try (CpdAnalysis cpd = CpdAnalysis.create(config)) {
- // note: don't use `config` once a CpdAnalysis has been created.
- // optional: add more files
- cpd.files().addFile(Paths.get("src", "main", "more-java", "ExtraSource.java"));
-
- cpd.performAnalysis();
-}
-```
-
-CPD can of course still be called via command line or using the module `pmd-cli`. But for tight integration
-this new programmatic API is recommended.
-
-See [PR #4397](https://github.com/pmd/pmd/pull/4397) for details.
-
-### API changes
-
-#### 7.0.0
-
-These are the changes between 7.0.0-rc4 and final 7.0.0.
-
-**pmd-java**
-
-* Support for Java 20 preview language features have been removed. The version "20-preview" is no longer available.
-* ASTPattern
, ASTRecordPattern
,
- ASTTypePattern
, ASTUnnamedPattern
- - method `getParenthesisDepth()` has been removed.
-* ASTTemplateFragment
: To get the content of the template, use now
- getContent
or `@Content` instead of `getImage()`/`@Image`.
-* ASTUnnamedPattern
is not experimental anymore. The language feature
- has been standardized with Java 22.
-
-**New API**
-
-The API around TreeRenderer
has been declared as stable. It was previously
-experimental. It can be used via the CLI subcommand `ast-dump` or programmatically, as described
-on [Creating XML dump of the AST](pmd_userdocs_extending_ast_dump.html).
-
-**General AST Changes to avoid `@Image`**
-
-See [General AST Changes to avoid @Image](pmd_userdocs_migrating_to_pmd7.html#general-ast-changes-to-avoid-image)
-in the migration guide for details.
-
-**XPath Rules**
-
-* The property `version` was already deprecated and has finally been removed. Please don't define the version
- property anymore in your custom XPath rules. By default, the latest XPath version will be used, which
- is XPath 3.1.
-
-**Moved classes/consolidated packages**
-
-* pmd-core
- * Many types have been moved from the base package `net.sourceforge.pmd` into subpackage net.sourceforge.pmd.lang.rule
- * Rule
- * RulePriority
- * RuleSet
- * `RuleSetFactory`
- * RuleSetLoader
- * RuleSetLoadException
- * RuleSetWriter
- * Many types have been moved from the base package `net.sourceforge.pmd` into subpackage net.sourceforge.pmd.reporting
- * Report
- * RuleContext
- * RuleViolation
- * ViolationSuppressor
- * XPathRule
has been moved into subpackage net.sourceforge.pmd.lang.rule.xpath
.
-* pmd-html
- * `net.sourceforge.pmd.lang.html.ast.HtmlCpdLexer` moved into package `cpd`: HtmlCpdLexer
.
-* pmd-lang-test: All types have been moved under the new base package net.sourceforge.pmd.lang.test
:
- * AbstractMetricTestRule
(moved from `net.sourceforge.pmd.test.AbstractMetricTestRule`)
- * BaseTextComparisonTest
(moved from `net.sourceforge.pmd.test.BaseTextComparisonTest`)
- * CpdTextComparisonTest
(moved from `net.sourceforge.pmd.cpd.test.CpdTextComparisonTest`)
- * BaseTreeDumpTest
(moved from `net.sourceforge.pmd.lang.ast.test.BaseTreeDumpTest`)
- * And many other types have been moved from `net.sourceforge.pmd.lang.ast.test` to `net.sourceforge.pmd.lang.test`.
-* pmd-scala
- * ScalaCpdLexer
(moved from `net.sourceforge.pmd.lang.scala.cpd.ScalaCpdLexer`)
- * ScalaTokenAdapter
(moved from `net.sourceforge.pmd.lang.scala.cpd.ScalaTokenAdapter`)
-* pmd-test
- * AbstractRuleSetFactoryTest
(moved from `net.sourceforge.pmd.lang.rule.AbstractRuleSetFactoryTest`)
- * AbstractAntTestHelper
(moved from `net.sourceforge.pmd.ant.AbstractAntTestHelper`)
- * AbstractLanguageVersionTest
(moved from `net.sourceforge.pmd.AbstractLanguageVersionTest`)
- * PmdRuleTst
(moved from `net.sourceforge.pmd.testframework.PmdRuleTst`)
- * RuleTst
(moved from `net.sourceforge.pmd.testframework.RuleTst`)
- * SimpleAggregatorTst
(moved from `net.sourceforge.pmd.testframework.SimpleAggregatorTst`)
-* pmd-xml
- * PomLanguageModule
(moved from `net.sourceforge.pmd.lang.pom.PomLanguageModule`)
- * WsdlLanguageModule
(moved from `net.sourceforge.pmd.lang.wsdl.WsdlLanguageModule`)
- * XslLanguageModule
(moved from `net.sourceforge.pmd.lang.xsl.XslLanguageModule`)
-* pmd-visualforce
- * The package `net.sourceforge.pmd.lang.vf` has been renamed to net.sourceforge.pmd.lang.visualforce
.
- * The language id of visualforce has been changed to `visualforce` (it was previously just "vf")
- * The ruleset changed: `category/vf/security.xml` ➡️ `category/visualforce/security.xml`
-* pmd-velocity (renamed from pmd-vm)
- * The package `net.sourceforge.pmd.lang.vm` has been renamed to net.sourceforge.pmd.lang.velocity
.
- * The language id of the Velocity module has been changed to `velocity` (it was previously just "vm")
- * The rulesets changed: `category/vm/...` ➡️ `category/velocity/...`
- * Many classes used the prefix `Vm`, e.g. `VmLanguageModule`. This has been changed to be `Vtl`:
- * VtlLanguageModule
- * VtlNode
- * VtlParser
- * VtlCpdLexer
- * AbstractVtlRule
-
-**Internalized classes and interfaces and methods**
-
-The following classes/methods have been marked as @InternalApi before and are now moved into a `internal`
-package or made (package) private and are _not accessible_ anymore.
-
-* pmd-core
- * `net.sourceforge.pmd.cache.AbstractAnalysisCache` (moved to internal, now package private)
- * `net.sourceforge.pmd.cache.AnalysisCache` (moved to internal)
- * `net.sourceforge.pmd.cache.AnalysisCacheListener` (moved to internal)
- * `net.sourceforge.pmd.cache.AnalysisResult` (moved to internal)
- * `net.sourceforge.pmd.cache.CachedRuleMapper` (moved to internal, now package private)
- * `net.sourceforge.pmd.cache.CachedRuleViolation` (moved to internal, now package private)
- * `net.sourceforge.pmd.cache.ChecksumAware` (moved to internal)
- * `net.sourceforge.pmd.cache.FileAnalysisCache` (moved to internal)
- * `net.sourceforge.pmd.cache.NoopAnalysisCache` (moved to internal)
- * `net.sourceforge.pmd.util.ResourceLoader` (moved to internal)
- * net.sourceforge.pmd.cpd.Tokens
- * Constructor is now package private.
- * net.sourceforge.pmd.lang.LanguageProcessor.AnalysisTask
- * Constructor is now package private.
- * Method `withFiles(java.util.List)` is now package private. Note: it was not previously marked with @InternalApi.
- * net.sourceforge.pmd.lang.rule.RuleTargetSelector
- * Method `isRuleChain()` has been removed.
- * net.sourceforge.pmd.renderers.AbstractAccumulatingRenderer
- * renderFileReport
- this method is now final
- and can't be overridden anymore.
- * net.sourceforge.pmd.reporting.Report
- * Constructor as well as the methods `addRuleViolation`, `addConfigError`, `addError` are now private.
- * net.sourceforge.pmd.reporting.RuleContext
- * Method `getRule()` is now package private.
- * Method `create(FileAnalysisListener listener, Rule rule)` has been removed.
- * `net.sourceforge.pmd.rules.RuleFactory`: moved into subpackage `lang.rule` and made package private.
- It has now been hidden completely from public API.
- * Many types have been moved from into subpackage `lang.rule.internal`.
- * `net.sourceforge.pmd.RuleSetReference`
- * `net.sourceforge.pmd.RuleSetReferenceId`
- * `net.sourceforge.pmd.RuleSets`
- * `net.sourceforge.pmd.lang.rule.ParametricRuleViolation` is now package private and moved to `net.sourceforge.pmd.reporting.ParametricRuleViolation`.
- The only public API is RuleViolation
.
- * net.sourceforge.pmd.lang.rule.RuleSet
- * Method `applies(Rule,LanguageVersion)` is now package private.
- * Method `applies(TextFile)` has been removed.
- * Method `applies(FileId)` is now package private.
- * net.sourceforge.pmd.lang.rule.RuleSetLoader
- * Method `loadRuleSetsWithoutException(java.util.List)` is now package private.
- * net.sourceforge.pmd.lang.rule.RuleSetLoadException
- * All constructors are package private now.
- * net.sourceforge.pmd.lang.ast.LexException
- the constructor `LexException(boolean, String, int, int, String, char)` is now package private.
- It is only used by JavaCC-generated token managers.
- * net.sourceforge.pmd.PMDConfiguration
- * Method `setAnalysisCache(AnalysisCache)` is now package private. Use setAnalysisCacheLocation
instead.
- * Method `getAnalysisCache()` is now package private.
- * net.sourceforge.pmd.lang.document.FileCollector
- * Method `newCollector(LanguageVersionDiscoverer, PmdReporter)` is now package private.
- * Method `newCollector(PmdReporter)` is now package private.
- * In order to create a FileCollector, use files
instead.
- * net.sourceforge.pmd.lang.rule.xpath.Attribute
- * Method `replacementIfDeprecated()` is now package private.
- * `net.sourceforge.pmd.properties.PropertyTypeId` - moved in subpackage `internal`.
- * net.sourceforge.pmd.properties.PropertyDescriptor
- method `getTypeId()` is now package private.
-* pmd-doc
- * The whole maven module `pmd-doc` is now considered internal API even though it was not declared so before.
- It's used to generate the rule documentation for the built-in rules.
- * All the classes have been moved into package `net.sourceforge.pmd.doc.internal`.
-* pmd-ant
- * net.sourceforge.pmd.ant.Formatter
- * Method `getRenderer()` has been removed.
- * Method `start(String)` is private now.
- * Method `end(Report)` has been removed.
- * Method `isNoOutputSupplied()` is now package private.
- * Method `newListener(Project)` is now package private.
- * net.sourceforge.pmd.ant.PMDTask
- * Method `getRelativizeRoots()` has been removed.
- * `net.sourceforge.pmd.ant.ReportException` is now package private. Note: It was not marked with @InternalApi before.
-* pmd-apex
- * net.sourceforge.pmd.lang.apex.ast.ApexNode
- * Method `getNode()` has been removed. It was only deprecated before and not marked with @InternalApi.
- However, it gave access to the wrapped Jorje node and was thus internal API.
- * `net.sourceforge.pmd.lang.apex.ast.AbstractApexNode`
- * Method `getNode()` is now package private.
- * net.sourceforge.pmd.lang.apex.multifile.ApexMultifileAnalysis
- * Constructor is now package private.
- * `net.sourceforge.pmd.lang.apex.rule.design.AbstractNcssCountRule` (now package private)
- * `net.sourceforge.pmd.lang.apex.rule.AbstractApexUnitTestRule` (moved to package `net.sourceforge.pmd.apex.rule.bestpractices`, now package private)
-* pmd-java
- * `net.sourceforge.pmd.lang.java.rule.AbstractIgnoredAnnotationRule` (moved to internal)
- * `net.sourceforge.pmd.lang.java.types.ast.LazyTypeResolver` (moved to internal)
- * net.sourceforge.pmd.lang.java.types.JMethodSig
- * Method `internalApi()` has been removed.
- * net.sourceforge.pmd.lang.java.types.TypeOps
- * Method `isSameTypeInInference(JTypeMirror,JTypeMirror)` is now package private.
-* pmd-jsp
- * net.sourceforge.pmd.lang.jsp.ast.JspParser
- * Method `getTokenBehavior()` has been removed.
-* pmd-modelica
- * net.sourceforge.pmd.lang.modelica.ast.InternalApiBridge
renamed from `InternalModelicaNodeApi`.
- * net.sourceforge.pmd.lang.modelica.resolver.InternalApiBridge
renamed from `InternalModelicaResolverApi`.
- * `net.sourceforge.pmd.lang.modelica.resolver.ModelicaSymbolFacade` has been removed.
- * `net.sourceforge.pmd.lang.modelica.resolver.ResolutionContext` (moved to internal)
- * `net.sourceforge.pmd.lang.modelica.resolver.ResolutionState` (moved to internal). Note: it was not previously marked with @InternalApi.
- * `net.sourceforge.pmd.lang.modelica.resolver.Watchdog` (moved to internal). Note: it was not previously marked with @InternalApi.
-* pmd-plsql
- * `net.sourceforge.pmd.lang.plsql.rule.design.AbstractNcssCountRule` is now package private.
-* pmd-scala
- * net.sourceforge.pmd.lang.scala.ScalaLanguageModule
- * Method `dialectOf(LanguageVersion)` has been removed.
-
-**Removed classes and members (previously deprecated)**
-
-The annotation `@DeprecatedUntil700` has been removed.
-
-* pmd-core
- * CpdLanguageProperties
. The field `DEFAULT_SKIP_BLOCKS_PATTERN` has been removed.
- * BaseAntlrNode
- method `joinTokenText()` has been removed.
- * Node
- many methods have been removed:
- * `getNthParent(int)` - Use ancestors
instead, e.g. `node.ancestors().get(n-1)`
- * `getFirstParentOfType(Class)` - Use ancestors
instead, e.g. `node.ancestors(parentType).first()`
- * `getParentsOfType(Class)` - Use ancestors
instead, e.g. `node.ancestors(parentType).toList()`
- * `findChildrenOfType(Class)` - Use children
instead, e.g. `node.children(childType).toList()`
- * `findDescendantsOfType(Class)` - Use descendants
instead, e.g. `node.descendants(targetType).toList()`
- * `findDescendantsOfType(Class,boolean)` - Use descendants
instead, e.g. `node.descendants(targetType).crossFindBoundaries(b).toList()`
- * `getFirstChildOfType(Class)` - Use firstChild
instead
- * `getFirstDescendantOfType(Class)` - Use descendants
instead, e.g. `node.descendants(targetType).first()`
- * `hasDescendantOfType(Class)` - Use descendants
instead, e.g. `node.descendants(targetType).nonEmpty()`
- * `findChildNodesWithXPath(String)` - Use the NodeStream
API instead.
- * GenericNode
- method `getNthParent(int)` has been removed. Use ancestors
instead, e.g. `node.ancestors().get(n-1)`
- * FileCollector
- method `addZipFile(java.nio.file.Path)` has been removed. Use addZipFileWithContent
instead
- * TextDocument
- method `readOnlyString(CharSequence,String,LanguageVersion)` has been removed.
- Use readOnlyString
instead.
- * TextFile
- method `dataSourceCompat(DataSource,PMDConfiguration)` has been removed.
- Use TextFile
directly, e.g. forPath
- * XPathVersion
- * `XPATH_1_0`
- * `XPATH_1_0_COMPATIBILITY`
- * `XPATH_2_0`
- * Only XPath version 3.1 is now supported. This version of the XPath language is mostly identical to
- XPath 2.0. XPath rules by default use now XPATH_3_1
.
- * `net.sourceforge.pmd.lang.rule.AbstractDelegateRule` removed. It has been merged with RuleReference
.
- * AbstractRule
- the following methods have been removed:
- * `deepCopyValuesTo(AbstractRule)` - use deepCopy
instead.
- * `addRuleChainVisit(Class)` - override buildTargetSelector
in order to register nodes for rule chain visits.
- * `addViolation(...)` - use addViolation
instead, e.g. via `asCtx(data).addViolation(...)`.
- Note: These methods were only marked as deprecated in javadoc.
- * `addViolationWithMessage(...)` - use addViolationWithMessage
instead, e.g. via
- `asCtx(data).addViolationWithMessage(...)`. Note: These methods were only marked as deprecated in javadoc.
- * RuleReference
- the following methods have been removed:
- * `setRuleSetReference(RuleSetReference)` - without replacement. Just construct new RuleReference
instead.
- * `hasOverriddenProperty(PropertyDescriptor)` - use isPropertyOverridden
instead.
- * XPathRule
- * The constant `XPATH_DESCRIPTOR` has been made private and is not accessible anymore.
- * The default constructor has been made package-private and is not accessible anymore.
- * Language
- method `getTerseName()` removed. Use getId
instead.
- * LanguageModuleBase
- method `getTerseName()` removed. Use getId
instead.
- * LanguageRegistry
- the following methods have been removed:
- * `getLanguage(String)` - use getLanguageByFullName
- via PMD
or CPD
instead.
- * `findLanguageByTerseName(String)` - use getLanguageById
- via PMD
or CPD
instead.
- * `findByExtension(String)` - removed without replacement.
- * LanguageVersionDiscoverer
- method `getLanguagesForFile(java.io.File)` removed.
- Use getLanguagesForFile
instead.
- * AbstractPropertySource
- * field `propertyDescriptors` has been made private and is not accessible anymore.
- Use getPropertyDescriptors
instead.
- * field `propertyValuesByDescriptor` has been made private and is not accessible anymore.
- Use getPropertiesByPropertyDescriptor
- or getOverriddenPropertiesByPropertyDescriptor
instead.
- * method `copyPropertyDescriptors()` has been removed. Use getPropertyDescriptors
instead.
- * method `copyPropertyValues()` has been removed. Use getPropertiesByPropertyDescriptor
- or getOverriddenPropertiesByPropertyDescriptor
instead.
- * Reportable
- the following methods have been removed. Use getReportLocation
instead
- * `getBeginLine()`
- * `getBeginColumn()`
- * `getEndLine()`
- * `getEndColumn()`
- * `net.sourceforge.pmd.util.datasource.DataSource` - use TextFile
instead.
- * `net.sourceforge.pmd.util.datasource.FileDataSource`
- * `net.sourceforge.pmd.util.datasource.ReaderDataSource`
- * `net.sourceforge.pmd.util.datasource.ZipDataSource`
- * CollectionUtil
- * method `invertedMapFrom(...)` has been removed.
- * method `mapFrom(...)` has been removed.
- * AbstractConfiguration
- the following methods have been removed:
- * `setIgnoreFilePath(String)` - use setIgnoreFilePath
instead.
- * `setInputFilePath(String)` - use setInputFilePath
instead.
- * `setInputPaths(String)` - use setInputPathList
or
- addInputPath
instead.
- * `setInputUri(String)` - use setInputUri
instead.
- * PMDConfiguration
- the following methods have been removed
- * `prependClasspath(String)` - use prependAuxClasspath
instead.
- * `getRuleSets()` - use getRuleSetPaths
instead.
- * `setRuleSets(String)` - use setRuleSets
or
- addRuleSet
instead.
- * `setReportFile(String)` - use setReportFile
instead.
- * `getReportFile()` - use getReportFilePath
instead.
- * Report
- method `merge(Report)` has been removed. Use union
instead.
- * RuleSetLoader
- method `toFactory()` has been made package private and is not accessible anymore.
- * RuleViolation
- the following methods have been removed:
- * `getPackageName()` - use getAdditionalInfo
with PACKAGE_NAME
instead, e.g. `getAdditionalInfo().get(PACKAGE_NAME)`.
- * `getClassName()` - use getAdditionalInfo
with CLASS_NAME
instead, e.g. `getAdditionalInfo().get(CLASS_NAME)`.
- * `getMethodName()` - use getAdditionalInfo
with METHOD_NAME
instead, e.g. `getAdditionalInfo().get(METHOD_NAME)`.
- * `getVariableName()` - use getAdditionalInfo
with VARIABLE_NAME
instead, e.g. `getAdditionalInfo().get(VARIABLE_NAME)`.
-* pmd-apex
- * ApexNode
and ASTApexFile
- * `#getApexVersion()`: In PMD 6, this method has been deprecated but was defined in the class `ApexRootNode`.
- The version returned is always "Version.CURRENT", as the apex compiler integration
- doesn't use additional information which Apex version actually is used. Therefore, this method can't be
- used to determine the Apex version of the project that is being analyzed.
-
- If the current version is needed, then `Node.getTextDocument().getLanguageVersion()` can be used. This
- is the version that has been selected via CLI `--use-version` parameter.
- * ApexNode
- * method `jjtAccept()` has been removed.
- Use acceptVisitor
instead.
- * method `getNode()` has been removed. The underlying node is only available in AST nodes, but not in rule implementations.
- * AbstractApexNode
- method `getNode()` is now package private.
- AST nodes still have access to the underlying Jorje node via the protected property `node`.
- * `net.sourceforge.pmd.lang.apex.ast.ApexParserVisitor`
- Use ApexVisitor
or ApexVisitorBase
instead.
- * `net.sourceforge.pmd.lang.apex.ast.ApexParserVisitorAdapter`
- * ASTAssignmentExpression
- method `getOperator()` removed.
- Use getOp
instead.
- * ASTBinaryExpression
- method `getOperator()` removed.
- Use getOp
instead.
- * ASTBooleanExpression
- method `getOperator()` removed.
- Use getOp
instead.
- * ASTPostfixExpression
- method `getOperator()` removed.
- Use getOp
instead.
- * ASTPrefixExpression
- method `getOperator()` removed.
- Use getOp
instead.
- * `net.sourceforge.pmd.lang.apex.rule.security.Helper` removed. This was actually internal API.
-* pmd-java
- * AbstractPackageNameModuleDirective
- method `getImage()` has been removed.
- Use getPackageName
instead.
- * `AbstractTypeDeclaration` - method `getImage()` has been removed.
- Use `getSimpleName()` instead.
- * ASTAnnotation
- method `getAnnotationName()` has been removed.
- * ASTClassType
- * constructor `ASTClassType(java.lang.String)` has been removed.
- * method `getImage()` has been removed.
- * method `isReferenceToClassSameCompilationUnit()` has been removed.
- * ASTFieldDeclaration
- method `getVariableName()` has been removed.
- * ASTLiteral
- the following methods have been removed:
- * `isStringLiteral()` - use `node instanceof ASTStringLiteral` instead.
- * `isCharLiteral()` - use `node instanceof ASTCharLiteral` instead.
- * `isNullLiteral()` - use `node instanceof ASTNullLiteral` instead.
- * `isBooleanLiteral()` - use `node instanceof ASTBooleanLiteral` instead.
- * `isNumericLiteral()` - use `node instanceof ASTNumericLiteral` instead.
- * `isIntLiteral()` - use isIntLiteral
instead.
- * `isLongLiteral()` - use isLongLiteral
instead.
- * `isFloatLiteral()` - use isFloatLiteral
instead.
- * `isDoubleLiteral()` - use isDoubleLiteral
instead.
- * ASTMethodDeclaration
- methods `getImage()` and `getMethodName()` have been removed.
- Use getName
instead.
- * ASTMethodReference
- method `getImage()` has been removed.
- * ASTModuleName
- method `getImage()` has been removed.
- * ASTPrimitiveType
- method `getImage()` has been removed.
- * ASTType
- * `getTypeImage()` has been removed.
- * `getArrayDepth()` has been removed. It's only available for arrays: getArrayDepth
.
- * `isPrimitiveType()` - use `node instanceof ASTPrimitiveType` instead.
- * `isArrayType()` - use `node instanceof ASTArrayType` instead.
- * `isClassOrInterfaceType()` - use `node instanceof ASTClassType` instead.
- * ASTTypeDeclaration
- method `getImage()` has been removed.
- * ASTUnaryExpression
- method `isPrefix()` has been removed.
- Use getOperator
`.isPrefix()` instead.
- * ASTVariableId
- methods `getImage()` and `getVariableName()` have been removed.
- Use getName
instead.
- * JavaComment
- method `getImage()` has been removed.
- Use getText
instead.
- * JavaNode
- method `jjtAccept()` has been removed.
- Use acceptVisitor
instead.
- * `net.sourceforge.pmd.lang.java.ast.JavaParserVisitor`
- Use JavaVisitor
or JavaVisitorBase
instead.
- * `net.sourceforge.pmd.lang.java.ast.JavaParserVisitorAdapter`
- * ModifierOwner
- * `isFinal()` - This is still available in various subtypes, where it makes sense, e.g. isFinal
.
- * `isAbstract()` - This is still available in subtypes, e.g. isAbstract
.
- * `isStrictfp()` - Use hasModifiers
instead, e.g. `hasModifiers(STRICTFP)`.
- * `isSynchronized()` - Use hasModifiers
instead, e.g. `hasModifiers(SYNCHRONIZED)`.
- * `isNative()` - Use hasModifiers
instead, e.g. `hasModifiers(NATIVE)`.
- * `isStatic()` - This is still available in subtypes, e.g. isStatic
.
- * `isVolatile()` - Use hasModifiers
instead, e.g. `hasModifiers(VOLATILE)`.
- * `isTransient()` - Use hasModifiers
instead, e.g. `hasModifiers(TRANSIENT)`.
- * `isPrivate()` - Use getVisibility
instead, e.g. `getVisibility() == Visibility.V_PRIVATE`.
- * `isPublic()` - Use getVisibility
instead, e.g. `getVisibility() == Visibility.V_PUBLIC`.
- * `isProtected()` - Use getVisibility
instead, e.g. `getVisibility() == Visibility.V_PROTECTED`.
- * `isPackagePrivate()` - Use getVisibility
instead, e.g. `getVisibility() == Visibility.V_PACKAGE`.
- * `isSyntacticallyAbstract()` - Use hasExplicitModifiers
instead, e.g. `hasExplicitModifiers(ABSTRACT)`.
- * `isSyntacticallyPublic()` - Use hasExplicitModifiers
instead, e.g. `hasExplicitModifiers(PUBLIC)`.
- * `isSyntacticallyStatic()` - Use hasExplicitModifiers
instead, e.g. `hasExplicitModifiers(STATIC)`.
- * `isSyntacticallyFinal()` - Use hasExplicitModifiers
instead, e.g. `hasExplicitModifiers(FINAL)`.
- * TypeNode
- method `getType()` has been removed. Use getTypeMirror
instead.
-* pmd-javascript
- * AbstractEcmascriptNode
- method `getNode()` has been removed.
- AST nodes still have access to the underlying Rhino node via the protected property `node`.
- * ASTFunctionNode
- method `getBody(int)` removed.
- Use getBody
instead.
- * ASTTryStatement
- * method `isCatch()` has been removed. Use hasCatch
instead.
- * method `isFinally()` has been removed. Use hasFinally
instead.
- * EcmascriptNode
- * method `jjtAccept()` has been removed. Use acceptVisitor
instead.
- * method `getNode()` has been removed. The underlying node is only available in AST nodes, but not in rule implementations.
- * `net.sourceforge.pmd.lang.ecmascript.ast.EcmascriptParserVisitor`
- Use EcmascriptVisitor
or EcmascriptVisitorBase
instead.
- * `net.sourceforge.pmd.lang.ecmascript.ast.EcmascriptParserVisitorAdapter`
-* pmd-jsp
- * `net.sourceforge.pmd.lang.jsp.ast.JspParserVisitor`
- Use JspVisitor
or JspVisitorBase
instead.
- * `net.sourceforge.pmd.lang.jsp.ast.JspParserVisitorAdapter`
- * JspNode
- method `jjtAccept()` has been removed.
- Use acceptVisitor
instead.
-* pmd-modelica
- * `net.sourceforge.pmd.lang.modelica.ast.ModelicaParserVisitor`
- Use ModelicaVisitor
or ModelicaVisitorBase
instead.
- * `net.sourceforge.pmd.lang.modelica.ast.ModelicaParserVisitorAdapter`
- * ModelicaNode
- method `jjtAccept()` has been removed.
- Use acceptVisitor
instead.
- * `net.sourceforge.pmd.lang.modelica.rule.AmbiguousResolutionRule`
- Use AmbiguousResolutionRule
instead.
- * `net.sourceforge.pmd.lang.modelica.rule.ConnectUsingNonConnector`
- Use ConnectUsingNonConnectorRule
-* pmd-plsql
- * `net.sourceforge.pmd.lang.plsql.ast.PLSQLParserVisitor`
- Use PlsqlVisitor
or PlsqlVisitorBase
instead.
- * `net.sourceforge.pmd.lang.plsql.ast.PLSQLParserVisitorAdapter`
- * PLSQLNode
- method `jjtAccept()` has been removed.
- Use acceptVisitor
instead.
-* pmd-scala
- * The maven module `pmd-scala` has been removed. Use `pmd-scala_2.13` or `pmd-scala_2.12` instead.
- * ScalaNode
- * Method `accept()` has been removed. Use acceptVisitor
instead.
- * Method `getNode()` has been removed. The underlying node is only available in AST nodes, but not in rule implementations.
- * `AbstractScalaNode` - method `getNode()` has been removed. AST nodes still have access
- to the underlying Scala node via the protected property `node`.
-* pmd-visualforce
- * VfNode
- method `jjtAccept()` has been removed.
- Use acceptVisitor
instead.
- * `net.sourceforge.pmd.lang.vf.ast.VfParserVisitor`
- Use VfVisitor
or VfVisitorBase
instead.
- * `net.sourceforge.pmd.lang.vf.ast.VfParserVisitorAdapter`
- * DataType
- method `fromBasicType(BasicType)` has been removed.
- Use fromTypeName
instead.
-* pmd-velocity (previously pmd-vm)
- * VtlNode
- method `jjtAccept()` has been removed.
- Use acceptVisitor
instead.
- * `net.sourceforge.pmd.lang.vm.ast.VmParserVisitor`
- Use VtlVisitor
or VtlVisitorBase
instead.
- * `net.sourceforge.pmd.lang.vm.ast.VmParserVisitorAdapter`
-
-**Removed classes, interfaces and methods (not previously deprecated)**
-
-* pmd-apex
- * The method `isSynthetic()` in ASTMethod
has been removed.
- With the switch from Jorje to Summit AST as underlying parser, no synthetic methods are generated by the
- parser anymore. This also means, that there is no XPath attribute `@Synthetic` anymore.
- * The constant `STATIC_INITIALIZER_METHOD_NAME` in FieldDeclarationsShouldBeAtStartRule
- has been removed. It was used to filter out synthetic methods, but these are not generated anymore with the
- new parser.
- * The method `getContext()` in ASTReferenceExpression
has been removed.
- It was not used and always returned `null`.
- * The method `getNamespace()` in all AST nodes (defined in ApexNode
) has
- been removed, as it was never fully implemented. It always returned an empty string.
- * The method `getNameSpace()` in ApexQualifiedName
has been removed.
- * The class `net.sourceforge.pmd.lang.apex.ast.ASTBridgeMethodCreator` has been removed. This was a node that has
- been generated by the old Jorje parser only.
-* pmd-apex-jorje
- * With the switch from Jorje to Summit AST, this maven module is no longer needed and has been removed.
-* pmd-core
- * `net.sourceforge.pmd.util.Predicate` has been removed. It was marked as Experimental before. Use
- `java.util.function.Predicate` instead.
-* pmd-java
- * The interface `FinalizableNode` (introduced in 7.0.0-rc1) has been removed.
- Its method `isFinal()` has been moved down to the
- nodes where needed, e.g. ASTLocalVariableDeclaration#isFinal
.
- * The method `isPackagePrivate()` in ASTClassDeclaration
(formerly ASTClassOrInterfaceDeclaration)
- has been removed.
- Use hasVisibility
instead,
- which can correctly differentiate between local and package private classes.
-
-**Renamed classes, interfaces, methods**
-
-* pmd-core
- * MessageReporter
has been renamed to PmdReporter
- * TokenMgrError
has been renamed to LexException
- * Tokenizer
has been renamed to CpdLexer
. Along with this rename,
- all the implementations have been renamed as well (`Tokenizer` -> `CpdLexer`), e.g. "CppCpdLexer", "JavaCpdLexer".
- This affects all language modules.
- * AnyTokenizer
has been renamed to AnyCpdLexer
.
-
-* pmd-java
- * The interface `AccessNode` has been renamed to ModifierOwner
. This is only relevant
- for Java rules, which use that type directly e.g. through downcasting.
- Or when using the XPath function `pmd-java:nodeIs()`.
- * The node `ASTClassOrInterfaceType` has been renamed to ASTClassType
. XPath rules
- need to be adjusted.
- * The node `ASTClassOrInterfaceDeclaration` has been renamed to ASTClassDeclaration
.
- XPath rules need to be adjusted.
- * The interface `ASTAnyTypeDeclaration` has been renamed to ASTTypeDeclaration
.
- This is only relevant for Java rules, which use that type directly, e.g. through downcasting.
- Or when using the XPath function `pmd-java:nodeIs()`.
- * The interface `ASTMethodOrConstructorDeclaration` has been renamed to
- ASTExecutableDeclaration
. This is only relevant for Java rules, which use that type
- directly, e.g. through downcasting. Or when using the XPath function `pmd-java:nodeIs()`.
- * The node `ASTVariableDeclaratorId` has been renamed to ASTVariableId
. XPath rules
- need to be adjusted.
- * The node `ASTClassOrInterfaceBody` has been renamed to ASTClassBody
. XPath rules
- need to be adjusted.
-* pmd-scala
- * The interface `ScalaParserVisitor` has been renamed to ScalaVisitor
in order
- to align the naming scheme for the different language modules.
- * The class `ScalaParserVisitorAdapter` has been renamed to ScalaVisitorBase
in order
- to align the naming scheme for the different language modules.
-
-**New API**
-
-These were annotated with `@Experimental`, but can now be considered stable.
-
-* pmd-apex
- * ASTCommentContainer
- * ApexMultifileAnalysis
-* pmd-core
- * CPDReport#filterMatches
- * AntlrToken#getKind
- * AbstractJjtreeNode
- * TokenDocument
- * AstInfo#getSuppressionComments
- * AstInfo#withSuppressMap
- * GenericToken#getKind
- * FileCollector#addZipFileWithContent
- * net.sourceforge.pmd.lang.document
- * LanguageVersionHandler#getLanguageMetricsProvider
- * LanguageVersionHandler#getDesignerBindings
- * PlainTextLanguage
- * PropertyConstraint#getXmlConstraint
- * PropertyConstraint#toOptionalConstraint
- * PropertyConstraint#fromPredicate
- * PropertyConstraint#fromPredicate
- * AbstractRenderer#setReportFile
- * Renderer#setReportFile
- * DesignerBindings
- * DesignerBindings.TreeIconId
- * RelatedNodesSelector
- * Report#filterViolations
- * Report#union
-* pmd-groovy
- * GroovyToken#getKind
-* pmd-html
- * net.sourceforge.pmd.lang.html
-* pmd-java
- * ASTExpression#getConversionContext
- * AbstractJavaRulechainRule#<init>
- * JSymbolTable
- * JElementSymbol
- * net.sourceforge.pmd.lang.java.symbols
- * ExprContext
- * JIntersectionType#getInducedClassType
- * JTypeMirror#streamMethods
- * JTypeMirror#streamDeclaredMethods
- * JTypeMirror#getConstructors
-* pmd-kotlin
- * KotlinLanguageModule
-* pmd-test-schema
- * TestSchemaParser
-
-**Removed functionality**
-
-* The CLI parameter `--no-ruleset-compatibility` has been removed. It was only used to allow loading
- some rulesets originally written for PMD 5 also in PMD 6 without fixing the rulesets.
-* The class RuleSetFactoryCompatibility
has been removed without replacement.
- The different ways to enable/disable this filter in PMDConfiguration
- (Property "RuleSetFactoryCompatibilityEnabled") and
- PMDTask
(Property "noRuleSetCompatibility") have been removed as well.
-* `textcolor` renderer (TextColorRenderer
) now renders always in color.
- The property `color` has been removed. The possibility to override this with the system property `pmd.color`
- has been removed as well. If you don't want colors, use `text` renderer (TextRenderer
).
-
-#### 7.0.0-rc4
-
-**pmd-java**
-
-* Support for Java 19 preview language features have been removed. The version "19-preview" is no longer available.
-
-**Rule properties**
-
-* The old deprecated classes like `IntProperty` and `StringProperty` have been removed. Please use
- PropertyFactory
to create properties.
-* All properties which accept multiple values now use a comma (`,`) as a delimiter. The previous default was a
- pipe character (`|`). The delimiter is not configurable anymore. If needed, the comma can be escaped
- with a backslash.
-* The `min` and `max` attributes in property definitions in the XML are now optional and can appear separately
- or be omitted.
-
-**New Programmatic API for CPD**
-
-See [Detailed Release Notes for PMD 7](pmd_release_notes_pmd7.html#new-programmatic-api-for-cpd)
-and [PR #4397](https://github.com/pmd/pmd/pull/4397) for details.
-
-**Removed classes and methods**
-
-The following previously deprecated classes have been removed:
-
-* pmd-core
- * `net.sourceforge.pmd.cpd.AbstractTokenizer` ➡️ use AnyCpdLexer
instead (previously known as AnyTokenizer)
- * `net.sourceforge.pmd.cpd.CPD` ➡️ use PmdCli
from `pmd-cli` module for CLI support or use
- CpdAnalysis
for programmatic API
- * `net.sourceforge.pmd.cpd.GridBagHelper` (now package private)
- * `net.sourceforge.pmd.cpd.TokenEntry.State`
- * `net.sourceforge.pmd.lang.document.CpdCompat`
- * `net.sourceforge.pmd.properties.BooleanMultiProperty`
- * `net.sourceforge.pmd.properties.BooleanProperty`
- * `net.sourceforge.pmd.properties.CharacterMultiProperty`
- * `net.sourceforge.pmd.properties.CharacterProperty`
- * `net.sourceforge.pmd.properties.DoubleMultiProperty`
- * `net.sourceforge.pmd.properties.DoubleProperty`
- * `net.sourceforge.pmd.properties.EnumeratedMultiProperty`
- * `net.sourceforge.pmd.properties.EnumeratedProperty`
- * `net.sourceforge.pmd.properties.EnumeratedPropertyDescriptor`
- * `net.sourceforge.pmd.properties.FileProperty` (note: without replacement)
- * `net.sourceforge.pmd.properties.FloatMultiProperty`
- * `net.sourceforge.pmd.properties.FloatProperty`
- * `net.sourceforge.pmd.properties.IntegerMultiProperty`
- * `net.sourceforge.pmd.properties.IntegerProperty`
- * `net.sourceforge.pmd.properties.LongMultiProperty`
- * `net.sourceforge.pmd.properties.LongProperty`
- * `net.sourceforge.pmd.properties.MultiValuePropertyDescriptor`
- * `net.sourceforge.pmd.properties.NumericPropertyDescriptor`
- * `net.sourceforge.pmd.properties.PropertyDescriptorField`
- * `net.sourceforge.pmd.properties.RegexProperty`
- * `net.sourceforge.pmd.properties.SingleValuePropertyDescriptor`
- * `net.sourceforge.pmd.properties.StringMultiProperty`
- * `net.sourceforge.pmd.properties.StringProperty`
- * `net.sourceforge.pmd.properties.ValueParser`
- * `net.sourceforge.pmd.properties.ValueParserConstants`
- * `net.sourceforge.pmd.properties.builders.MultiNumericPropertyBuilder`
- * `net.sourceforge.pmd.properties.builders.MultiPackagedPropertyBuilder`
- * `net.sourceforge.pmd.properties.builders.MultiValuePropertyBuilder`
- * `net.sourceforge.pmd.properties.builders.PropertyDescriptorBuilder`
- * `net.sourceforge.pmd.properties.builders.PropertyDescriptorBuilderConversionWrapper`
- * `net.sourceforge.pmd.properties.builders.PropertyDescriptorExternalBuilder`
- * `net.sourceforge.pmd.properties.builders.SingleNumericPropertyBuilder`
- * `net.sourceforge.pmd.properties.builders.SinglePackagedPropertyBuilder`
- * `net.sourceforge.pmd.properties.builders.SingleValuePropertyBuilder`
- * `net.sourceforge.pmd.properties.modules.EnumeratedPropertyModule`
- * `net.sourceforge.pmd.properties.modules.NumericPropertyModule`
-
-The following previously deprecated methods have been removed:
-
-* pmd-core
- * `net.sourceforge.pmd.properties.PropertyBuilder.GenericCollectionPropertyBuilder#delim(char)`
- * `net.sourceforge.pmd.properties.PropertySource#setProperty(...)`
- * `net.sourceforge.pmd.properties.internal.PropertyTypeId#factoryFor(...)`
- * `net.sourceforge.pmd.properties.internal.PropertyTypeId#typeIdFor(...)`
- * `net.sourceforge.pmd.properties.PropertyDescriptor`: removed methods errorFor, type, isMultiValue,
- uiOrder, compareTo, isDefinedExternally, valueFrom, asDelimitedString
-
-The following methods have been removed:
-
-* pmd-core
- * CPDConfiguration
- * `#sourceCodeFor(File)`, `#postConstruct()`, `#tokenizer()`, `#filenameFilter()` removed
- * Mark
- * `#getSourceSlice()`, `#setLineCount(int)`, `#getLineCount()`, `#setSourceCode(SourceCode)` removed
- * `#getBeginColumn()`, `#getBeginLine()`, `#getEndLine()`, `#getEndColumn()` removed
- ➡️ use getLocation
instead
- * Match
- * `#LABEL_COMPARATOR` removed
- * `#setMarkSet(...)`, `#setLabel(...)`, `#getLabel()`, `#addTokenEntry(...)` removed
- * `#getSourceCodeSlice()` removed
- ➡️ use CPDReport#getSourceCodeSlice
instead
- * TokenEntry
- * `#getEOF()`, `#clearImages()`, `#getIdentifier()`, `#getIndex()`, `#setHashCode(int)` removed
- * `#EOF` removed ➡️ use isEof
instead
- * Parser.ParserTask
- * `#getFileDisplayName()` removed ➡️ use getFileId
instead
- (`getFileId().getAbsolutePath()`)
-
-The following classes have been removed:
-
-* pmd-core
- * `net.sourceforge.pmd.cpd.AbstractLanguage`
- * `net.sourceforge.pmd.cpd.AnyLanguage`
- * `net.sourceforge.pmd.cpd.Language`
- * `net.sourceforge.pmd.cpd.LanguageFactory`
- * `net.sourceforge.pmd.cpd.MatchAlgorithm` (now package private)
- * `net.sourceforge.pmd.cpd.MatchCollector` (now package private)
- * `net.sourceforge.pmd.cpd.SourceCode` (and all inner classes like `FileCodeLoader`, ...)
- * `net.sourceforge.pmd.cpd.token.TokenFilter`
-
-**Moved packages**
-
-* pmd-core
- * NumericConstraints
(old package: `net.sourceforge.pmd.properties.constraints.NumericConstraints`)
- * PropertyConstraint
(old package: `net.sourceforge.pmd.properties.constraints.PropertyConstraint`)
- * not experimental anymore
- * ReportException
(old package: `net.sourceforge.pmd.cpd`, moved to module `pmd-ant`)
- * it is now a RuntimeException
- * CPDReportRenderer
(old package: `net.sourceforge.pmd.cpd.renderer`)
- * AntlrTokenFilter
(old package: `net.sourceforge.pmd.cpd.token`)
- * BaseTokenFilter
(old package: `net.sourceforge.pmd.cpd.token.internal`)
- * JavaCCTokenFilter
(old package: `net.sourceforge.pmd.cpd.token`)
-
-**Changed types and other changes**
-
-* pmd-core
- * PropertyDescriptor
is now a class (was an interface)
- and it is not comparable anymore.
- * AbstractConfiguration#setSourceEncoding
- * previously this method took a simple String for the encoding.
- * PMDConfiguration
and CPDConfiguration
- * many getters and setters have been moved to the parent class AbstractConfiguration
- * CPDListener#addedFile
- * no `File` parameter anymore
- * CPDReport#getNumberOfTokensPerFile
returns a `Map` of `FileId,Integer` instead of `String`
- * CPDReport#filterMatches
now takes a `java.util.function.Predicate`
- as parameter
- * CpdLexer
- * Note: CpdLexer was previously named Tokenizer.
- * constants are now PropertyDescriptor
instead of `String`,
- to be used as language properties
- * tokenize
- changed parameters. Now takes a TextDocument
and a TokenFactory
- (instead of `SourceCode` and `Tokens`).
- * Language
- * method `#createProcessor(LanguagePropertyBundle)` moved to PmdCapableLanguage
- * StringUtil#linesWithTrimIndent
now takes a `Chars`
- instead of a `String`.
-* All language modules (like pmd-apex, pmd-cpp, ...)
- * consistent package naming: `net.sourceforge.pmd.lang.CpdCapableLanguage
- * consistent static method `#getInstance()`
- * removed constants like `ID`, `TERSE_NAME` or `NAME`. Use `getInstance().getName()` etc. instead
-
-**Internal APIs**
-
-* `net.sourceforge.pmd.properties.internal.PropertyTypeId`
-
-**Deprecated API**
-
-* Language#getTerseName
➡️ use getId
instead
-
-* The method ASTPattern#getParenthesisDepth
has been deprecated and will be removed.
- It was introduced for supporting parenthesized patterns, but that was removed with Java 21. It is only used when
- parsing code as java-19-preview.
-
-**Experimental APIs**
-
-* To support the Java preview language features "String Templates" and "Unnamed Patterns and Variables", the following
- AST nodes have been introduced as experimental:
- * ASTTemplateExpression
- * ASTTemplate
- * ASTTemplateFragment
- * ASTUnnamedPattern
-* The AST nodes for supporting "Record Patterns" and "Pattern Matching for switch" are not experimental anymore:
- * ASTRecordPattern
- * ASTPatternList
(Note: it was renamed from `ASTComponentPatternList`)
- * ASTGuard
(Note: it was renamed from `ASTSwitchGuard`)
-
-#### 7.0.0-rc3
-
-**PMD Distribution**
-
-* The asset filenames of PMD on [GitHub Releases](https://github.com/pmd/pmd/releases) are
- now `pmd-dist-RuleViolation#getFileId
, that returns a
- FileId
. This is an identifier for a TextFile
- and could represent a path name. This allows to have a separate display name, e.g. renderers use
- FileNameRenderer
to either display the full path name or a relative path name
- (see Renderer#setFileNameRenderer
and
- ConfigurableFileNameRenderer
). Many places where we used a simple String for
- a path-like name before have been adapted to use the new FileId
.
-
- See [PR #4425](https://github.com/pmd/pmd/pull/4425) for details.
-
-#### 7.0.0-rc2
-
-**Removed classes and methods**
-
-The following previously deprecated classes have been removed:
-
-* pmd-core
- * `net.sourceforge.pmd.PMD`
- * `net.sourceforge.pmd.cli.PMDCommandLineInterface`
- * `net.sourceforge.pmd.cli.PMDParameters`
- * `net.sourceforge.pmd.cli.PmdParametersParseResult`
-
-**CLI**
-
-* The CLI option `--minimum-priority` was changed with 7.0.0-rc1 to only take the following values:
- High, Medium High, Medium, Medium Low, Low. With 7.0.0-rc2 compatibility has been restored, so that the equivalent
- integer values (1 to 5) are supported as well.
-
-#### 7.0.0-rc1
-
-**CLI**
-
-* The CLI option `--stress` (or `-stress`) has been removed without replacement.
-* The CLI option `--minimum-priority` now takes one of the following values instead of an integer:
- High, Medium High, Medium, Medium Low, Low.
-
-#### 6.55.0
-
-**Go**
-
-* The LanguageModule of Go, that only supports CPD execution, has been deprecated. This language
- is not fully supported by PMD, so having a language module does not make sense. The functionality of CPD is
- not affected by this change. The following class has been deprecated and will be removed with PMD 7.0.0:
- * GoLanguageModule
-
-**Java**
-* Support for Java 18 preview language features have been removed. The version "18-preview" is no longer available.
-* The experimental class `net.sourceforge.pmd.lang.java.ast.ASTGuardedPattern` has been removed.
-
-#### 6.54.0
-
-**PMD CLI**
-
-* PMD now supports a new `--relativize-paths-with` flag (or short `-z`), which replaces `--short-names`.
- It serves the same purpose: Shortening the pathnames in the reports. However, with the new flag it's possible
- to explicitly define one or more pathnames that should be used as the base when creating relative paths.
- The old flag `--short-names` is deprecated.
-
-**Deprecated APIs**
-
-**For removal**
-
-* ApexRootNode#getApexVersion()
has been deprecated for removal. The version returned is
- always `Version.CURRENT`, as the apex compiler integration doesn't use additional information which Apex version
- actually is used. Therefore, this method can't be used to determine the Apex version of the project
- that is being analyzed.
-* CPDConfiguration#setEncoding
and
- CPDConfiguration#getEncoding
. Use the methods
- getSourceEncoding
and
- setSourceEncoding
instead. Both are available
- for `CPDConfiguration` which extends `AbstractConfiguration`.
-* BaseCLITest
and BaseCPDCLITest
have been deprecated for removal without
- replacement. CLI tests should be done in pmd-core only (and in PMD7 in pmd-cli). Individual language modules
- shouldn't need to test the CLI integration logic again. Instead, the individual language modules should test their
- functionality as unit tests.
-* CPDConfiguration.LanguageConverter
-
-* FileCollector#addZipFile
has been deprecated. It is replaced
- by FileCollector#addZipFileWithContent
which directly adds the
- content of the zip file for analysis.
-
-* PMDConfiguration#setReportShortNames
and
- PMDConfiguration#isReportShortNames
have been deprecated for removal.
- Use AbstractConfiguration#addRelativizeRoot
instead.
-
-**Internal APIs**
-
-* CSVWriter
-* Some fields in AbstractAntTestHelper
-
-**Experimental APIs**
-
-* CPDReport has a new method which limited mutation of a given report:
- * filterMatches
creates a new CPD report
- with some matches removed with a given predicate based filter.
-
-#### 6.53.0
-
-**Deprecated APIs**
-
-**For removal**
-
-These classes / APIs have been deprecated and will be removed with PMD 7.0.0.
-
-* ExcessiveLengthRule
(Java)
-
-#### 6.52.0
-
-**PMD CLI**
-
-* PMD now supports a new `--use-version` flag, which receives a language-version pair (such as `java-8` or `apex-54`).
- This supersedes the usage of `-language` / `-l` and `-version` / `-v`, allowing for multiple versions to be set in a single run.
- PMD 7 will completely remove support for `-language` and `-version` in favor of this new flag.
-
-* Support for `-V` is being deprecated in favor of `--verbose` in preparation for PMD 7.
- In PMD 7, `-v` will enable verbose mode and `-V` will show the PMD version for consistency with most Unix/Linux tools.
-
-* Support for `-min` is being deprecated in favor of `--minimum-priority` for consistency with most Unix/Linux tools, where `-min` would be equivalent to `-m -i -n`.
-
-**CPD CLI**
-
-* CPD now supports using `-d` or `--dir` as an alias to `--files`, in favor of consistency with PMD.
- PMD 7 will remove support for `--files` in favor of these new flags.
-
-**Linux run.sh parameters**
-
-* Using `run.sh cpdgui` will now warn about it being deprecated. Use `run.sh cpd-gui` instead.
-
-* The old designer (`run.sh designerold`) is completely deprecated and will be removed in PMD 7. Switch to the new JavaFX designer: `run.sh 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 designer` for a visual tool, or use `run.sh ast-dump` for a text-based alternative.
-
-**Deprecated API**
-
-* The following core APIs have been marked as deprecated for removal in PMD 7:
- - PMD
and `PMD.StatusCode` - PMD 7 will ship with a revamped CLI split from pmd-core. To programmatically launch analysis you can use PmdAnalysis
.
- - PMDConfiguration#getAllInputPaths
- It is now superseded by PMDConfiguration#getInputPathList
- - PMDConfiguration#setInputPaths
- It is now superseded by PMDConfiguration#setInputPathList
- - PMDConfiguration#addInputPath
- It is now superseded by PMDConfiguration#addInputPath
- - PMDConfiguration#getInputFilePath
- It is now superseded by PMDConfiguration#getInputFile
- - PMDConfiguration#getIgnoreFilePath
- It is now superseded by PMDConfiguration#getIgnoreFile
- - PMDConfiguration#setInputFilePath
- It is now superseded by PMDConfiguration#setInputFilePath
- - PMDConfiguration#setIgnoreFilePath
- It is now superseded by PMDConfiguration#setIgnoreFilePath
- - PMDConfiguration#getInputUri
- It is now superseded by PMDConfiguration#getUri
- - PMDConfiguration#setInputUri
- It is now superseded by PMDConfiguration#setInputUri
- - PMDConfiguration#getReportFile
- It is now superseded by PMDConfiguration#getReportFilePath
- - PMDConfiguration#setReportFile
- It is now superseded by PMDConfiguration#setReportFile
- - PMDConfiguration#isStressTest
and PMDConfiguration#setStressTest
- Will be removed with no replacement.
- - PMDConfiguration#isBenchmark
and PMDConfiguration#setBenchmark
- Will be removed with no replacement, the CLI will still support it.
- - CPD
and `CPD.StatusCode` - PMD 7 will ship with a revamped CLI split from pmd-core. An alternative to programmatically launch CPD analysis will be added in due time.
-
-* In order to reduce the dependency on Apex Jorje classes, the method DataType#fromBasicType
- has been deprecated. The equivalent method fromTypeName
should be used instead.
-
-#### 6.51.0
-
-No changes.
-
-#### 6.50.0
-
-**CPD CLI**
-
-* CPD now supports the `--ignore-literal-sequences` argument when analyzing Lua code.
-
-#### 6.49.0
-
-**Deprecated API**
-
-* In order to reduce the dependency on Apex Jorje classes, the following methods have been deprecated.
- These methods all leaked internal Jorje enums. These enums have been replaced now by enums the
- PMD's AST package.
- * ASTAssignmentExpression#getOperator
- * ASTBinaryExpression#getOperator
- * ASTBooleanExpression#getOperator
- * ASTPostfixExpression#getOperator
- * ASTPrefixExpression#getOperator
-
- All these classes have now a new `getOp()` method. Existing code should be refactored to use this method instead.
- It returns the new enums, like AssignmentOperator
, and avoids
- the dependency to Jorje.
-
-#### 6.48.0
-
-**CPD CLI**
-
-* CPD has a new CLI option `--debug`. This option has the same behavior as in PMD. It enables more verbose
- logging output.
-
-**Rule Test Framework**
-
-* The module "pmd-test", which contains support classes to write rule tests, now **requires Java 8**. If you depend on
- this module for testing your own custom rules, you'll need to make sure to use at least Java 8.
-* The new module "pmd-test-schema" contains now the XSD schema and the code to parse the rule test XML files. The
- schema has been extracted in order to easily share it with other tools like the Rule Designer or IDE plugins.
-* Test schema changes:
- * The attribute `isRegressionTest` of `test-code` is deprecated. The new
- attribute `disabled` should be used instead for defining whether a rule test should be skipped or not.
- * The attributes `reinitializeRule` and `useAuxClasspath` of `test-code` are deprecated and assumed true.
- They will not be replaced.
- * The new attribute `focused` of `test-code` allows disabling all tests except the focused one temporarily.
-* More information about the rule test framework can be found in the documentation:
- [Testing your rules](pmd_userdocs_extending_testing.html)
-
-**Deprecated API**
-
-* The experimental Java AST class `net.sourceforge.pmd.lang.java.ast.ASTGuardedPattern` has been deprecated and
- will be removed. It was introduced for Java 17 and Java 18 Preview as part of pattern matching for switch,
- but it is no longer supported with Java 19 Preview.
-* The interface CPDRenderer
is deprecated. For custom CPD renderers
- the new interface CPDReportRenderer
should be used.
-* The class TestDescriptor
is deprecated, replaced with RuleTestDescriptor
.
-* Many methods of RuleTst
have been deprecated as internal API.
-
-**Experimental APIs**
-
-* To support the Java preview language features "Pattern Matching for Switch" and "Record Patterns", the following
- AST nodes have been introduced as experimental:
- * ASTSwitchGuard
- * ASTRecordPattern
- * ASTComponentPatternList
-
-**Internal API**
-
-Those APIs are not intended to be used by clients, and will be hidden or removed with PMD 7.0.0.
-You can identify them with the `@InternalApi` annotation. You'll also get a deprecation warning.
-
-* CPDConfiguration#setRenderer
-* CPDConfiguration#setCPDRenderer
-* CPDConfiguration#getRenderer
-* CPDConfiguration#getCPDRenderer
-* CPDConfiguration#getRendererFromString
-* CPDConfiguration#getCPDRendererFromString
-* CPDRendererAdapter
-
-#### 6.47.0
-
-No changes.
-
-#### 6.46.0
-
-**Deprecated ruleset references**
-
-Ruleset references with the following formats are now deprecated and will produce a warning
-when used on the CLI or in a ruleset XML file:
-- `toString
is now deprecated. The format of this
- method will remain the same until PMD 7. The deprecation is intended to steer users
- away from relying on this format, as it may be changed in PMD 7.
-- getInputPaths
and
- setInputPaths
are now deprecated.
- A new set of methods have been added, which use lists and do not rely on comma splitting.
-
-**Internal API**
-
-Those APIs are not intended to be used by clients, and will be hidden or removed with PMD 7.0.0.
-You can identify them with the `@InternalApi` annotation. You'll also get a deprecation warning.
-
-- CPDCommandLineInterface
has been internalized. In order to execute CPD either
- CPD#runCpd
or CPD#main
- should be used.
-- Several members of BaseCPDCLITest
have been deprecated with replacements.
-- The methods Formatter#start
,
- Formatter#end
, Formatter#getRenderer
,
- and Formatter#isNoOutputSupplied
have been internalized.
-
-#### 6.45.0
-
-**Experimental APIs**
-
-* Report has two new methods which allow limited mutations of a given report:
- * Report#filterViolations
creates a new report with
- some violations removed with a given predicate based filter.
- * Report#union
can combine two reports into a single new Report.
-* net.sourceforge.pmd.util.Predicate
will be replaced in PMD7 with the standard Predicate interface from java8.
-* The module `pmd-html` is entirely experimental right now. Anything in the package
- `net.sourceforge.pmd.lang.html` should be used cautiously.
-
-#### 6.44.0
-
-**Deprecated API**
-
-* Several members of PMD
have been newly deprecated, including:
- - `PMD#EOL`: use `System#lineSeparator()`
- - `PMD#SUPPRESS_MARKER`: use DEFAULT_SUPPRESS_MARKER
- - `PMD#processFiles`: use the new programmatic API
- - `PMD#getApplicableFiles`: is internal
-* PMDConfiguration#prependClasspath
is deprecated
- in favour of prependAuxClasspath
.
-* PMDConfiguration#setRuleSets
and
- getRuleSets
are deprecated. Use instead
- setRuleSets
,
- addRuleSet
,
- and getRuleSetPaths
.
-* Several members of BaseCLITest
have been deprecated with replacements.
-* Several members of PMDCommandLineInterface
have been explicitly deprecated.
- The whole class however was deprecated long ago already with 6.30.0. It is internal API and should
- not be used.
-
-* In modelica, the rule classes AmbiguousResolutionRule
- and ConnectUsingNonConnector
have been deprecated,
- since they didn't comply to the usual rule class naming conventions yet.
- The replacements are in the subpackage `bestpractices`.
-
-**Experimental APIs**
-
-* Together with the new programmatic API the interface
- TextFile
has been added as *experimental*. It intends
- to replace DataSource
and SourceCode
in the long term.
-
- This interface will change in PMD 7 to support read/write operations
- and other things. You don't need to use it in PMD 6, as FileCollector
- decouples you from this. A file collector is available through PmdAnalysis#files
.
-
-#### 6.43.0
-
-**Deprecated API**
-
-Some API deprecations were performed in core PMD classes, to improve compatibility with PMD 7.
-- Report
: the constructor and other construction methods like addViolation or createReport
-- RuleContext
: all constructors, getters and setters. A new set
- of stable methods, matching those in PMD 7, was added to replace the `addViolation`
- overloads of AbstractRule
. In PMD 7, `RuleContext` will
- be the API to report violations, and it can already be used as such in PMD 6.
-- The field configuration
is unused and will be removed.
-
-**Internal API**
-
-Those APIs are not intended to be used by clients, and will be hidden or removed with PMD 7.0.0.
-You can identify them with the `@InternalApi` annotation. You'll also get a deprecation warning.
-
-- RuleSet
: methods that serve to apply rules, including `apply`, `start`, `end`, `removeDysfunctionalRules`
-- AbstractAccumulatingRenderer#renderFileReport
is internal API
- and should not be overridden in own renderers.
-
-**Changed API**
-
-It is now forbidden to report a violation:
-- With a `null` node
-- With a `null` message
-- With a `null` set of format arguments (prefer a zero-length array)
-
-Note that the message is set from the XML rule declaration, so this is only relevant
-if you instantiate rules manually.
-
-RuleContext
now requires setting the current rule before calling
-apply
. This is
-done automatically by `RuleSet#apply` and such. Creating and configuring a
-`RuleContext` manually is strongly advised against, as the lifecycle of `RuleContext`
-will change drastically in PMD 7.
-
-#### 6.42.0
-
-No changes.
-
-#### 6.41.0
-
-**Command Line Interface**
-
-The command line options for PMD and CPD now use GNU-syle long options format. E.g. instead of `-rulesets` the
-preferred usage is now `--rulesets`. Alternatively one can still use the short option `-R`.
-Some options also have been renamed to a more consistent casing pattern at the same time
-(`--fail-on-violation` instead of `-failOnViolation`).
-The old single-dash options are still supported but are deprecated and will be removed with PMD 7.
-This change makes the command line interface more consistent within PMD and also less surprising
-compared to other cli tools.
-
-The changes in detail for PMD:
-
-| old option | new option |
-|---------------------------|------------------------------|
-| `-rulesets` | `--rulesets` (or `-R`) |
-| `-uri` | `--uri` |
-| `-dir` | `--dir` (or `-d`) |
-| `-filelist` | `--file-list` |
-| `-ignorelist` | `--ignore-list` |
-| `-format` | `--format` (or `-f`) |
-| `-debug` | `--debug` |
-| `-verbose` | `--verbose` |
-| `-help` | `--help` |
-| `-encoding` | `--encoding` |
-| `-threads` | `--threads` |
-| `-benchmark` | `--benchmark` |
-| `-stress` | `--stress` |
-| `-shortnames` | `--short-names` |
-| `-showsuppressed` | `--show-suppressed` |
-| `-suppressmarker` | `--suppress-marker` |
-| `-minimumpriority` | `--minimum-priority` |
-| `-property` | `--property` |
-| `-reportfile` | `--report-file` |
-| `-force-language` | `--force-language` |
-| `-auxclasspath` | `--aux-classpath` |
-| `-failOnViolation` | `--fail-on-violation` |
-| `--failOnViolation` | `--fail-on-violation` |
-| `-norulesetcompatibility` | `--no-ruleset-compatibility` |
-| `-cache` | `--cache` |
-| `-no-cache` | `--no-cache` |
-
-The changes in detail for CPD:
-
-| old option | new option |
-|---------------------|-----------------------|
-| `--failOnViolation` | `--fail-on-violation` |
-| `-failOnViolation` | `--fail-on-violation` |
-| `--filelist` | `--file-list` |
-
-#### 6.40.0
-
-**Experimental APIs**
-
-* The interface ASTCommentContainer
has been added to the Apex AST.
- It provides a way to check whether a node contains at least one comment. Currently, this is only implemented for
- ASTCatchBlockStatement
and used by the rule
- [`EmptyCatchBlock`](https://docs.pmd-code.org/pmd-doc-7.0.0/pmd_rules_apex_errorprone.html#emptycatchblock).
- This information is also available via XPath attribute `@ContainsComment`.
-
-#### 6.39.0
-
-No changes.
-
-#### 6.38.0
-
-No changes.
-
-#### 6.37.0
-
-**PMD CLI**
-
-* PMD has a new CLI option `-force-language`. With that a language can be forced to be used for all input files,
- irrespective of filenames. When using this option, the automatic language selection by extension is disabled
- and all files are tried to be parsed with the given language. Parsing errors are ignored and unparsable files
- are skipped.
-
- This option allows to use the xml language for files, that don't use xml as extension.
- See also the examples on [PMD CLI reference](pmd_userdocs_cli_reference.html#analyze-other-xml-formats).
-
-**Experimental APIs**
-
-* The AST types and APIs around Sealed Classes are not experimental anymore:
- * ASTClassOrInterfaceDeclaration#isSealed
,
- ASTClassOrInterfaceDeclaration#isNonSealed
,
- ASTClassOrInterfaceDeclaration#getPermittedSubclasses
- * ASTPermitsList
-
-**Internal API**
-
-Those APIs are not intended to be used by clients, and will be hidden or removed with PMD 7.0.0.
-You can identify them with the `@InternalApi` annotation. You'll also get a deprecation warning.
-
-* The inner class net.sourceforge.pmd.cpd.TokenEntry.State
is considered to be internal API.
- It will probably be moved away with PMD 7.
-
-#### 6.36.0
-
-No changes.
-
-#### 6.35.0
-
-**Deprecated API**
-
-* PMD#doPMD
is deprecated.
- Use PMD#runPmd
instead.
-* PMD#run
is deprecated.
- Use PMD#runPmd
instead.
-* ThreadSafeReportListener
and the methods to use them in Report
- (addListener
,
- getListeners
, addListeners
)
- are deprecated. This functionality will be replaced by another TBD mechanism in PMD 7.
-
-#### 6.34.0
-
-No changes.
-
-#### 6.33.0
-
-No changes.
-
-#### 6.32.0
-
-**Experimental APIs**
-
-* The experimental class `ASTTypeTestPattern` has been renamed to ASTTypePattern
- in order to align the naming to the JLS.
-* The experimental class `ASTRecordConstructorDeclaration` has been renamed to ASTCompactConstructorDeclaration
- in order to align the naming to the JLS.
-* The AST types and APIs around Pattern Matching and Records are not experimental anymore:
- * ASTVariableId#isPatternBinding
- * ASTPattern
- * ASTTypePattern
- * ASTRecordDeclaration
- * ASTRecordComponentList
- * ASTRecordComponent
- * ASTRecordBody
- * ASTCompactConstructorDeclaration
-
-**Internal API**
-
-Those APIs are not intended to be used by clients, and will be hidden or removed with PMD 7.0.0.
-You can identify them with the `@InternalApi` annotation. You'll also get a deprecation warning.
-
-* The protected or public member of the Java rule AvoidUsingHardCodedIPRule
- are deprecated and considered to be internal API. They will be removed with PMD 7.
-
-#### 6.31.0
-
-**Deprecated API**
-
-* AbstractDomXmlRule
-* AbstractWsdlRule
-* A few methods of AbstractXmlRule
-
-**Experimental APIs**
-
-* The method GenericToken#getKind
has been added as experimental. This
- unifies the token interface for both JavaCC and Antlr. The already existing method
- AntlrToken#getKind
is therefore experimental as well. The
- returned constant depends on the actual language and might change whenever the grammar
- of the language is changed.
-
-#### 6.30.0
-
-**Deprecated API**
-
-**Around RuleSet parsing**
-
-* RuleSetFactory
and RulesetsFactoryUtils
have been deprecated in favor of RuleSetLoader
. This is easier to configure, and more maintainable than the multiple overloads of `RulesetsFactoryUtils`.
-* Some static creation methods have been added to RuleSet
for simple cases, eg forSingleRule
. These replace some counterparts in RuleSetFactory
-* Since RuleSets
is also deprecated, many APIs that require a RuleSets instance now are deprecated, and have a counterpart that expects a `ListRuleSetReferenceId
, RuleSetReference
, RuleSetFactoryCompatibility
are deprecated. They are most likely not relevant outside of the implementation of pmd-core.
-
-**Around the `PMD` class**
-
-Many classes around PMD's entry point (PMD
) have been deprecated as internal, including:
-* The contents of the packages net.sourceforge.pmd.cli
in pmd-core, net.sourceforge.pmd.processor
-* SourceCodeProcessor
-* The constructors of PMD
(the class will be made a utility class)
-
-**Miscellaneous**
-
-* ASTPackageDeclaration#getPackageNameImage
,
- ASTTypeParameter#getParameterName
- and the corresponding XPath attributes. In both cases they're replaced with a new method `getName`,
- the attribute is `@Name`.
-* ASTClassOrInterfaceBody#isAnonymousInnerClass
,
- and ASTClassOrInterfaceBody#isEnumChild
,
- refs [#905](https://github.com/pmd/pmd/issues/905)
-
-**Internal API**
-
-Those APIs are not intended to be used by clients, and will be hidden or removed with PMD 7.0.0.
-You can identify them with the `@InternalApi` annotation. You'll also get a deprecation warning.
-
-* net.sourceforge.pmd.lang.ecmascript.Ecmascript3Handler
-* net.sourceforge.pmd.lang.ecmascript.Ecmascript3Parser
-* EcmascriptParser#parserOptions
-* EcmascriptParser#getSuppressMap
-* net.sourceforge.pmd.lang.rule.ParametricRuleViolation
-* ParserOptions#suppressMarker
-* net.sourceforge.pmd.lang.modelica.rule.ModelicaRuleViolationFactory
-
-#### 6.29.0
-
-No changes.
-
-#### 6.28.0
-
-**Deprecated API**
-
-**For removal**
-
-* net.sourceforge.pmd.RuleViolationComparator
. Use RuleViolation#DEFAULT_COMPARATOR
instead.
-* net.sourceforge.pmd.cpd.AbstractTokenizer
. Use net.sourceforge.pmd.cpd.AnyCpdLexer
instead (previously called AnyTokenizer).
-* net.sourceforge.pmd.cpd.FortranTokenizer
. Was replaced by an AnyCpdLexer
. Use FortranLanguageModule#createCpdLexer
anyway.
-* net.sourceforge.pmd.cpd.PerlTokenizer
. Was replaced by an AnyCpdLexer
. Use PerlLanguageModule#createCpdLexer
anyway.
-* net.sourceforge.pmd.cpd.RubyTokenizer
. Was replaced by an AnyCpdLexer
. Use RubyLanguageModule#createCpdLexer
anyway.
-* RuleReference#getOverriddenLanguage
and
- RuleReference#setLanguage
-* Antlr4 generated lexers:
- * net.sourceforge.pmd.lang.cs.antlr4.CSharpLexer
will be moved to package `net.sourceforge.pmd.lang.cs.ast` with PMD 7.
- * net.sourceforge.pmd.lang.dart.antlr4.Dart2Lexer
will be renamed to `DartLexer` and moved to package
- `net.sourceforge.pmd.lang.dart.ast` with PMD 7. All other classes in the old package will be removed.
- * net.sourceforge.pmd.lang.go.antlr4.GolangLexer
will be moved to package
- `net.sourceforge.pmd.lang.go.ast` with PMD 7. All other classes in the old package will be removed.
- * net.sourceforge.pmd.lang.kotlin.antlr4.Kotlin
will be renamed to `KotlinLexer` and moved to package
- `net.sourceforge.pmd.lang.kotlin.ast` with PMD 7.
- * net.sourceforge.pmd.lang.lua.antlr4.LuaLexer
will be moved to package
- `net.sourceforge.pmd.lang.lua.ast` with PMD 7. All other classes in the old package will be removed.
-
-#### 6.27.0
-
-* XML rule definition in rulesets: In PMD 7, the `language` attribute will be required on all `rule`
- elements that declare a new rule. Some base rule classes set the language implicitly in their
- constructor, and so this is not required in all cases for the rule to work. But this
- behavior will be discontinued in PMD 7, so missing `language` attributes are now
- reported as a forward compatibility warning.
-
-**Deprecated API**
-
-**For removal**
-
-* Rule#getParserOptions
-* Parser#getParserOptions
-* AbstractParser
-* RuleContext#removeAttribute
-* RuleContext#getAttribute
-* RuleContext#setAttribute
-* ApexParserOptions
-* ASTThrowStatement#getFirstClassOrInterfaceTypeImage
-* EcmascriptParserOptions
-* EcmascriptXPathRule
-* XmlParserOptions
-* XmlXPathRule
-* Properties of AbstractXmlRule
-
-* net.sourceforge.pmd.Report.ReadableDuration
-* Many methods of net.sourceforge.pmd.Report
. They are replaced by accessors
- that produce a List. For example, iterator()
- (and implementing Iterable) and isEmpty()
are both
- replaced by getViolations()
.
-
-* The dataflow codebase is deprecated for removal in PMD 7. This includes all code in the following packages, and their subpackages:
- * net.sourceforge.pmd.lang.plsql.dfa
- * net.sourceforge.pmd.lang.java.dfa
- * net.sourceforge.pmd.lang.dfa
- * and the class PLSQLDataFlowHandler
-
-* VfSimpleCharStream
-
-* ASTJspDeclarations
-* ASTJspDocument
-* ScalaParserVisitorAdapter#zero
-* ScalaParserVisitorAdapter#combine
-* ApexParserVisitorReducedAdapter
-* JavaParserVisitorReducedAdapter
-
-* TypeHelper
is deprecated in
- favor of TypeTestUtil
, which has the
- same functionality, but a slightly changed API.
-* Many of the classes in net.sourceforge.pmd.lang.java.symboltable
- are deprecated as internal API.
-
-#### 6.26.0
-
-**Deprecated API**
-
-**For removal**
-
-* RuleChainVisitor
and all implementations in language modules
-* AbstractRuleChainVisitor
-* Language#getRuleChainVisitorClass
-* BaseLanguageModule#<init>
-* ImportWrapper
-
-#### 6.25.0
-
-* The maven module `net.sourceforge.pmd:pmd-scala` is deprecated. Use `net.sourceforge.pmd:pmd-scala_2.13`
- or `net.sourceforge.pmd:pmd-scala_2.12` instead.
-
-* Rule implementation classes are internal API and should not be used by clients directly.
- The rules should only be referenced via their entry in the corresponding category ruleset
- (e.g. `AbstractIgnoredAnnotationRule
(Java)
-* AbstractInefficientZeroCheck
(Java)
-* AbstractJUnitRule
(Java)
-* AbstractJavaMetricsRule
(Java)
-* AbstractLombokAwareRule
(Java)
-* AbstractPoorMethodCall
(Java)
-* AbstractSunSecureRule
(Java)
-* AbstractNcssCountRule
(Java)
-* AbstractCommentRule
(Java)
-* AbstractOptimizationRule
(Java)
-* RegexHelper
(Java)
-* AbstractApexUnitTestRule
(Apex)
-* AbstractNcssCountRule
(Apex)
-* AbstractNcssCountRule
(PLSQL)
-* ApexParser
-* ApexHandler
-* RuleChain
-* RuleSets
-* RulesetsFactoryUtils#getRuleSets
-
-**For removal**
-
-* TokenEntry#TokenEntry
-* AbstractTokenizerTest
. Use CpdTextComparisonTest in module pmd-lang-test instead.
- For details see
- [Testing your implementation](pmd_devdocs_major_adding_new_cpd_language.html#testing-your-implementation)
- in the developer documentation.
-* ASTAnnotation#suppresses
(Apex)
-* ApexXPathRule
(Apex)
-* SymbolTableTestRule
(Java)
-* InefficientStringBufferingRule#isInStringBufferOperation
-
-#### 6.24.0
-
-**Deprecated APIs**
-
-* BaseLanguageModule#addVersion(String, LanguageVersionHandler, boolean)
-* Some members of TokenMgrError
, in particular, a new constructor is available
- that should be preferred to the old ones
-* ANTLRSyntaxError
-
-**Experimental APIs**
-
-**Note:** Experimental APIs are identified with the annotation Experimental
,
-see its javadoc for details
-
-* The experimental methods in BaseLanguageModule
have been replaced by a
- definitive API.
-
-#### 6.23.0
-
-**Deprecated APIs**
-
-**Internal API**
-
-Those APIs are not intended to be used by clients, and will be hidden or removed with PMD 7.0.0.
-You can identify them with the `@InternalApi` annotation. You'll also get a deprecation warning.
-
-* AbstractXPathRuleQuery
-* JaxenXPathRuleQuery
-* SaxonXPathRuleQuery
-* XPathRuleQuery
-
-**In ASTs**
-
-As part of the changes we'd like to do to AST classes for 7.0.0, we would like to
-hide some methods and constructors that rule writers should not have access to.
-The following usages are now deprecated in the **Apex**, **Javascript**, **PL/SQL**, **Scala** and **Visualforce** ASTs:
-
-* Manual instantiation of nodes. **Constructors of node classes are deprecated** and
- marked InternalApi
. Nodes should only be obtained from the parser,
- which for rules, means that they never need to instantiate node themselves.
- Those constructors will be made package private with 7.0.0.
-* **Subclassing of abstract node classes, or usage of their type**. The base classes are internal API
- and will be hidden in version 7.0.0. You should not couple your code to them.
- * In the meantime you should use interfaces like VfNode
or
- Node
, or the other published interfaces in this package,
- to refer to nodes generically.
- * Concrete node classes will **be made final** with 7.0.0.
-* Setters found in any node class or interface. **Rules should consider the AST immutable**.
- We will make those setters package private with 7.0.0.
-* The implementation classes of Parser
(eg VfParser
) are deprecated and should not be used directly.
- Use LanguageVersionHandler#getParser
instead.
-* The implementation classes of TokenManager
(eg VfTokenManager
) are deprecated and should not be used outside of our implementation.
- **This also affects CPD-only modules**.
-
-These deprecations are added to the following language modules in this release.
-Please look at the package documentation to find out the full list of deprecations.
-* Apex: net.sourceforge.pmd.lang.apex.ast
-* Javascript: net.sourceforge.pmd.lang.ecmascript.ast
-* PL/SQL: net.sourceforge.pmd.lang.plsql.ast
-* Scala: net.sourceforge.pmd.lang.scala.ast
-* Visualforce: net.sourceforge.pmd.lang.vf.ast
-
-These deprecations have already been rolled out in a previous version for the
-following languages:
-* Java: net.sourceforge.pmd.lang.java.ast
-* Java Server Pages: net.sourceforge.pmd.lang.jsp.ast
-* Velocity Template Language: net.sourceforge.pmd.lang.vm.ast
-
-Outside of these packages, these changes also concern the following TokenManager
-implementations, and their corresponding Parser if it exists (in the same package):
-
-* CppTokenManager
-* JavaTokenManager
-* Ecmascript5TokenManager
-* JspTokenManager
-* MatlabTokenManager
-* ModelicaTokenManager
-* ObjectiveCTokenManager
-* PLSQLTokenManager
-* PythonTokenManager
-* VfTokenManager
-* VmTokenManager
-
-
-In the **Java AST** the following attributes are deprecated and will issue a warning when used in XPath rules:
-
-* ASTAdditiveExpression#getImage
- use `getOperator()` instead
-* ASTVariableDeclaratorId#getImage
- use `getName()` instead
-* ASTVariableDeclaratorId#getVariableName
- use `getName()` instead
-
-**For removal**
-
-* Parser#getTokenManager
-* TokenManager#setFileName
-* AbstractTokenManager#setFileName
-* AbstractTokenManager#getFileName
-* AntlrToken#getType
- use `getKind()` instead.
-* ImmutableLanguage
-* MockRule
-* Node#getFirstParentOfAnyType
-* Node#getAsDocument
-* AbstractNode#hasDescendantOfAnyType
-* ASTRecordDeclaration#getComponentList
-* Multiple fields, constructors and methods in XPathRule
. See javadoc for details.
-
-#### 6.22.0
-
-**Deprecated APIs**
-
-**Internal API**
-
-Those APIs are not intended to be used by clients, and will be hidden or removed with PMD 7.0.0.
-You can identify them with the `@InternalApi` annotation. You'll also get a deprecation warning.
-
-* JavaLanguageHandler
-* JavaLanguageParser
-* JavaDataFlowHandler
-* Implementations of RuleViolationFactory
in each
- language module, eg JavaRuleViolationFactory
.
- See javadoc of RuleViolationFactory
.
-* Implementations of RuleViolation
in each language module,
- eg JavaRuleViolation
. See javadoc of
- RuleViolation
.
-
-* RuleFactory
-* RuleBuilder
-* Constructors of RuleSetFactory
, use factory methods from RulesetsFactoryUtils
instead
-* getRulesetFactory
-
-* AbstractApexNode
-* AbstractApexNodeBase
, and the related `visit`
- methods on ApexParserVisitor
and its implementations.
- Use ApexNode
instead, now considers comments too.
-
-**For removal**
-
-* pmd-core
- * DFAGraphRule
and its implementations
- * DFAGraphMethod
- * Many methods on the Node
interface
- and AbstractNode
base class. See their javadoc for details.
- * Node#isFindBoundary
is deprecated for XPath queries.
- * Many APIs of `net.sourceforge.pmd.lang.metrics`, though most of them were internal and
- probably not used directly outside of PMD. Use MetricsUtil
as
- a replacement for the language-specific façades too.
- * QualifiableNode
, QualifiedName
-* pmd-java
- * AbstractJavaParser
- * AbstractJavaHandler
- * [`ASTAnyTypeDeclaration.TypeKind`](https://docs.pmd-code.org/apidocs/pmd-java/6.55.0/net/sourceforge/pmd/lang/java/ast/ASTAnyTypeDeclaration.TypeKind.html)
- * ASTAnyTypeDeclaration#getTypeKind
- * JavaQualifiedName
- * ASTCatchStatement#getBlock
- * ASTCompilationUnit#declarationsAreInDefaultPackage
- * JavaQualifiableNode
- * ASTAnyTypeDeclaration#getQualifiedName
- * ASTMethodOrConstructorDeclaration#getQualifiedName
- * ASTLambdaExpression#getQualifiedName
- * net.sourceforge.pmd.lang.java.qname
and its contents
- * MethodLikeNode
- * Its methods will also be removed from its implementations,
- ASTMethodOrConstructorDeclaration
,
- ASTLambdaExpression
.
- * ASTAnyTypeDeclaration#getImage
will be removed. Please use `getSimpleName()`
- instead. This affects ASTAnnotationTypeDeclaration#getImage
,
- ASTClassOrInterfaceDeclaration#getImage
, and
- ASTEnumDeclaration#getImage
.
- * Several methods of ASTTryStatement
, replacements with other names
- have been added. This includes the XPath attribute `@Finally`, replace it with a test for `child::FinallyStatement`.
- * Several methods named `getGuardExpressionNode` are replaced with `getCondition`. This affects the
- following nodes: WhileStatement, DoStatement, ForStatement, IfStatement, AssertStatement, ConditionalExpression.
- * ASTYieldStatement
will not implement TypeNode
- anymore come 7.0.0. Test the type of the expression nested within it.
- * JavaMetrics
, JavaMetricsComputer
- * ASTArguments#getArgumentCount
.
- Use size
instead.
- * ASTFormalParameters#getParameterCount
.
- Use size
instead.
-* pmd-apex
- * ApexMetrics
, ApexMetricsComputer
-
-**In ASTs (JSP)**
-
-As part of the changes we'd like to do to AST classes for 7.0.0, we would like to
-hide some methods and constructors that rule writers should not have access to.
-The following usages are now deprecated **in the JSP AST** (with other languages to come):
-
-* Manual instantiation of nodes. **Constructors of node classes are deprecated** and
- marked InternalApi
. Nodes should only be obtained from the parser,
- which for rules, means that they never need to instantiate node themselves.
- Those constructors will be made package private with 7.0.0.
-* **Subclassing of abstract node classes, or usage of their type**. The base classes are internal API
- and will be hidden in version 7.0.0. You should not couple your code to them.
- * In the meantime you should use interfaces like JspNode
or
- Node
, or the other published interfaces in this package,
- to refer to nodes generically.
- * Concrete node classes will **be made final** with 7.0.0.
-* Setters found in any node class or interface. **Rules should consider the AST immutable**.
- We will make those setters package private with 7.0.0.
-* The class JspParser
is deprecated and should not be used directly.
- Use LanguageVersionHandler#getParser
instead.
-
-Please look at net.sourceforge.pmd.lang.jsp.ast
to find out the full list of deprecations.
-
-**In ASTs (Velocity)**
-
-As part of the changes we'd like to do to AST classes for 7.0.0, we would like to
-hide some methods and constructors that rule writers should not have access to.
-The following usages are now deprecated **in the VM AST** (with other languages to come):
-
-* Manual instantiation of nodes. **Constructors of node classes are deprecated** and
- marked InternalApi
. Nodes should only be obtained from the parser,
- which for rules, means that they never need to instantiate node themselves.
- Those constructors will be made package private with 7.0.0.
-* **Subclassing of abstract node classes, or usage of their type**. The base classes are internal API
- and will be hidden in version 7.0.0. You should not couple your code to them.
- * In the meantime you should use interfaces like VtlNode
or
- Node
, or the other published interfaces in this package,
- to refer to nodes generically.
- * Concrete node classes will **be made final** with 7.0.0.
-* Setters found in any node class or interface. **Rules should consider the AST immutable**.
- We will make those setters package private with 7.0.0.
-* The package net.sourceforge.pmd.lang.vm.directive
as well as the classes
- DirectiveMapper
and LogUtil
are deprecated
- for removal. They were only used internally during parsing.
-* The class VmParser
is deprecated and should not be used directly.
- Use LanguageVersionHandler#getParser
instead.
-
-Please look at net.sourceforge.pmd.lang.vm.ast
to find out the full list of deprecations.
-
-**PLSQL AST**
-
-The production and node ASTCursorBody
was unnecessary, not used and has been removed. Cursors have been already
-parsed as ASTCursorSpecification
.
-
-#### 6.21.0
-
-**Deprecated APIs**
-
-**Internal API**
-
-Those APIs are not intended to be used by clients, and will be hidden or removed with PMD 7.0.0.
-You can identify them with the `@InternalApi` annotation. You'll also get a deprecation warning.
-
-* JavaLanguageHandler
-* JavaLanguageParser
-* JavaDataFlowHandler
-* Implementations of RuleViolationFactory
in each
- language module, eg JavaRuleViolationFactory
.
- See javadoc of RuleViolationFactory
.
-* Implementations of RuleViolation
in each language module,
- eg JavaRuleViolation
. See javadoc of
- RuleViolation
.
-
-* RuleFactory
-* RuleBuilder
-* Constructors of RuleSetFactory
, use factory methods from RulesetsFactoryUtils
instead
-* getRulesetFactory
-
-* AbstractApexNode
-* AbstractApexNodeBase
, and the related `visit`
- methods on ApexParserVisitor
and its implementations.
- Use ApexNode
instead, now considers comments too.
-
-* CharStream
, JavaCharStream
,
- SimpleCharStream
: these are APIs used by our JavaCC
- implementations and that will be moved/refactored for PMD 7.0.0. They should not
- be used, extended or implemented directly.
-* All classes generated by JavaCC, eg JJTJavaParserState
.
- This includes token classes, which will be replaced with a single implementation, and
- subclasses of ParseException
, whose usages will be replaced
- by just that superclass.
-
-**For removal**
-
-* pmd-core
- * Many methods on the Node
interface
- and AbstractNode
base class. See their javadoc for details.
- * Node#isFindBoundary
is deprecated for XPath queries.
-* pmd-java
- * AbstractJavaParser
- * AbstractJavaHandler
- * [`ASTAnyTypeDeclaration.TypeKind`](https://javadoc.io/page/net.sourceforge.pmd/pmd-java/6.55.0/net/sourceforge/pmd/lang/java/ast/ASTAnyTypeDeclaration.TypeKind.html)
- * ASTAnyTypeDeclaration#getTypeKind
- * JavaQualifiedName
- * ASTCatchStatement#getBlock
- * ASTCompilationUnit#declarationsAreInDefaultPackage
- * JavaQualifiableNode
- * ASTAnyTypeDeclaration#getQualifiedName
- * ASTMethodOrConstructorDeclaration#getQualifiedName
- * ASTLambdaExpression#getQualifiedName
- * net.sourceforge.pmd.lang.java.qname
and its contents
- * MethodLikeNode
- * Its methods will also be removed from its implementations,
- ASTMethodOrConstructorDeclaration
,
- ASTLambdaExpression
.
- * ASTAnyTypeDeclaration#getImage
will be removed. Please use `getSimpleName()`
- instead. This affects ASTAnnotationTypeDeclaration#getImage
,
- ASTClassOrInterfaceDeclaration#getImage
, and
- ASTEnumDeclaration#getImage
.
- * Several methods of ASTTryStatement
, replacements with other names
- have been added. This includes the XPath attribute `@Finally`, replace it with a test for `child::FinallyStatement`.
- * Several methods named `getGuardExpressionNode` are replaced with `getCondition`. This affects the
- following nodes: WhileStatement, DoStatement, ForStatement, IfStatement, AssertStatement, ConditionalExpression.
- * ASTYieldStatement
will not implement TypeNode
- anymore come 7.0.0. Test the type of the expression nested within it.
-
-#### 6.20.0
-
-No changes.
-
-#### 6.19.0
-
-**Deprecated APIs**
-
-**For removal**
-
-* pmd-core
- * All the package net.sourceforge.pmd.dcd
and its subpackages. See DCD
.
- * In LanguageRegistry
:
- * commaSeparatedTerseNamesForLanguageVersion
- * commaSeparatedTerseNamesForLanguage
- * findAllVersions
- * findLanguageVersionByTerseName
- * getInstance
- * RuleSet#getExcludePatterns
. Use the new method getFileExclusions
instead.
- * RuleSet#getIncludePatterns
. Use the new method getFileInclusions
instead.
- * Parser#canParse
- * Parser#getSuppressMap
- * RuleBuilder#RuleBuilder
. Use the new constructor with the correct ResourceLoader instead.
- * RuleFactory#RuleFactory
. Use the new constructor with the correct ResourceLoader instead.
-* pmd-java
- * CanSuppressWarnings
and its implementations
- * isSuppressed
- * getDeclaringType
.
- * isSupressed
- * ASTMethodDeclarator
- * getMethodName
- * getBlock
- * getParameterCount
-* pmd-apex
- * CanSuppressWarnings
and its implementations
- * isSupressed
-
-**Internal APIs**
-
-* pmd-core
- * All the package net.sourceforge.pmd.util
and its subpackages,
- except net.sourceforge.pmd.util.datasource
and net.sourceforge.pmd.util.database
.
- * GridBagHelper
- * ColumnDescriptor
-
-
-#### 6.18.0
-
-**Changes to Renderer**
-
-* Each renderer has now a new method Renderer#setUseShortNames
which
- is used for implementing the "shortnames" CLI option. The method is automatically called by PMD, if this
- CLI option is in use. When rendering filenames to the report, the new helper method
- AbstractRenderer#determineFileName
should be used. This will change
- the filename to a short name, if the CLI option "shortnames" is used.
-
- Not adjusting custom renderers will make them render always the full file names and not honoring the
- CLI option "shortnames".
-
-**Deprecated APIs**
-
-**For removal**
-
-* The methods ASTImportDeclaration#getImportedNameNode
and
- ASTImportDeclaration#getPackage
have been deprecated and
- will be removed with PMD 7.0.0.
-* The method RuleContext#setSourceCodeFilename
has been deprecated
- and will be removed. The already existing method RuleContext#setSourceCodeFile
- should be used instead. The method RuleContext#getSourceCodeFilename
still
- exists and returns just the filename without the full path.
-* The method AbstractPMDProcessor#filenameFrom
has been
- deprecated. It was used to determine a "short name" of the file being analyzed, so that the report
- can use short names. However, this logic has been moved to the renderers.
-* The methods Report#metrics
and Report#hasMetrics
have
- been deprecated. They were leftovers from a previous deprecation round targeting
- StatisticalRule
.
-
-**Internal APIs**
-
-Those APIs are not intended to be used by clients, and will be hidden or removed with PMD 7.0.0. You can identify them with the `@InternalApi` annotation. You'll also get a deprecation warning.
-
-* pmd-core
- * net.sourceforge.pmd.cache
-* pmd-java
- * net.sourceforge.pmd.lang.java.typeresolution
: Everything, including
- subpackages, except TypeHelper
and
- JavaTypeDefinition
.
- * ASTCompilationUnit#getClassTypeResolver
-
-
-#### 6.17.0
-
-No changes.
-
-#### 6.16.0
-
-**Deprecated APIs**
-
-> Reminder: Please don't use members marked with the annotation InternalApi
, as they will
-> likely be removed, hidden, or otherwise intentionally broken with 7.0.0.
-
-
-**In ASTs**
-
-As part of the changes we'd like to do to AST classes for 7.0.0, we would like to
-hide some methods and constructors that rule writers should not have access to.
-The following usages are now deprecated **in the Java AST** (with other languages to come):
-
-* Manual instantiation of nodes. **Constructors of node classes are deprecated** and marked
- InternalApi
. Nodes should only be obtained from the parser, which for rules, means
- that never need to instantiate node themselves. Those constructors will be made package private with 7.0.0.
-* **Subclassing of abstract node classes, or usage of their type**. Version 7.0.0 will bring a new set of abstractions
- that will be public API, but the base classes are and will stay internal. You should not couple your code to them.
- * In the meantime you should use interfaces like JavaNode
or
- Node
, or the other published interfaces in this package, to refer to nodes generically.
- * Concrete node classes will **be made final** with 7.0.0.
-* Setters found in any node class or interface. **Rules should consider the AST immutable**. We will make those
- setters package private with 7.0.0.
-
-Please look at net.sourceforge.pmd.lang.java.ast
to find out the full list
-of deprecations.
-
-
-#### 6.15.0
-
-**Deprecated APIs**
-
-**For removal**
-
-* The `DumpFacades` in all languages, that could be used to transform a AST into a textual representation,
- will be removed with PMD 7. The rule designer is a better way to inspect nodes.
- * net.sourceforge.pmd.lang.apex.ast.DumpFacade
- * net.sourceforge.pmd.lang.java.ast.DumpFacade
- * net.sourceforge.pmd.lang.ecmascript.ast.DumpFacade
- * net.sourceforge.pmd.lang.jsp.ast.DumpFacade
- * net.sourceforge.pmd.lang.plsql.ast.DumpFacade
- * net.sourceforge.pmd.lang.vf.ast.DumpFacade
- * net.sourceforge.pmd.lang.vm.ast.AbstractVmNode#dump
- * net.sourceforge.pmd.lang.xml.ast.DumpFacade
-* The method LanguageVersionHandler#getDumpFacade
will be
- removed as well. It is deprecated, along with all its implementations in the subclasses of LanguageVersionHandler
.
-
-#### 6.14.0
-
-No changes.
-
-#### 6.13.0
-
-**Command Line Interface**
-
-The start scripts `run.sh`, `pmd.bat` and `cpd.bat` support the new environment variable `PMD_JAVA_OPTS`.
-This can be used to set arbitrary JVM options for running PMD, such as memory settings (e.g. `PMD_JAVA_OPTS=-Xmx512m`)
-or enable preview language features (e.g. `PMD_JAVA_OPTS=--enable-preview`).
-
-The previously available variables such as `OPTS` or `HEAPSIZE` are deprecated and will be removed with PMD 7.0.0.
-
-**Deprecated API**
-
-* CodeClimateRule
is deprecated in 7.0.0 because it was unused for 2 years and
- created an unwanted dependency.
- Properties "cc_categories", "cc_remediation_points_multiplier", "cc_block_highlighting" will also be removed.
- See [#1702](https://github.com/pmd/pmd/pull/1702) for more.
-
-* The Apex ruleset `rulesets/apex/ruleset.xml` has been deprecated and will be removed in 7.0.0. Please use the new
- quickstart ruleset `rulesets/apex/quickstart.xml` instead.
-
-#### 6.12.0
-
-No changes.
-
-#### 6.11.0
-
-* 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.
-
-#### 6.10.0
-
-**Properties framework**
-
-
-
-
-
-The properties framework is about to get a lifting, and for that reason, we need to deprecate a lot of APIs
-to remove them in 7.0.0. The proposed changes to the API are described [on the wiki](https://github.com/pmd/pmd/wiki/Property-framework-7-0-0)
-
-**Changes to how you define properties**
-
-* Construction of property descriptors has been possible through builders since 6.0.0. The 7.0.0 API will only allow
- construction through builders. The builder hierarchy, currently found in the package net.sourceforge.pmd.properties.builders
,
- is being replaced by the simpler PropertyBuilder
. Their APIs enjoy a high degree of source compatibility.
-
-* Concrete property classes like IntegerProperty
and StringMultiProperty
will gradually
- all be deprecated until 7.0.0. Their usages should be replaced by direct usage of the PropertyDescriptor
- interface, e.g. `PropertyDescriptorPropertyFactory
will become
- from 7.0.0 on the only provider for property descriptor builders. Each current property type will be replaced
- by a corresponding method on `PropertyFactory`:
- * IntegerProperty
is replaced by PropertyFactory#intProperty
- * IntegerMultiProperty
is replaced by PropertyFactory#intListProperty
-
- * FloatProperty
and DoubleProperty
are both replaced by PropertyFactory#doubleProperty
.
- Having a separate property for floats wasn't that useful.
- * Similarly, FloatMultiProperty
and DoubleMultiProperty
are replaced by PropertyFactory#doubleListProperty
.
-
- * StringProperty
is replaced by PropertyFactory#stringProperty
- * StringMultiProperty
is replaced by PropertyFactory#stringListProperty
-
- * RegexProperty
is replaced by PropertyFactory#regexProperty
-
- * EnumeratedProperty
is replaced by PropertyFactory#enumProperty
- * EnumeratedProperty
is replaced by PropertyFactory#enumListProperty
-
- * BooleanProperty
is replaced by PropertyFactory#booleanProperty
- * Its multi-valued counterpart, BooleanMultiProperty
, is not replaced, because it doesn't have a use case.
-
- * CharacterProperty
is replaced by PropertyFactory#charProperty
- * CharacterMultiProperty
is replaced by PropertyFactory#charListProperty
-
- * LongProperty
is replaced by PropertyFactory#longIntProperty
- * LongMultiProperty
is replaced by PropertyFactory#longIntListProperty
-
- * MethodProperty
, FileProperty
, TypeProperty
and their multi-valued counterparts
- are discontinued for lack of a use-case, and have no planned replacement in 7.0.0 for now.
-
-
-Here's an example:
-```java
-// Before 7.0.0, these are equivalent:
-IntegerProperty myProperty = new IntegerProperty("score", "Top score value", 1, 100, 40, 3.0f);
-IntegerProperty myProperty = IntegerProperty.named("score").desc("Top score value").range(1, 100).defaultValue(40).uiOrder(3.0f);
-
-// They both map to the following in 7.0.0
-PropertyDescriptorEnumeratedPropertyDescriptor
, NumericPropertyDescriptor
, PackagedPropertyDescriptor
,
- and the related builders (in net.sourceforge.pmd.properties.builders
) will be removed.
- These specialized interfaces allowed additional constraints to be enforced on the
- value of a property, but made the property class hierarchy very large and impractical
- to maintain. Their functionality will be mapped uniformly to PropertyConstraint
s,
- which will allow virtually any constraint to be defined, and improve documentation and error reporting. The
- related methods PropertyTypeId#isPropertyNumeric
and
- PropertyTypeId#isPropertyPackaged
are also deprecated.
-
-* MultiValuePropertyDescriptor
and SingleValuePropertyDescriptor
- are deprecated. 7.0.0 will introduce a new XML syntax which will remove the need for such a divide
- between single- and multi-valued properties. The method PropertyDescriptor#isMultiValue
will be removed
- accordingly.
-
-**Changes to the PropertyDescriptor interface**
-
-* preferredRowCount
is deprecated with no intended replacement. It was never implemented, and does not belong
- in this interface. The methods uiOrder
and `compareTo(PropertyDescriptor)` are deprecated for the
- same reason. These methods mix presentation logic with business logic and are not necessary for PropertyDescriptors to work.
- `PropertyDescriptor` will not extend `ComparablepropertyErrorFor
is deprecated and will be removed with no intended
- replacement. It's really just a shortcut for `prop.errorFor(rule.getProperty(prop))`.
-* `T `valueFrom(String)
and `String `asDelimitedString
`(T)` are deprecated and will be removed. These were
- used to serialize and deserialize properties to/from a string, but 7.0.0 will introduce a more flexible
- XML syntax which will make them obsolete.
-* isMultiValue
and type
are deprecated and won't be replaced. The new XML syntax will remove the need
- for a divide between multi- and single-value properties, and will allow arbitrary types to be represented.
- Since arbitrary types may be represented, `type` will become obsolete as it can't represent generic types,
- which will nevertheless be representable with the XML syntax. It was only used for documentation, but a
- new way to document these properties exhaustively will be added with 7.0.0.
-* errorFor
is deprecated as its return type will be changed to `Optionalnet.sourceforge.pmd.lang.ast.xpath
)
- are now deprecated. They'll be moved to an internal package come 7.0.0. Only Attribute
remains public API.
-
-* The classes PropertyDescriptorField
, PropertyDescriptorBuilderConversionWrapper
, and the methods
- PropertyDescriptor#attributeValuesById
, PropertyDescriptor#isDefinedExternally
and PropertyTypeId#getFactory
.
- These were used to read and write properties to and from XML, but were not intended as public API.
-
-* The class ValueParserConstants
and the interface ValueParser
.
-
-* All classes from net.sourceforge.pmd.lang.java.metrics.impl.visitors
are now considered internal API. They're deprecated
- and will be moved into an internal package with 7.0.0. To implement your own metrics visitors,
- JavaParserVisitorAdapter
should be directly subclassed.
-
-* LanguageVersionHandler#getDataFlowHandler()
, LanguageVersionHandler#getDFAGraphRule()
-
-* VisitorStarter
-
-**For removal**
-
-* All classes from net.sourceforge.pmd.properties.modules
will be removed.
-
-* The interface Dimensionable
has been deprecated.
- It gets in the way of a grammar change for 7.0.0 and won't be needed anymore (see [#997](https://github.com/pmd/pmd/issues/997)).
-
-* Several methods from ASTLocalVariableDeclaration
and ASTFieldDeclaration
have
- also been deprecated:
-
- * ASTFieldDeclaration
won't be a TypeNode
come 7.0.0, so
- getType
and
- getTypeDefinition
are deprecated.
-
- * The method `getVariableName` on those two nodes will be removed, too.
-
- * All these are deprecated because those nodes may declare several variables at once, possibly
- with different types (and obviously with different names). They both implement `Iterator<`ASTVariableId
`>`
- though, so you should iterate on each declared variable. See [#910](https://github.com/pmd/pmd/issues/910).
-
-* Visitor decorators are now deprecated and will be removed in PMD 7.0.0. They were originally a way to write
- composable visitors, used in the metrics framework, but they didn't prove cost-effective.
-
- * In net.sourceforge.pmd.lang.java.ast
: JavaParserDecoratedVisitor
, JavaParserControllessVisitor
,
- JavaParserControllessVisitorAdapter
, and JavaParserVisitorDecorator
are deprecated with no intended replacement.
-
-
-* The LanguageModules of several languages, that only support CPD execution, have been deprecated. These languages
- are not fully supported by PMD, so having a language module does not make sense. The functionality of CPD is
- not affected by this change. The following classes have been deprecated and will be removed with PMD 7.0.0:
-
- * CppHandler
- * CppLanguageModule
- * CppParser
- * CsLanguageModule
- * FortranLanguageModule
- * GroovyLanguageModule
- * MatlabHandler
- * MatlabLanguageModule
- * MatlabParser
- * ObjectiveCHandler
- * ObjectiveCLanguageModule
- * ObjectiveCParser
- * PhpLanguageModule
- * PythonHandler
- * PythonLanguageModule
- * PythonParser
- * RubyLanguageModule
-
-
-* Optional AST processing stages like symbol table, type resolution or data-flow analysis will be reified
- in 7.0.0 to factorise common logic and make them extensible. Further explanations about this change can be
- found on [#1426](https://github.com/pmd/pmd/pull/1426). Consequently, the following APIs are deprecated for
- removal:
- * In Rule
: isDfa()
, isTypeResolution()
, isMultifile()
and their
- respective setters.
- * In RuleSet
: usesDFA(Language)
, usesTypeResolution(Language)
, usesMultifile(Language)
- * In RuleSets
: usesDFA(Language)
, usesTypeResolution(Language)
, usesMultifile(Language)
- * In LanguageVersionHandler
: getDataFlowFacade()
, getSymbolFacade()
, getSymbolFacade(ClassLoader)
,
- getTypeResolutionFacade(ClassLoader)
, getQualifiedNameResolutionFacade(ClassLoader)
-
-#### 6.9.0
-
-No changes.
-
-#### 6.8.0
-
-* A couple of methods and fields in net.sourceforge.pmd.properties.AbstractPropertySource
have been
- deprecated, as they are replaced by already existing functionality or expose internal implementation
- details: `propertyDescriptors`, `propertyValuesByDescriptor`,
- `copyPropertyDescriptors()`, `copyPropertyValues()`, `ignoredProperties()`, `usesDefaultValues()`,
- `useDefaultValueFor()`.
-
-* Some methods in net.sourceforge.pmd.properties.PropertySource
have been deprecated as well:
- `usesDefaultValues()`, `useDefaultValueFor()`, `ignoredProperties()`.
-
-* The class net.sourceforge.pmd.lang.rule.AbstractDelegateRule
has been deprecated and will
- be removed with PMD 7.0.0. It is internally only in use by RuleReference.
-
-* The default constructor of net.sourceforge.pmd.lang.rule.RuleReference
has been deprecated
- and will be removed with PMD 7.0.0. RuleReferences should only be created by providing a Rule and
- a RuleSetReference. Furthermore, the following methods are deprecated: `setRuleReference()`,
- `hasOverriddenProperty()`, `usesDefaultValues()`, `useDefaultValueFor()`.
-
-#### 6.7.0
-
-* All classes in the package net.sourceforge.pmd.lang.dfa.report
have been deprecated and will be removed
- with PMD 7.0.0. This includes the class net.sourceforge.pmd.lang.dfa.report.ReportTree
. The reason is,
- that this class is very specific to Java and not suitable for other languages. It has only been used for
- `YAHTMLRenderer`, which has been rewritten to work without these classes.
-
-* The nodes RUNSIGNEDSHIFT and RSIGNEDSHIFT are deprecated and will be removed from the AST with PMD 7.0.0.
- These represented the operator of ShiftExpression in two cases out of three, but they're not needed and
- make ShiftExpression inconsistent. The operator of a ShiftExpression is now accessible through
- ShiftExpression#getOperator.
-
-#### 6.5.0
-
-* The utility class CommentUtil
has been deprecated and will be removed
- with PMD 7.0.0. Its methods have been intended to parse javadoc tags. A more useful solution will be added
- around the AST node `FormalComment`, which contains as children `JavadocElement` nodes, which in
- turn provide access to the `JavadocTag`.
-
- All comment AST nodes (`FormalComment`, `MultiLineComment`, `SingleLineComment`) have a new method
- `getFilteredComment()` which provide access to the comment text without the leading `/*` markers.
-
-* The method `AbstractCommentRule.tagsIndicesIn()` has been deprecated and will be removed with
- PMD 7.0.0. It is not very useful, since it doesn't extract the information
- in a useful way. You would still need check, which tags have been found, and with which
- data they might be accompanied.
-
-#### 6.4.0
-
-* The following classes in package net.sourceforge.pmd.benchmark
have been deprecated: Benchmark
, Benchmarker
,
- BenchmarkReport
, BenchmarkResult
, RuleDuration
, StringBuilderCR
and TextReport
. Their API is not supported anymore
- and is disconnected from the internals of PMD. Use the newer API based around TimeTracker
instead, which can be found
- in the same package.
-* The class TypeOfFunction
has been deprecated. Use the newer TypeIsFunction
in the same package.
-* The `typeof` methods in JavaFunctions
have been deprecated.
- Use the newer `typeIs` method in the same class instead.
-* The methods `isA`, `isEither` and `isNeither` of TypeHelper
.
- Use the new `isExactlyAny` and `isExactlyNone` methods in the same class instead.
-
-#### 6.2.0
-
-* The static method PMDParameters#transformParametersIntoConfiguration
is now deprecated,
- for removal in 7.0.0. The new instance method toConfiguration
replaces it.
-
-* The method ASTConstructorDeclaration#getParameters
has been deprecated in favor of the new method
- getFormalParameters
. This method is available for both
- ASTConstructorDeclaration
and ASTMethodDeclaration
.
-
-#### 6.1.0
-
-* The method getXPathNodeName
is added to the Node
interface, which removes the
- use of `toString` of a node to get its XPath element name (see [#569](https://github.com/pmd/pmd/issues/569)).
- * The default implementation provided in AbstractNode
, will be removed with 7.0.0
- * With 7.0.0, the `Node.toString` method will not necessarily provide its XPath node
- name anymore.
-
-* The interface net.sourceforge.pmd.cpd.Renderer
has been deprecated. A new interface
- CPDRenderer
has been introduced to replace it. The main
- difference is that the new interface is meant to render directly to a `java.io.Writer`
- rather than to a String. This allows to greatly reduce the memory footprint of CPD, as on
- large projects, with many duplications, it was causing `OutOfMemoryError`s (see [#795](https://github.com/pmd/pmd/issues/795)).
-
- net.sourceforge.pmd.cpd.FileReporter
has also been deprecated as part of this change, as it's no longer needed.
-
-#### 6.0.1
-
-* The constant PMD#VERSION
has been deprecated and will be removed with PMD 7.0.0.
- Please use PMDVersion#VERSION
instead.
-
-
-## 🐛 Fixed Issues
-
-* miscellaneous
- * [#881](https://github.com/pmd/pmd/issues/881): \[all] Breaking API changes for 7.0.0
- * [#896](https://github.com/pmd/pmd/issues/896): \[all] Use slf4j
- * [#1431](https://github.com/pmd/pmd/pull/1431): \[ui] Remove old GUI applications (designerold, bgastviewer)
- * [#1451](https://github.com/pmd/pmd/issues/1451): \[core] RulesetFactoryCompatibility stores the whole ruleset file in memory as a string
- * [#2496](https://github.com/pmd/pmd/issues/2496): Update PMD 7 Logo on landing page
- * [#2497](https://github.com/pmd/pmd/issues/2497): PMD 7 Logo page
- * [#2498](https://github.com/pmd/pmd/issues/2498): Update PMD 7 Logo in documentation
- * [#3797](https://github.com/pmd/pmd/issues/3797): \[all] Use JUnit5
- * [#4462](https://github.com/pmd/pmd/issues/4462): Provide Software Bill of Materials (SBOM)
- * [#4460](https://github.com/pmd/pmd/pull/4460): Fix assembly-plugin warnings
- * [#4582](https://github.com/pmd/pmd/issues/4582): \[dist] Download link broken
- * [#4586](https://github.com/pmd/pmd/pull/4586): Use explicit encoding in ruleset xml files
- * [#4642](https://github.com/pmd/pmd/issues/4642): Update regression tests with Java 21 language features
- * [#4691](https://github.com/pmd/pmd/issues/4691): \[CVEs] Critical and High CEVs reported on PMD and PMD dependencies
- * [#4699](https://github.com/pmd/pmd/pull/4699): Make PMD buildable with java 21
- * [#4736](https://github.com/pmd/pmd/issues/4736): \[ci] Improve build procedure
- * [#4741](https://github.com/pmd/pmd/pull/4741): Add pmd-compat6 module for maven-pmd-plugin
- * [#4749](https://github.com/pmd/pmd/pull/4749): Fixes NoSuchMethodError on processing errors in pmd-compat6
- * [#4776](https://github.com/pmd/pmd/issues/4776): \[ci] Upgrade to ruby 3
- * [#4796](https://github.com/pmd/pmd/pull/4796): Remove deprecated and release rulesets
- * [#4823](https://github.com/pmd/pmd/pull/4823): Update to use renamed pmd-designer
- * [#4827](https://github.com/pmd/pmd/pull/4827): \[compat6] Support config errors and cpd for csharp
- * [#4830](https://github.com/pmd/pmd/issues/4830): Consolidate packages in each maven module
- * [#4867](https://github.com/pmd/pmd/issues/4867): \[dist] ./mvnw command not found in dist-src
-* ant
- * [#4080](https://github.com/pmd/pmd/issues/4080): \[ant] Split off Ant integration into a new submodule
-* core
- * [#880](https://github.com/pmd/pmd/issues/880): \[core] Make visitors generic
- * [#1027](https://github.com/pmd/pmd/issues/1027): \[core] Apply the new PropertyDescriptor<Pattern> type where applicable
- * [#1204](https://github.com/pmd/pmd/issues/1204): \[core] Allow numeric properties in XML to be within an unbounded range
- * [#1622](https://github.com/pmd/pmd/pull/1622): \[core] NodeStream API
- * [#1687](https://github.com/pmd/pmd/issues/1687): \[core] Deprecate and Remove XPath 1.0 support
- * [#1785](https://github.com/pmd/pmd/issues/1785): \[core] Allow abstract node types to be valid rulechain visits
- * [#1825](https://github.com/pmd/pmd/pull/1825): \[core] Support NoAttribute for XPath
- * [#2038](https://github.com/pmd/pmd/issues/2038): \[core] Remove DCD
- * [#2218](https://github.com/pmd/pmd/issues/2218): \[core] `isFindBoundary` should not be an attribute
- * [#2234](https://github.com/pmd/pmd/issues/2234): \[core] Consolidate PMD CLI into a single command
- * [#2239](https://github.com/pmd/pmd/issues/2239): \[core] Merging Javacc build scripts
- * [#2500](https://github.com/pmd/pmd/issues/2500): \[core] Clarify API for ANTLR based languages
- * [#2518](https://github.com/pmd/pmd/issues/2518): \[core] Language properties
- * [#2602](https://github.com/pmd/pmd/issues/2602): \[core] Remove ParserOptions
- * [#2614](https://github.com/pmd/pmd/pull/2614): \[core] Upgrade Saxon, add XPath 3.1, remove Jaxen
- * [#2696](https://github.com/pmd/pmd/pull/2696): \[core] Remove DFA
- * [#2821](https://github.com/pmd/pmd/issues/2821): \[core] Rule processing error filenames are missing paths
- * [#2873](https://github.com/pmd/pmd/issues/2873): \[core] Utility classes in pmd 7
- * [#2885](https://github.com/pmd/pmd/issues/2885): \[core] Error recovery mode
- * [#3203](https://github.com/pmd/pmd/issues/3203): \[core] Replace RuleViolationFactory implementations with ViolationDecorator
- * [#3692](https://github.com/pmd/pmd/pull/3692): \[core] Analysis listeners
- * [#3782](https://github.com/pmd/pmd/issues/3782): \[core] Language lifecycle
- * [#3815](https://github.com/pmd/pmd/issues/3815): \[core] Update Saxon HE to 10.7
- * [#3893](https://github.com/pmd/pmd/pull/3893): \[core] Text documents
- * [#3902](https://github.com/pmd/pmd/issues/3902): \[core] Violation decorators
- * [#3903](https://github.com/pmd/pmd/issues/3903): \[core] Consolidate `n.s.pmd.reporting` package
- * [#3905](https://github.com/pmd/pmd/issues/3905): \[core] Stabilize tree export API
- * [#3917](https://github.com/pmd/pmd/issues/3917): \[core] Consolidate `n.s.pmd.lang.rule` package
- * [#3918](https://github.com/pmd/pmd/issues/3918): \[core] Make LanguageRegistry non static
- * [#3919](https://github.com/pmd/pmd/issues/3919): \[core] Merge CPD and PMD language
- * [#3922](https://github.com/pmd/pmd/pull/3922): \[core] Better error reporting for the ruleset parser
- * [#4035](https://github.com/pmd/pmd/issues/4035): \[core] ConcurrentModificationException in DefaultRuleViolationFactory
- * [#4065](https://github.com/pmd/pmd/issues/4065): \[core] Rename TokenMgrError to LexException, Tokenizer to CpdLexer
- * [#4120](https://github.com/pmd/pmd/issues/4120): \[core] Explicitly name all language versions
- * [#4204](https://github.com/pmd/pmd/issues/4204): \[core] Provide a CpdAnalysis class as a programmatic entry point into CPD
- * [#4301](https://github.com/pmd/pmd/issues/4301): \[core] Remove deprecated property concrete classes
- * [#4302](https://github.com/pmd/pmd/issues/4302): \[core] Migrate Property Framework API to Java 8
- * [#4309](https://github.com/pmd/pmd/issues/4309): \[core] Cleanups in XPath area
- * [#4312](https://github.com/pmd/pmd/issues/4312): \[core] Remove unnecessary property `color` and system property `pmd.color` in `TextColorRenderer`
- * [#4313](https://github.com/pmd/pmd/issues/4313): \[core] Remove support for <lang>-<ruleset> hyphen notation for ruleset references
- * [#4314](https://github.com/pmd/pmd/issues/4314): \[core] Remove ruleset compatibility filter (RuleSetFactoryCompatibility) and CLI option `--no-ruleset-compatibility`
- * [#4323](https://github.com/pmd/pmd/issues/4323): \[core] Refactor CPD integration
- * [#4348](https://github.com/pmd/pmd/issues/4348): \[core] Consolidate @InternalApi classes
- * [#4349](https://github.com/pmd/pmd/issues/4349): \[core] Cleanup remaining experimental and deprecated API
- * [#4353](https://github.com/pmd/pmd/pull/4353): \[core] Micro optimizations for Node API
- * [#4365](https://github.com/pmd/pmd/pull/4365): \[core] Improve benchmarking
- * [#4397](https://github.com/pmd/pmd/pull/4397): \[core] Refactor CPD
- * [#4378](https://github.com/pmd/pmd/issues/4378): \[core] Ruleset loading processes commented rules
- * [#4420](https://github.com/pmd/pmd/pull/4420): \[core] Remove PMD.EOL
- * [#4425](https://github.com/pmd/pmd/pull/4425): \[core] Replace TextFile::pathId
- * [#4454](https://github.com/pmd/pmd/issues/4454): \[core] "Unknown option: '-min'" but is referenced in documentation
- * [#4611](https://github.com/pmd/pmd/pull/4611): \[core] Fix loading language properties from env vars
- * [#4621](https://github.com/pmd/pmd/issues/4621): \[core] Make `ClasspathClassLoader::getResource` child first
- * [#4674](https://github.com/pmd/pmd/issues/4674): \[core] WARNING: Illegal reflective access by org.codehaus.groovy.reflection.CachedClass
- * [#4694](https://github.com/pmd/pmd/pull/4694): \[core] Fix line/col numbers in TokenMgrError
- * [#4717](https://github.com/pmd/pmd/issues/4717): \[core] XSLTRenderer doesn't close report file
- * [#4750](https://github.com/pmd/pmd/pull/4750): \[core] Fix flaky SummaryHTMLRenderer
- * [#4782](https://github.com/pmd/pmd/pull/4782): \[core] Avoid using getImage/@Image
-* cli
- * [#2234](https://github.com/pmd/pmd/issues/2234): \[core] Consolidate PMD CLI into a single command
- * [#3828](https://github.com/pmd/pmd/issues/3828): \[core] Progress reporting
- * [#4079](https://github.com/pmd/pmd/issues/4079): \[cli] Split off CLI implementation into a pmd-cli submodule
- * [#4423](https://github.com/pmd/pmd/pull/4423): \[cli] Fix NPE when only `--file-list` is specified
- * [#4482](https://github.com/pmd/pmd/issues/4482): \[cli] pmd.bat can only be executed once
- * [#4484](https://github.com/pmd/pmd/issues/4484): \[cli] ast-dump with no properties produce an NPE
- * [#4594](https://github.com/pmd/pmd/pull/4594): \[cli] Change completion generation to runtime
- * [#4685](https://github.com/pmd/pmd/pull/4685): \[cli] Clarify CPD documentation, fix positional parameter handling
- * [#4723](https://github.com/pmd/pmd/issues/4723): \[cli] Launch fails for "bash pmd"
-* doc
- * [#995](https://github.com/pmd/pmd/issues/995): \[doc] Document API evolution principles as ADR
- * [#2501](https://github.com/pmd/pmd/issues/2501): \[doc] Verify ANTLR Documentation
- * [#2511](https://github.com/pmd/pmd/issues/2511): \[doc] Review guides for writing java/xpath rules for correctness with PMD 7
- * [#3175](https://github.com/pmd/pmd/issues/3175): \[doc] Document language module features
- * [#4294](https://github.com/pmd/pmd/issues/4294): \[doc] Migration Guide for upgrading PMD 6 ➡️ 7
- * [#4303](https://github.com/pmd/pmd/issues/4303): \[doc] Document new property framework
- * [#4308](https://github.com/pmd/pmd/issues/4308): \[doc] Document XPath API @DeprecatedAttribute
- * [#4319](https://github.com/pmd/pmd/issues/4319): \[doc] Document TypeRes API and Symbols API
- * [#4438](https://github.com/pmd/pmd/issues/4438): \[doc] Documentation links in VS Code are outdated
- * [#4521](https://github.com/pmd/pmd/issues/4521): \[doc] Website is not mobile friendly
- * [#4676](https://github.com/pmd/pmd/issues/4676): \[doc] Clarify how CPD `--ignore-literals` and `--ignore-identifiers` work
- * [#4659](https://github.com/pmd/pmd/pull/4659): \[doc] Improve ant documentation
- * [#4669](https://github.com/pmd/pmd/pull/4669): \[doc] Add bld PMD Extension to Tools / Integrations
- * [#4704](https://github.com/pmd/pmd/issues/4704): \[doc] Multivalued properties do not accept \| as a separator
-* testing
- * [#2435](https://github.com/pmd/pmd/issues/2435): \[test] Remove duplicated Dummy language module
- * [#4234](https://github.com/pmd/pmd/issues/4234): \[test] Tests that change the logging level do not work
-
-Language specific fixes:
-
-* apex
- * [#1937](https://github.com/pmd/pmd/issues/1937): \[apex] Apex should only have a single RootNode
- * [#1648](https://github.com/pmd/pmd/issues/1648): \[apex,vf] Remove CodeClimate dependency
- * [#1750](https://github.com/pmd/pmd/pull/1750): \[apex] Remove apex statistical rules
- * [#2836](https://github.com/pmd/pmd/pull/2836): \[apex] Remove Apex ProjectMirror
- * [#3766](https://github.com/pmd/pmd/issues/3766): \[apex] Replace Jorje with fully open source front-end
- * [#3973](https://github.com/pmd/pmd/issues/3973): \[apex] Update parser to support new 'as user' keywords (User Mode for Database Operations)
- * [#4427](https://github.com/pmd/pmd/issues/4427): \[apex] ApexBadCrypto test failing to detect inline code
- * [#4453](https://github.com/pmd/pmd/issues/4453): \[apex] \[7.0-rc1] Exception while initializing Apexlink (Index 34812 out of bounds for length 34812)
- * [#4828](https://github.com/pmd/pmd/issues/4828): \[apex] Support null coalescing operator ?? (apex 60)
- * [#4845](https://github.com/pmd/pmd/issues/4845): \[apex] Use same ANLTR version for apex-parser
-* apex-design
- * [#2667](https://github.com/pmd/pmd/issues/2667): \[apex] Integrate nawforce/ApexLink to build robust Unused rule
- * [#4509](https://github.com/pmd/pmd/issues/4509): \[apex] ExcessivePublicCount doesn't consider inner classes correctly
- * [#4596](https://github.com/pmd/pmd/issues/4596): \[apex] ExcessivePublicCount ignores properties
-* apex-documentation
- * [#4774](https://github.com/pmd/pmd/issues/4774): \[apex] ApexDoc false-positive for the first method of an annotated Apex class
-* apex-performance
- * [#4675](https://github.com/pmd/pmd/issues/4675): \[apex] New Rule: OperationWithHighCostInLoop
-* apex-security
- * [#4646](https://github.com/pmd/pmd/issues/4646): \[apex] ApexSOQLInjection does not recognise SObjectType or SObjectField as safe variable types
-* groovy
- * [#4726](https://github.com/pmd/pmd/pull/4726): \[groovy] Support Groovy to 3 and 4 and CPD suppressions
-* java
- * [#520](https://github.com/pmd/pmd/issues/520): \[java] Allow `@SuppressWarnings` with constants instead of literals
- * [#864](https://github.com/pmd/pmd/issues/864): \[java] Similar/duplicated implementations for determining FQCN
- * [#905](https://github.com/pmd/pmd/issues/905): \[java] Add new node for anonymous class declaration
- * [#910](https://github.com/pmd/pmd/issues/910): \[java] AST inconsistency between primitive and reference type arrays
- * [#997](https://github.com/pmd/pmd/issues/997): \[java] Java8 parsing corner case with annotated array types
- * [#998](https://github.com/pmd/pmd/issues/998): \[java] AST inconsistencies around FormalParameter
- * [#1019](https://github.com/pmd/pmd/issues/1019): \[java] Breaking Java Grammar changes for PMD 7.0.0
- * [#1124](https://github.com/pmd/pmd/issues/1124): \[java] ImmutableList implementation in the qname codebase
- * [#1128](https://github.com/pmd/pmd/issues/1128): \[java] Improve ASTLocalVariableDeclaration
- * [#1150](https://github.com/pmd/pmd/issues/1150): \[java] ClassOrInterfaceType AST improvements
- * [#1207](https://github.com/pmd/pmd/issues/1207): \[java] Resolve explicit types using FQCNs, without hitting the classloader
- * [#1307](https://github.com/pmd/pmd/issues/1307): \[java] AccessNode API changes
- * [#1367](https://github.com/pmd/pmd/issues/1367): \[java] Parsing error on annotated inner class
- * [#1661](https://github.com/pmd/pmd/issues/1661): \[java] About operator nodes
- * [#2366](https://github.com/pmd/pmd/pull/2366): \[java] Remove qualified names
- * [#2819](https://github.com/pmd/pmd/issues/2819): \[java] GLB bugs in pmd 7
- * [#3642](https://github.com/pmd/pmd/issues/3642): \[java] Parse error on rare extra dimensions on method return type on annotation methods
- * [#3763](https://github.com/pmd/pmd/issues/3763): \[java] Ambiguous reference error in valid code
- * [#3749](https://github.com/pmd/pmd/issues/3749): \[java] Improve `isOverridden` in ASTMethodDeclaration
- * [#3750](https://github.com/pmd/pmd/issues/3750): \[java] Make symbol table support instanceof pattern bindings
- * [#3751](https://github.com/pmd/pmd/issues/3751): \[java] Rename some node types
- * [#3752](https://github.com/pmd/pmd/issues/3752): \[java] Expose annotations in symbol API
- * [#4237](https://github.com/pmd/pmd/pull/4237): \[java] Cleanup handling of Java comments
- * [#4317](https://github.com/pmd/pmd/issues/4317): \[java] Some AST nodes should not be TypeNodes
- * [#4359](https://github.com/pmd/pmd/issues/4359): \[java] Type resolution fails with NPE when the scope is not a type declaration
- * [#4367](https://github.com/pmd/pmd/issues/4367): \[java] Move testrule TypeResTest into internal
- * [#4383](https://github.com/pmd/pmd/issues/4383): \[java] IllegalStateException: Object is not an array type!
- * [#4401](https://github.com/pmd/pmd/issues/4401): \[java] PMD 7 fails to build under Java 19
- * [#4405](https://github.com/pmd/pmd/issues/4405): \[java] Processing error with ArrayIndexOutOfBoundsException
- * [#4583](https://github.com/pmd/pmd/issues/4583): \[java] Support JDK 21 (LTS)
- * [#4628](https://github.com/pmd/pmd/pull/4628): \[java] Support loading classes from java runtime images
- * [#4753](https://github.com/pmd/pmd/issues/4753): \[java] PMD crashes while using generics and wildcards
- * [#4757](https://github.com/pmd/pmd/issues/4757): \[java] Intermittent NPEs while analyzing Java code
- * [#4794](https://github.com/pmd/pmd/issues/4794): \[java] Support JDK 22
-* java-bestpractices
- * [#342](https://github.com/pmd/pmd/issues/342): \[java] AccessorMethodGeneration: Name clash with another public field not properly handled
- * [#755](https://github.com/pmd/pmd/issues/755): \[java] AccessorClassGeneration false positive for private constructors
- * [#770](https://github.com/pmd/pmd/issues/770): \[java] UnusedPrivateMethod yields false positive for counter-variant arguments
- * [#807](https://github.com/pmd/pmd/issues/807): \[java] AccessorMethodGeneration false positive with overloads
- * [#833](https://github.com/pmd/pmd/issues/833): \[java] ForLoopCanBeForeach should consider iterating on this
- * [#1189](https://github.com/pmd/pmd/issues/1189): \[java] UnusedPrivateMethod false positive from inner class via external class
- * [#1205](https://github.com/pmd/pmd/issues/1205): \[java] Improve ConstantsInInterface message to mention alternatives
- * [#1212](https://github.com/pmd/pmd/issues/1212): \[java] Don't raise JUnitTestContainsTooManyAsserts on JUnit 5's assertAll
- * [#1422](https://github.com/pmd/pmd/issues/1422): \[java] JUnitTestsShouldIncludeAssert false positive with inherited @Rule field
- * [#1455](https://github.com/pmd/pmd/issues/1455): \[java] JUnitTestsShouldIncludeAssert: False positives for assert methods named "check" and "verify"
- * [#1563](https://github.com/pmd/pmd/issues/1563): \[java] ForLoopCanBeForeach false positive with method call using index variable
- * [#1565](https://github.com/pmd/pmd/issues/1565): \[java] JUnitAssertionsShouldIncludeMessage false positive with AssertJ
- * [#1747](https://github.com/pmd/pmd/issues/1747): \[java] PreserveStackTrace false-positive
- * [#1969](https://github.com/pmd/pmd/issues/1969): \[java] MissingOverride false-positive triggered by package-private method overwritten in another package by extending class
- * [#1998](https://github.com/pmd/pmd/issues/1998): \[java] AccessorClassGeneration false-negative: subclass calls private constructor
- * [#2130](https://github.com/pmd/pmd/issues/2130): \[java] UnusedLocalVariable: false-negative with array
- * [#2147](https://github.com/pmd/pmd/issues/2147): \[java] JUnitTestsShouldIncludeAssert - false positives with lambdas and static methods
- * [#2464](https://github.com/pmd/pmd/issues/2464): \[java] LooseCoupling must ignore class literals: ArrayList.class
- * [#2542](https://github.com/pmd/pmd/issues/2542): \[java] UseCollectionIsEmpty can not detect the case `foo.bar().size()`
- * [#2650](https://github.com/pmd/pmd/issues/2650): \[java] UseTryWithResources false positive when AutoCloseable helper used
- * [#2796](https://github.com/pmd/pmd/issues/2796): \[java] UnusedAssignment false positive with call chains
- * [#2797](https://github.com/pmd/pmd/issues/2797): \[java] MissingOverride long-standing issues
- * [#2806](https://github.com/pmd/pmd/issues/2806): \[java] SwitchStmtsShouldHaveDefault false-positive with Java 14 switch non-fallthrough branches
- * [#2822](https://github.com/pmd/pmd/issues/2822): \[java] LooseCoupling rule: Extend to cover user defined implementations and interfaces
- * [#2843](https://github.com/pmd/pmd/pull/2843): \[java] Fix UnusedAssignment FP with field accesses
- * [#2882](https://github.com/pmd/pmd/issues/2882): \[java] UseTryWithResources - false negative for explicit close
- * [#2883](https://github.com/pmd/pmd/issues/2883): \[java] JUnitAssertionsShouldIncludeMessage false positive with method call
- * [#2890](https://github.com/pmd/pmd/issues/2890): \[java] UnusedPrivateMethod false positive with generics
- * [#2946](https://github.com/pmd/pmd/issues/2946): \[java] SwitchStmtsShouldHaveDefault false positive on enum inside enums
- * [#3672](https://github.com/pmd/pmd/pull/3672): \[java] LooseCoupling - fix false positive with generics
- * [#3675](https://github.com/pmd/pmd/pull/3675): \[java] MissingOverride - fix false positive with mixing type vars
- * [#3858](https://github.com/pmd/pmd/issues/3858): \[java] UseCollectionIsEmpty should infer local variable type from method invocation
- * [#4433](https://github.com/pmd/pmd/issues/4433): \[java] \[7.0-rc1] ReplaceHashtableWithMap on java.util.Properties
- * [#4492](https://github.com/pmd/pmd/issues/4492): \[java] GuardLogStatement gives false positive when argument is a Java method reference
- * [#4503](https://github.com/pmd/pmd/issues/4503): \[java] JUnitTestsShouldIncludeAssert: false negative with TestNG
- * [#4516](https://github.com/pmd/pmd/issues/4516): \[java] UnusedLocalVariable: false-negative with try-with-resources
- * [#4517](https://github.com/pmd/pmd/issues/4517): \[java] UnusedLocalVariable: false-negative with compound assignments
- * [#4518](https://github.com/pmd/pmd/issues/4518): \[java] UnusedLocalVariable: false-positive with multiple for-loop indices
- * [#4603](https://github.com/pmd/pmd/issues/4603): \[java] UnusedAssignment false positive in record compact constructor
- * [#4625](https://github.com/pmd/pmd/issues/4625): \[java] UnusedPrivateMethod false positive: Autoboxing into Number
- * [#4634](https://github.com/pmd/pmd/issues/4634): \[java] JUnit4TestShouldUseTestAnnotation false positive with TestNG
- * [#4817](https://github.com/pmd/pmd/issues/4817): \[java] UnusedPrivateMethod false-positive used in lambda
-* java-codestyle
- * [#1208](https://github.com/pmd/pmd/issues/1208): \[java] PrematureDeclaration rule false-positive on variable declared to measure time
- * [#1429](https://github.com/pmd/pmd/issues/1429): \[java] PrematureDeclaration as result of method call (false positive)
- * [#1480](https://github.com/pmd/pmd/issues/1480): \[java] IdenticalCatchBranches false positive with return expressions
- * [#1673](https://github.com/pmd/pmd/issues/1673): \[java] UselessParentheses false positive with conditional operator
- * [#1790](https://github.com/pmd/pmd/issues/1790): \[java] UnnecessaryFullyQualifiedName false positive with enum constant
- * [#1918](https://github.com/pmd/pmd/issues/1918): \[java] UselessParentheses false positive with boolean operators
- * [#2134](https://github.com/pmd/pmd/issues/2134): \[java] PreserveStackTrace not handling `Throwable.addSuppressed(...)`
- * [#2299](https://github.com/pmd/pmd/issues/2299): \[java] UnnecessaryFullyQualifiedName false positive with similar package name
- * [#2391](https://github.com/pmd/pmd/issues/2391): \[java] UseDiamondOperator FP when expected type and constructed type have a different parameterization
- * [#2528](https://github.com/pmd/pmd/issues/2528): \[java] MethodNamingConventions - JUnit 5 method naming not support ParameterizedTest
- * [#2739](https://github.com/pmd/pmd/issues/2739): \[java] UselessParentheses false positive for string concatenation
- * [#2748](https://github.com/pmd/pmd/issues/2748): \[java] UnnecessaryCast false positive with unchecked cast
- * [#2847](https://github.com/pmd/pmd/issues/2847): \[java] New Rule: Use Explicit Types
- * [#2973](https://github.com/pmd/pmd/issues/2973): \[java] New rule: UnnecessaryBoxing
- * [#3195](https://github.com/pmd/pmd/pull/3195): \[java] Improve rule UnnecessaryReturn to detect more cases
- * [#3218](https://github.com/pmd/pmd/pull/3218): \[java] Generalize UnnecessaryCast to flag all unnecessary casts
- * [#3221](https://github.com/pmd/pmd/issues/3221): \[java] PrematureDeclaration false positive for unused variables
- * [#3238](https://github.com/pmd/pmd/issues/3238): \[java] Improve ExprContext, fix FNs of UnnecessaryCast
- * [#3500](https://github.com/pmd/pmd/pull/3500): \[java] UnnecessaryBoxing - check for Integer.valueOf(String) calls
- * [#4239](https://github.com/pmd/pmd/issues/4239): \[java] UnnecessaryLocalBeforeReturn - false positive with catch clause
- * [#4268](https://github.com/pmd/pmd/issues/4268): \[java] CommentDefaultAccessModifier: false positive with TestNG annotations
- * [#4273](https://github.com/pmd/pmd/issues/4273): \[java] CommentDefaultAccessModifier ignoredAnnotations should include "org.junit.jupiter.api.extension.RegisterExtension" by default
- * [#4357](https://github.com/pmd/pmd/pull/4357): \[java] Fix IllegalStateException in UseDiamondOperator rule
- * [#4432](https://github.com/pmd/pmd/issues/4432): \[java] \[7.0-rc1] UnnecessaryImport - Unused static import is being used
- * [#4455](https://github.com/pmd/pmd/issues/4455): \[java] FieldNamingConventions: false positive with lombok's @UtilityClass
- * [#4487](https://github.com/pmd/pmd/issues/4487): \[java] UnnecessaryConstructor: false-positive with @Inject and @Autowired
- * [#4511](https://github.com/pmd/pmd/issues/4511): \[java] LocalVariableCouldBeFinal shouldn't report unused variables
- * [#4512](https://github.com/pmd/pmd/issues/4512): \[java] MethodArgumentCouldBeFinal shouldn't report unused parameters
- * [#4557](https://github.com/pmd/pmd/issues/4557): \[java] UnnecessaryImport FP with static imports of overloaded methods
- * [#4578](https://github.com/pmd/pmd/issues/4578): \[java] CommentDefaultAccessModifier comment needs to be before annotation if present
- * [#4631](https://github.com/pmd/pmd/issues/4631): \[java] UnnecessaryFullyQualifiedName fails to recognize illegal self reference in enums
- * [#4645](https://github.com/pmd/pmd/issues/4645): \[java] CommentDefaultAccessModifier - False Positive with JUnit5's ParameterizedTest
- * [#4754](https://github.com/pmd/pmd/pull/4754): \[java] EmptyControlStatementRule: Add allowCommentedBlocks property
- * [#4816](https://github.com/pmd/pmd/issues/4816): \[java] UnnecessaryImport false-positive on generic method call with on lambda
-* java-design
- * [#174](https://github.com/pmd/pmd/issues/174): \[java] SingularField false positive with switch in method that both assigns and reads field
- * [#1014](https://github.com/pmd/pmd/issues/1014): \[java] LawOfDemeter: False positive with lambda expression
- * [#1605](https://github.com/pmd/pmd/issues/1605): \[java] LawOfDemeter: False positive for standard UTF-8 charset name
- * [#2160](https://github.com/pmd/pmd/issues/2160): \[java] Issues with Law of Demeter
- * [#2175](https://github.com/pmd/pmd/issues/2175): \[java] LawOfDemeter: False positive for chained methods with generic method call
- * [#2179](https://github.com/pmd/pmd/issues/2179): \[java] LawOfDemeter: False positive with static property access - should treat class-level property as global object, not dot-accessed property
- * [#2180](https://github.com/pmd/pmd/issues/2180): \[java] LawOfDemeter: False positive with Thread and ThreadLocalRandom
- * [#2182](https://github.com/pmd/pmd/issues/2182): \[java] LawOfDemeter: False positive with package-private access
- * [#2188](https://github.com/pmd/pmd/issues/2188): \[java] LawOfDemeter: False positive with fields assigned to local vars
- * [#2536](https://github.com/pmd/pmd/issues/2536): \[java] ClassWithOnlyPrivateConstructorsShouldBeFinal can't detect inner class
- * [#3668](https://github.com/pmd/pmd/pull/3668): \[java] ClassWithOnlyPrivateConstructorsShouldBeFinal - fix FP with inner private classes
- * [#3754](https://github.com/pmd/pmd/issues/3754): \[java] SingularField false positive with read in while condition
- * [#3786](https://github.com/pmd/pmd/issues/3786): \[java] SimplifyBooleanReturns should consider operator precedence
- * [#3840](https://github.com/pmd/pmd/issues/3840): \[java] LawOfDemeter disallows method call on locally created object
- * [#4238](https://github.com/pmd/pmd/pull/4238): \[java] Make LawOfDemeter not use the rulechain
- * [#4254](https://github.com/pmd/pmd/issues/4254): \[java] ImmutableField - false positive with Lombok @Setter
- * [#4434](https://github.com/pmd/pmd/issues/4434): \[java] \[7.0-rc1] ExceptionAsFlowControl when simply propagating
- * [#4456](https://github.com/pmd/pmd/issues/4456): \[java] FinalFieldCouldBeStatic: false positive with lombok's @UtilityClass
- * [#4477](https://github.com/pmd/pmd/issues/4477): \[java] SignatureDeclareThrowsException: false-positive with TestNG annotations
- * [#4490](https://github.com/pmd/pmd/issues/4490): \[java] ImmutableField - false negative with Lombok @Getter
- * [#4549](https://github.com/pmd/pmd/pull/4549): \[java] Make LawOfDemeter results deterministic
-* java-documentation
- * [#4369](https://github.com/pmd/pmd/pull/4369): \[java] Improve CommentSize
- * [#4416](https://github.com/pmd/pmd/pull/4416): \[java] Fix reported line number in CommentContentRule
-* java-errorprone
- * [#659](https://github.com/pmd/pmd/issues/659): \[java] MissingBreakInSwitch - last default case does not contain a break
- * [#718](https://github.com/pmd/pmd/issues/718): \[java] BrokenNullCheck false positive with parameter/field confusion
- * [#932](https://github.com/pmd/pmd/issues/932): \[java] SingletonClassReturningNewInstance false positive with double assignment
- * [#1005](https://github.com/pmd/pmd/issues/1005): \[java] CloneMethodMustImplementCloneable triggers for interfaces
- * [#1669](https://github.com/pmd/pmd/issues/1669): \[java] NullAssignment - FP with ternay and null as constructor argument
- * [#1831](https://github.com/pmd/pmd/issues/1831): \[java] DetachedTestCase reports abstract methods
- * [#1899](https://github.com/pmd/pmd/issues/1899): \[java] Recognize @SuppressWanings("fallthrough") for MissingBreakInSwitch
- * [#2320](https://github.com/pmd/pmd/issues/2320): \[java] NullAssignment - FP with ternary and null as method argument
- * [#2532](https://github.com/pmd/pmd/issues/2532): \[java] AvoidDecimalLiteralsInBigDecimalConstructor can not detect the case `new BigDecimal(Expression)`
- * [#2579](https://github.com/pmd/pmd/issues/2579): \[java] MissingBreakInSwitch detects the lack of break in the last case
- * [#2880](https://github.com/pmd/pmd/issues/2880): \[java] CompareObjectsWithEquals - false negative with type res
- * [#2893](https://github.com/pmd/pmd/issues/2893): \[java] Remove special cases from rule EmptyCatchBlock
- * [#2894](https://github.com/pmd/pmd/issues/2894): \[java] Improve MissingBreakInSwitch
- * [#3071](https://github.com/pmd/pmd/issues/3071): \[java] BrokenNullCheck FP with PMD 6.30.0
- * [#3087](https://github.com/pmd/pmd/issues/3087): \[java] UnnecessaryBooleanAssertion overlaps with SimplifiableTestAssertion
- * [#3100](https://github.com/pmd/pmd/issues/3100): \[java] UseCorrectExceptionLogging FP in 6.31.0
- * [#3173](https://github.com/pmd/pmd/issues/3173): \[java] UseProperClassLoader false positive
- * [#3351](https://github.com/pmd/pmd/issues/3351): \[java] ConstructorCallsOverridableMethod ignores abstract methods
- * [#3400](https://github.com/pmd/pmd/issues/3400): \[java] AvoidUsingOctalValues FN with underscores
- * [#3843](https://github.com/pmd/pmd/issues/3843): \[java] UseEqualsToCompareStrings should consider return type
- * [#4063](https://github.com/pmd/pmd/issues/4063): \[java] AvoidBranchingStatementAsLastInLoop: False-negative about try/finally block
- * [#4356](https://github.com/pmd/pmd/pull/4356): \[java] Fix NPE in CloseResourceRule
- * [#4449](https://github.com/pmd/pmd/issues/4449): \[java] AvoidAccessibilityAlteration: Possible false positive in AvoidAccessibilityAlteration rule when using Lambda expression
- * [#4457](https://github.com/pmd/pmd/issues/4457): \[java] OverrideBothEqualsAndHashcode: false negative with anonymous classes
- * [#4493](https://github.com/pmd/pmd/issues/4493): \[java] MissingStaticMethodInNonInstantiatableClass: false-positive about @Inject
- * [#4505](https://github.com/pmd/pmd/issues/4505): \[java] ImplicitSwitchFallThrough NPE in PMD 7.0.0-rc1
- * [#4510](https://github.com/pmd/pmd/issues/4510): \[java] ConstructorCallsOverridableMethod: false positive with lombok's @Value
- * [#4513](https://github.com/pmd/pmd/issues/4513): \[java] UselessOperationOnImmutable various false negatives with String
- * [#4514](https://github.com/pmd/pmd/issues/4514): \[java] AvoidLiteralsInIfCondition false positive and negative for String literals when ignoreExpressions=true
- * [#4546](https://github.com/pmd/pmd/issues/4546): \[java] OverrideBothEqualsAndHashCode ignores records
- * [#4719](https://github.com/pmd/pmd/pull/4719): \[java] UnnecessaryCaseChange: example doc toUpperCase() should compare to a capitalized string
-* java-multithreading
- * [#2537](https://github.com/pmd/pmd/issues/2537): \[java] DontCallThreadRun can't detect the case that call run() in `this.run()`
- * [#2538](https://github.com/pmd/pmd/issues/2538): \[java] DontCallThreadRun can't detect the case that call run() in `foo.bar.run()`
- * [#2577](https://github.com/pmd/pmd/issues/2577): \[java] UseNotifyAllInsteadOfNotify falsely detect a special case with argument: `foo.notify(bar)`
- * [#4483](https://github.com/pmd/pmd/issues/4483): \[java] NonThreadSafeSingleton false positive with double-checked locking
-* java-performance
- * [#1224](https://github.com/pmd/pmd/issues/1224): \[java] InefficientEmptyStringCheck false negative in anonymous class
- * [#2587](https://github.com/pmd/pmd/issues/2587): \[java] AvoidArrayLoops could also check for list copy through iterated List.add()
- * [#2712](https://github.com/pmd/pmd/issues/2712): \[java] SimplifyStartsWith false-positive with AssertJ
- * [#3486](https://github.com/pmd/pmd/pull/3486): \[java] InsufficientStringBufferDeclaration: Fix NPE
- * [#3848](https://github.com/pmd/pmd/issues/3848): \[java] StringInstantiation: false negative when using method result
- * [#4070](https://github.com/pmd/pmd/issues/4070): \[java] A false positive about the rule RedundantFieldInitializer
- * [#4458](https://github.com/pmd/pmd/issues/4458): \[java] RedundantFieldInitializer: false positive with lombok's @Value
-* javascript
- * [#4673](https://github.com/pmd/pmd/pull/4673): \[javascript] CPD: Added support for decorator notation
-* kotlin
- * [#419](https://github.com/pmd/pmd/issues/419): \[kotlin] Add support for Kotlin
- * [#4389](https://github.com/pmd/pmd/pull/4389): \[kotlin] Update grammar to version 1.8
-* plsql
- * [#4820](https://github.com/pmd/pmd/issues/4820): \[plsql] WITH clause is ignored for SELECT INTO statements
-* swift
- * [#1877](https://github.com/pmd/pmd/pull/1877): \[swift] Feature/swift rules
- * [#1882](https://github.com/pmd/pmd/pull/1882): \[swift] UnavailableFunction Swift rule
- * [#4697](https://github.com/pmd/pmd/issues/4697): \[swift] Support Swift 5.9 features (mainly macros expansion expressions)
-* xml
- * [#1800](https://github.com/pmd/pmd/pull/1800): \[xml] Unimplement org.w3c.dom.Node from the XmlNodeWrapper
-* xml-bestpractices
- * [#4592](https://github.com/pmd/pmd/pull/4592): \[xml] Add MissingEncoding rule
-
-## ✨ External Contributions
-
-* [#1658](https://github.com/pmd/pmd/pull/1658): \[core] Node support for Antlr-based languages - [Matías Fraga](https://github.com/matifraga) (@matifraga)
-* [#1698](https://github.com/pmd/pmd/pull/1698): \[core] [swift] Antlr Base Parser adapter and Swift Implementation - [Lucas Soncini](https://github.com/lsoncini) (@lsoncini)
-* [#1774](https://github.com/pmd/pmd/pull/1774): \[core] Antlr visitor rules - [Lucas Soncini](https://github.com/lsoncini) (@lsoncini)
-* [#1877](https://github.com/pmd/pmd/pull/1877): \[swift] Feature/swift rules - [Matías Fraga](https://github.com/matifraga) (@matifraga)
-* [#1881](https://github.com/pmd/pmd/pull/1881): \[doc] Add ANTLR documentation - [Matías Fraga](https://github.com/matifraga) (@matifraga)
-* [#1882](https://github.com/pmd/pmd/pull/1882): \[swift] UnavailableFunction Swift rule - [Tomás de Lucca](https://github.com/tomidelucca) (@tomidelucca)
-* [#2830](https://github.com/pmd/pmd/pull/2830): \[apex] Apexlink POC - [Kevin Jones](https://github.com/nawforce) (@nawforce)
-* [#3866](https://github.com/pmd/pmd/pull/3866): \[core] Add CLI Progress Bar - [@JerritEic](https://github.com/JerritEic) (@JerritEic)
-* [#4093](https://github.com/pmd/pmd/pull/4093): \[apex] Summit-AST Apex module - Part 1 - [Edward Klimoshenko](https://github.com/eklimo) (@eklimo)
-* [#4151](https://github.com/pmd/pmd/pull/4151): \[apex] Summit-AST Apex module - Part 2 - expression nodes - [Aaron Hurst](https://github.com/aaronhurst-google) (@aaronhurst-google)
-* [#4171](https://github.com/pmd/pmd/pull/4171): \[apex] Summit-AST Apex module - Part 3 - initializers - [Aaron Hurst](https://github.com/aaronhurst-google) (@aaronhurst-google)
-* [#4206](https://github.com/pmd/pmd/pull/4206): \[apex] Summit-AST Apex module - Part 4 - statements - [Aaron Hurst](https://github.com/aaronhurst-google) (@aaronhurst-google)
-* [#4219](https://github.com/pmd/pmd/pull/4219): \[apex] Summit-AST Apex module - Part 5 - annotations, triggers, misc. - [Aaron Hurst](https://github.com/aaronhurst-google) (@aaronhurst-google)
-* [#4242](https://github.com/pmd/pmd/pull/4242): \[apex] Merge 6.52 into experimental-apex-parser - [Aaron Hurst](https://github.com/aaronhurst-google) (@aaronhurst-google)
-* [#4251](https://github.com/pmd/pmd/pull/4251): \[apex] Summit-AST Apex module - Part 6 Passing testsuite - [Aaron Hurst](https://github.com/aaronhurst-google) (@aaronhurst-google)
-* [#4402](https://github.com/pmd/pmd/pull/4402): \[javascript] CPD: add support for Typescript using antlr4 grammar - [Paul Guyot](https://github.com/pguyot) (@pguyot)
-* [#4403](https://github.com/pmd/pmd/pull/4403): \[julia] CPD: Add support for Julia code duplication - [Wener](https://github.com/wener-tiobe) (@wener-tiobe)
-* [#4412](https://github.com/pmd/pmd/pull/4412): \[doc] Added new error msg to ConstantsInInterface - [David Ljunggren](https://github.com/dague1) (@dague1)
-* [#4426](https://github.com/pmd/pmd/pull/4426): \[cpd] New XML to HTML XLST report format for PMD CPD - [mohan-chinnappan-n](https://github.com/mohan-chinnappan-n) (@mohan-chinnappan-n)
-* [#4428](https://github.com/pmd/pmd/pull/4428): \[apex] ApexBadCrypto bug fix for #4427 - inline detection of hard coded values - [Steven Stearns](https://github.com/sfdcsteve) (@sfdcsteve)
-* [#4431](https://github.com/pmd/pmd/pull/4431): \[coco] CPD: Coco support for code duplication detection - [Wener](https://github.com/wener-tiobe) (@wener-tiobe)
-* [#4444](https://github.com/pmd/pmd/pull/4444): \[java] CommentDefaultAccessModifier - ignore org.junit.jupiter.api.extension.RegisterExtension by default - [Nirvik Patel](https://github.com/nirvikpatel) (@nirvikpatel)
-* [#4448](https://github.com/pmd/pmd/pull/4448): \[apex] Bump summit-ast to new release 2.1.0 (and remove workaround) - [Aaron Hurst](https://github.com/aaronhurst-google) (@aaronhurst-google)
-* [#4450](https://github.com/pmd/pmd/pull/4450): \[java] Fix #4449 AvoidAccessibilityAlteration: Correctly handle Lambda expressions in PrivilegedAction scenarios - [Seren](https://github.com/mohui1999) (@mohui1999)
-* [#4452](https://github.com/pmd/pmd/pull/4452): \[doc] Update PMD_APEX_ROOT_DIRECTORY documentation reference - [nwcm](https://github.com/nwcm) (@nwcm)
-* [#4470](https://github.com/pmd/pmd/pull/4470): \[cpp] CPD: Added strings as literal and ignore identifiers in sequences - [Wener](https://github.com/wener-tiobe) (@wener-tiobe)
-* [#4474](https://github.com/pmd/pmd/pull/4474): \[java] ImmutableField: False positive with lombok (fixes #4254) - [Pim van der Loos](https://github.com/PimvanderLoos) (@PimvanderLoos)
-* [#4479](https://github.com/pmd/pmd/pull/4479): \[apex] Merge main (7.x) branch into experimental-apex-parser and fix tests - [Aaron Hurst](https://github.com/aaronhurst-google) (@aaronhurst-google)
-* [#4488](https://github.com/pmd/pmd/pull/4488): \[java] Fix #4477: A false-positive about SignatureDeclareThrowsException - [AnnaDev](https://github.com/LynnBroe) (@LynnBroe)
-* [#4494](https://github.com/pmd/pmd/pull/4494): \[java] Fix #4487: A false-positive about UnnecessaryConstructor and @Inject and @Autowired - [AnnaDev](https://github.com/LynnBroe) (@LynnBroe)
-* [#4495](https://github.com/pmd/pmd/pull/4495): \[java] Fix #4493: false-positive about MissingStaticMethodInNonInstantiatableClass and @Inject - [AnnaDev](https://github.com/LynnBroe) (@LynnBroe)
-* [#4507](https://github.com/pmd/pmd/pull/4507): \[java] Fix #4503: A false negative about JUnitTestsShouldIncludeAssert and testng - [AnnaDev](https://github.com/LynnBroe) (@LynnBroe)
-* [#4520](https://github.com/pmd/pmd/pull/4520): \[doc] Fix typo: missing closing quotation mark after CPD-END - [João Dinis Ferreira](https://github.com/joaodinissf) (@joaodinissf)
-* [#4528](https://github.com/pmd/pmd/pull/4528): \[apex] Update to apexlink - [Kevin Jones](https://github.com/nawforce) (@nawforce)
-* [#4533](https://github.com/pmd/pmd/pull/4533): \[java] Fix #4063: False-negative about try/catch block in Loop - [AnnaDev](https://github.com/LynnBroe) (@LynnBroe)
-* [#4536](https://github.com/pmd/pmd/pull/4536): \[java] Fix #4268: CommentDefaultAccessModifier - false positive with TestNG's @Test annotation - [AnnaDev](https://github.com/LynnBroe) (@LynnBroe)
-* [#4537](https://github.com/pmd/pmd/pull/4537): \[java] Fix #4455: A false positive about FieldNamingConventions and UtilityClass - [AnnaDev](https://github.com/LynnBroe) (@LynnBroe)
-* [#4538](https://github.com/pmd/pmd/pull/4538): \[java] Fix #4456: A false positive about FinalFieldCouldBeStatic and UtilityClass - [AnnaDev](https://github.com/LynnBroe) (@LynnBroe)
-* [#4540](https://github.com/pmd/pmd/pull/4540): \[java] Fix #4457: false negative about OverrideBothEqualsAndHashcode - [AnnaDev](https://github.com/LynnBroe) (@LynnBroe)
-* [#4541](https://github.com/pmd/pmd/pull/4541): \[java] Fix #4458: A false positive about RedundantFieldInitializer and @Value - [AnnaDev](https://github.com/LynnBroe) (@LynnBroe)
-* [#4542](https://github.com/pmd/pmd/pull/4542): \[java] Fix #4510: A false positive about ConstructorCallsOverridableMethod and @Value - [AnnaDev](https://github.com/LynnBroe) (@LynnBroe)
-* [#4553](https://github.com/pmd/pmd/pull/4553): \[java] Fix #4492: GuardLogStatement gives false positive when argument is a Java method reference - [Anastasiia Koba](https://github.com/anastasiia-koba) (@anastasiia-koba)
-* [#4562](https://github.com/pmd/pmd/pull/4562): \[apex] Fixes #4556 - Update Apex bind regex match for all possible combinations - [nwcm](https://github.com/nwcm) (@nwcm)
-* [#4637](https://github.com/pmd/pmd/pull/4637): \[java] fix #4634 - JUnit4TestShouldUseTestAnnotation false positive with TestNG - [Krystian Dabrowski](https://github.com/krdabrowski) (@krdabrowski)
-* [#4640](https://github.com/pmd/pmd/pull/4640): \[cli] Launch script fails if run via "bash pmd" - [Shai Bennathan](https://github.com/shai-bennathan) (@shai-bennathan)
-* [#4649](https://github.com/pmd/pmd/pull/4649): \[apex] Add SObjectType and SObjectField to list of injectable SOQL variable types - [Richard Corfield](https://github.com/rcorfieldffdc) (@rcorfieldffdc)
-* [#4651](https://github.com/pmd/pmd/pull/4651): \[doc] Add "Tencent Cloud Code Analysis" in Tools / Integrations - [yale](https://github.com/cyw3) (@cyw3)
-* [#4664](https://github.com/pmd/pmd/pull/4664): \[cli] CPD: Fix NPE when only `--file-list` is specified - [Wener](https://github.com/wener-tiobe) (@wener-tiobe)
-* [#4665](https://github.com/pmd/pmd/pull/4665): \[java] Doc: Fix references AutoClosable -> AutoCloseable - [Andrey Bozhko](https://github.com/AndreyBozhko) (@AndreyBozhko)
-* [#4673](https://github.com/pmd/pmd/pull/4673): \[javascript] CPD: Added support for decorator notation - [Wener](https://github.com/wener-tiobe) (@wener-tiobe)
-* [#4677](https://github.com/pmd/pmd/pull/4677): \[apex] Add new rule: OperationWithHighCostInLoop - [Thomas Prouvot](https://github.com/tprouvot) (@tprouvot)
-* [#4698](https://github.com/pmd/pmd/pull/4698): \[swift] Add macro expansion support for swift 5.9 - [Richard B.](https://github.com/kenji21) (@kenji21)
-* [#4706](https://github.com/pmd/pmd/pull/4706): \[java] DetachedTestCase should not report on abstract methods - [Debamoy Datta](https://github.com/Debamoy) (@Debamoy)
-* [#4719](https://github.com/pmd/pmd/pull/4719): \[java] UnnecessaryCaseChange: example doc toUpperCase() should compare to a capitalized string - [ciufudean](https://github.com/ciufudean) (@ciufudean)
-* [#4738](https://github.com/pmd/pmd/pull/4738): \[doc] Added reference to the PMD extension for bld - [Erik C. Thauvin](https://github.com/ethauvin) (@ethauvin)
-* [#4749](https://github.com/pmd/pmd/pull/4749): Fixes NoSuchMethodError on processing errors in pmd-compat6 - [Andreas Bergander](https://github.com/bergander) (@bergander)
-* [#4750](https://github.com/pmd/pmd/pull/4750): \[core] Fix flaky SummaryHTMLRenderer - [219sansim](https://github.com/219sansim) (@219sansim)
-* [#4752](https://github.com/pmd/pmd/pull/4752): \[core] Fix flaky LatticeRelationTest - [219sansim](https://github.com/219sansim) (@219sansim)
-* [#4754](https://github.com/pmd/pmd/pull/4754): \[java] EmptyControlStatementRule: Add allowCommentedBlocks property - [Andreas Bergander](https://github.com/bergander) (@bergander)
-* [#4759](https://github.com/pmd/pmd/pull/4759): \[java] fix: remove delimiter attribute from ruleset category/java/errorprone.xml - [Marcin Dąbrowski](https://github.com/marcindabrowski) (@marcindabrowski)
-* [#4825](https://github.com/pmd/pmd/pull/4825): \[plsql] Fix ignored WITH clause for SELECT INTO statements - [Laurent Bovet](https://github.com/lbovet) (@lbovet)
-* [#4857](https://github.com/pmd/pmd/pull/4857): \[javascript] Fix UnnecessaryBlock issues with empty statements - [Oleksandr Shvets](https://github.com/oleksandr-shvets) (@oleksandr-shvets)
diff --git a/pmd-ant/pom.xml b/pmd-ant/pom.xml
index 3c47ac7843..ce517cdd1a 100644
--- a/pmd-ant/pom.xml
+++ b/pmd-ant/pom.xml
@@ -7,7 +7,7 @@