diff --git a/docs/_config.yml b/docs/_config.yml
index c84603d1e5..99e434e45c 100644
--- a/docs/_config.yml
+++ b/docs/_config.yml
@@ -1,9 +1,9 @@
repository: pmd/pmd
pmd:
- version: 7.0.0-rc3
+ version: 7.0.0-SNAPSHOT
previous_version: 6.55.0
- date: 30-May-2023
+ date: 27-June-2023
release_type: major
# release types: major, minor, bugfix
diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md
index 58fc98b933..e8d7cdbf90 100644
--- a/docs/pages/release_notes.md
+++ b/docs/pages/release_notes.md
@@ -4,676 +4,21 @@ permalink: pmd_release_notes.html
keywords: changelog, release notes
---
-{% if is_release_notes_processor %}
-{% capture baseurl %}https://docs.pmd-code.org/pmd-doc-{{ site.pmd.version }}/{% endcapture %}
-{% else %}
-{% assign baseurl = "" %}
-{% endif %}
-
## {{ site.pmd.date }} - {{ site.pmd.version }}
-We're excited to bring you the next major version of PMD!
+The PMD team is pleased to announce PMD {{ site.pmd.version }}.
-Since this is a big release, we provide here only a concise version of the release notes. We prepared a separate
-page with the full [Detailed Release Notes for PMD 7.0.0]({{ baseurl }}pmd_release_notes_pmd7.html).
-
-
-
ℹ️ Release Candidates
-
PMD 7.0.0 is finally almost ready. In order to gather feedback, we are going to ship a couple of release candidates.
-These are officially available on GitHub and Maven Central and can be used as usual (e.g. as a dependency).
-We encourage you to try out the new features, but keep in mind that we may introduce API breaking changes between
-the release candidates. It should be stable enough if you don't use custom rules.
-
-
We have still some tasks planned for the next release candidates.
-You can see the progress in PMD 7 Tracking Issue #3898.
-
-
If you find any problem or difficulty while updating from PMD 6, please provide feedback via our
-issue tracker. That way we can improve the experience
-for all.
-
+This is a {{ site.pmd.release_type }} release.
{% tocmaker is_release_notes_processor %}
-### Changes since 7.0.0-rc2
-
-This section lists the most important changes from the last release candidate.
-The remaining section describes the complete release notes for 7.0.0.
-
-#### New CPD report format cpdhtml-v2.xslt
-
-Thanks to @mohan-chinnappan-n a new CPD report format has been added which features a data table.
-It uses an XSLT stylesheet to convert CPD's XML format into HTML.
-
-See [the example report]({{ baseurl }}report-examples/cpdhtml-v2.html).
-
-#### Fixed issues
-
-* miscellaneous
- * [#4460](https://github.com/pmd/pmd/pull/4460): Fix assembly-plugin warnings
-* core
- * [#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
-* java-bestpractices
- * [#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
-* java-codestyle
- * [#4268](https://github.com/pmd/pmd/issues/4268): \[java] CommentDefaultAccessModifier: false positive with TestNG annotations
- * [#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
- * [#4557](https://github.com/pmd/pmd/issues/4557): \[java] UnnecessaryImport FP with static imports of overloaded methods
-* java-design
- * [#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
- * [#4549](https://github.com/pmd/pmd/pull/4549): \[java] Make LawOfDemeter results deterministic
-* java-errorprone
- * [#4063](https://github.com/pmd/pmd/issues/4063): \[java] AvoidBranchingStatementAsLastInLoop: False-negative about try/finally block
- * [#4457](https://github.com/pmd/pmd/issues/4457): \[java] OverrideBothEqualsAndHashcode: false negative with anonymous classes
- * [#4510](https://github.com/pmd/pmd/issues/4510): \[java] ConstructorCallsOverridableMethod: false positive with lombok's @Value
- * [#4546](https://github.com/pmd/pmd/issues/4546): \[java] OverrideBothEqualsAndHashCode ignores records
-* java-performance
- * [#4458](https://github.com/pmd/pmd/issues/4458): \[java] RedundantFieldInitializer: false positive with lombok's @Value
-
-#### API Changes
-
-* 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`
-* The asset filenames of PMD on [GitHub Releases](https://github.com/pmd/pmd/releases) are
- now `pmd-dist--bin.zip`, `pmd-dist--src.zip` and `pmd-dist--doc.zip`.
- Keep that in mind, if you have an automated download script.
-
- The structure inside the ZIP files stay the same, e.g. we still provide inside the binary distribution
- ZIP file the base directory `pmd-bin-`.
-* The CLI option `--stress` (or `-stress`) has been removed without replacement.
-* 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.
-* Replaced `RuleViolation::getFilename` with new {% jdoc !!core::RuleViolation#getFileId() %}, that returns a
- {% jdoc core::lang.document.FileId %}. This is an identifier for a {% jdoc core::lang.document.TextFile %}
- and could represent a path name. This allows to have a separate display name, e.g. renderers use
- {% jdoc core::reporting.FileNameRenderer %} to either display the full path name or a relative path name
- (see {% jdoc !!core::renderers.Renderer#setFileNameRenderer(net.sourceforge.pmd.reporting.FileNameRenderer) %} and
- {%jdoc core::reporting.ConfigurableFileNameRenderer %}). Many places where we used a simple String for
- a path-like name before have been adapted to use the new {% jdoc core::lang.document.FileId %}.
-
- See [PR #4425](https://github.com/pmd/pmd/pull/4425) for details.
-
-#### External Contributions
-
-* [#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)
-* [#4431](https://github.com/pmd/pmd/pull/4431): \[coco] CPD: Coco support for code duplication detection - [Wener](https://github.com/wener-tiobe) (@wener-tiobe)
-* [#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)
-* [#4507](https://github.com/pmd/pmd/pull/4507): \[java] Fix #4503: A false negative about JUnitTestsShouldIncludeAssert and testng - [AnnaDev](https://github.com/LynnBroe) (@LynnBroe)
-* [#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)
-
-### 🚀 Major Features and Enhancements
-
-#### New official logo
-
-The new official logo of PMD:
-
-![New PMD Logo]({{ baseurl }}images/logo/pmd-logo-300px.png)
-
-#### Revamped Java module
-
-* Java grammar substantially refactored - more correct regarding the Java Language Specification (JLS)
-* Built-in rules have been upgraded for the changed AST
-* Rewritten type resolution framework and symbol table correctly implements the JLS
-* AST exposes more semantic information (method calls, field accesses)
-
-For more information, see the [Detailed Release Notes for PMD 7]({{ baseurl }}pmd_release_notes_pmd7.html).
-
-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)
-
-#### Revamped Command Line Interface
-
-* unified and consistent Command Line Interface for both Linux/Unix and Windows across our different utilities
-* single script `pmd` (`pmd.bat` for Windows) to launch the different utilities:
- * `pmd check` to run PMD rules and analyze a project
- * `pmd cpd` to run CPD (copy paste detector)
- * `pmd designer` to run the PMD Rule Designer
-* progress bar support for `pmd check`
-* shell completion
-
-![Demo]({{ baseurl }}images/userdocs/pmd-demo.gif)
-
-For more information, see the [Detailed Release Notes for PMD 7]({{ baseurl }}pmd_release_notes_pmd7.html).
-
-Contributors: [Juan Martín Sotuyo Dodero](https://github.com/jsotuyod) (@jsotuyod)
-
-#### Full Antlr support
-
-* [Antlr](https://www.antlr.org/) based grammars can now be used to build full-fledged PMD rules.
-* Previously, Antlr grammar could only be used for CPD
-* New supported languages: Swift and Kotlin
-
-For more information, see the [Detailed Release Notes for PMD 7]({{ baseurl }}pmd_release_notes_pmd7.html).
-
-Contributors: [Lucas Soncini](https://github.com/lsoncini) (@lsoncini),
-[Matías Fraga](https://github.com/matifraga) (@matifraga),
-[Tomás De Lucca](https://github.com/tomidelucca) (@tomidelucca)
-
-#### Updated PMD Designer
-
-This PMD release ships a new version of the pmd-designer.
-For the changes, see [PMD Designer Changelog](https://github.com/pmd/pmd-designer/releases/tag/7.0.0-rc1).
-
-#### New CPD report format cpdhtml-v2.xslt
-
-Thanks to @mohan-chinnappan-n a new CPD report format has been added which features a data table.
-It uses an XSLT stylesheet to convert CPD's XML format into HTML.
-
-See [the example report]({{ baseurl }}report-examples/cpdhtml-v2.html).
-
-### 🎉 Language Related Changes
-
-Note that this is just a concise listing of the highlight.
-For more information on the languages, see the [Detailed Release Notes for PMD 7]({{ baseurl }}pmd_release_notes_pmd7.html).
-
-#### New: Swift support
-
-* use PMD to analyze Swift code with PMD rules
-* initially 4 built-in rules
-
-Contributors: [Lucas Soncini](https://github.com/lsoncini) (@lsoncini),
-[Matías Fraga](https://github.com/matifraga) (@matifraga),
-[Tomás De Lucca](https://github.com/tomidelucca) (@tomidelucca)
-
-#### New: Kotlin support (experimental)
-
-* use PMD to analyze Kotlin code with PMD rules
-* Support for Kotlin 1.8 grammar
-* initially 2 built-in rules
-
-#### New: CPD support for TypeScript
-
-Thanks to a contribution, CPD now supports the TypeScript language. It is shipped
-with the rest of the JavaScript support in the module `pmd-javascript`.
-
-Contributors: [Paul Guyot](https://github.com/pguyot) (@pguyot)
-
-#### New: CPD support for Julia
-
-Thanks to a contribution, CPD now supports the Julia language. It is shipped
-in the new module `pmd-julia`.
-
-Contributors: [Wener](https://github.com/wener-tiobe) (@wener-tiobe)
-
-#### New: CPD support for Coco
-
-Thanks to a contribution, CPD now supports Coco, a modern programming language
-designed specifically for building event-driven software. It is shipped in the new
-module `pmd-coco`.
-
-Contributors: [Wener](https://github.com/wener-tiobe) (@wener-tiobe)
-
-#### Changed: JavaScript support
-
-* latest version supports ES6 and also some new constructs (see [Rhino](https://github.com/mozilla/rhino)])
-* comments are retained
-
-#### Changed: Language versions
-
-* more predefined language versions for each supported language
-* can be used to limit rule execution for specific versions only with `minimumLanguageVersion` and
- `maximumLanguageVersion` attributes.
-
-#### Changed: CPP can now ignore identifiers in sequences (CPD)
-
-* new command line option for CPD: `--ignore-sequences`.
-* This option is used for CPP only: with the already existing option `--ignore-literal-sequences`, only
- literals were ignored. The new option additional ignores identifiers as well in sequences.
-* See [PR #4470](https://github.com/pmd/pmd/pull/4470) for details.
-
-### 🌟 New and changed rules
-
-#### New Rules
-
-**Apex**
-* {% rule apex/design/UnusedMethod %} finds unused methods in your code.
-
-**Java**
-* {% rule java/codestyle/UnnecessaryBoxing %} reports boxing and unboxing conversions that may be made implicit.
-
-**Kotlin**
-* {% rule kotlin/bestpractices/FunctionNameTooShort %}
-* {% rule kotlin/errorprone/OverrideBothEqualsAndHashcode %}
-
-**Swift**
-* {% rule swift/bestpractices/ProhibitedInterfaceBuilder %}
-* {% rule swift/bestpractices/UnavailableFunction %}
-* {% rule swift/errorprone/ForceCast %}
-* {% rule swift/errorprone/ForceTry %}
-
-#### 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 (vm):
- * Apex: {% rule apex/design/ExcessiveClassLength %}, {% rule apex/design/ExcessiveParameterList %},
- {% rule apex/design/ExcessivePublicCount %}, {% rule apex/design/NcssConstructorCount %},
- {% rule apex/design/NcssMethodCount %}, {% rule apex/design/NcssTypeCount %}
- * Java: {% rule java/design/ExcessiveImports %}, {% rule java/design/ExcessiveParameterList %},
- {% rule java/design/ExcessivePublicCount %}, {% rule java/design/SwitchDensity %}
- * PLSQL: {% rule plsql/design/ExcessiveMethodLength %}, {% rule plsql/design/ExcessiveObjectLength %},
- {% rule plsql/design/ExcessivePackageBodyLength %}, {% rule plsql/design/ExcessivePackageSpecificationLength %},
- {% rule plsql/design/ExcessiveParameterList %}, {% rule plsql/design/ExcessiveTypeLength %},
- {% rule plsql/design/NcssMethodCount %}, {% rule plsql/design/NcssObjectCount %},
- {% rule plsql/design/NPathComplexity %}
- * VM: {% rule vm/design/ExcessiveTemplateLength %}
-
-* The general property `violationSuppressXPath` which is available for all rules to
- [suppress warnings]({{ baseurl }}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.
-
-**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. {% rule java/design/CognitiveComplexity %}.
-
- The report location is controlled by the overrides of the method {% jdoc core::lang.ast.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**
-
-* {% rule java/bestpractices/ArrayIsStoredDirectly %}: Violations are now reported on the assignment and not
- anymore on the formal parameter. The reported line numbers will probably move.
-* {% rule java/bestpractices/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.
-* {% rule java/bestpractices/LooseCoupling %}: The rule has a new property to allow some types to be coupled
- to (`allowedTypes`).
-* {% rule java/bestpractices/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**
-
-* {% rule java/codestyle/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.
-* {% rule java/codestyle/ShortVariable %}: This rule now also reports short enum constant names.
-* {% rule java/codestyle/UseDiamondOperator %}: The property `java7Compatibility` has been removed. The rule now
- handles Java 7 properly without a property.
-* {% rule java/codestyle/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.
-* {% rule java/codestyle/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.
-
-**Java Design**
-
-* {% rule java/design/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.
-* {% rule java/design/ImmutableField %}: The property `ignoredAnnotations` has been removed. The property was
- deprecated since PMD 6.52.0.
-* {% rule java/design/LawOfDemeter %}: The rule has a new property `trustRadius`. This defines the maximum degree
- of trusted data. The default of 1 is the most restrictive.
-* {% rule java/design/NPathComplexity %}: The property `minimum` has been removed. It was deprecated since PMD 6.0.0.
- Use the property `reportLevel` instead.
-* {% rule java/design/SingularField %}: The properties `checkInnerClasses` and `disallowNotAssignment` have been removed.
- The rule is now more precise and will check these cases properly.
-* {% rule java/design/UseUtilityClass %}: The property `ignoredAnnotations` has been removed.
-
-**Java Documentation**
-
-* {% rule java/documentation/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.
-* {% rule java/documentation/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.
-* {% rule java/documentation/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**
-
-* {% rule java/errorprone/AvoidDuplicateLiterals %}: The property `exceptionfile` has been removed. The property was
- deprecated since PMD 6.10.0. Use the property `exceptionList` instead.
-* {% rule java/errorprone/DontImportSun %}: `sun.misc.Signal` is not special-cased anymore.
-* {% rule java/errorprone/EmptyCatchBlock %}: `CloneNotSupportedException` and `InterruptedException` are not
- special-cased anymore. Rename the exception parameter to `ignored` to ignore them.
-* {% rule java/errorprone/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.
-
-#### Removed Rules
-
-Many rules, that were previously deprecated have been finally removed.
-See [Detailed Release Notes for PMD 7]({{ baseurl }}pmd_release_notes_pmd7.html) for the complete list.
-
-### 🚨 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.
-
-Also, there are some improvement and changes in different areas. For the detailed description
-of the changes listed here, see [Detailed Release Notes for PMD 7]({{ baseurl }}pmd_release_notes_pmd7.html).
-
-* Miscellaneous smaller changes and cleanups
-* XPath 3.1 support for XPath-based rules
-* Node stream API for AST traversal
-* Metrics framework
-* Testing framework
-* Language Lifecycle and Language Properties
-
-### 💥 Compatibility and migration notes
-See [Detailed Release Notes for PMD 7]({{ baseurl }}pmd_release_notes_pmd7.html).
+### 🚀 New and noteworthy
### 🐛 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
-* 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
- * [#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
- * [#3918](https://github.com/pmd/pmd/issues/3918): \[core] Make LanguageRegistry non static
- * [#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
- * [#4120](https://github.com/pmd/pmd/issues/4120): \[core] Explicitly name all language versions
- * [#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
- * [#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
-* 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
- * [#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
-* doc
- * [#2501](https://github.com/pmd/pmd/issues/2501): \[doc] Verify ANTLR Documentation
- * [#4438](https://github.com/pmd/pmd/issues/4438): \[doc] Documentation links in VS Code are outdated
-* 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
+### 🚨 API Changes
-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
- * [#4427](https://github.com/pmd/pmd/issues/4427): \[apex] ApexBadCrypto test failing to detect inline code
-* 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
-* 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
- * [#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
- * [#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!
- * [#4405](https://github.com/pmd/pmd/issues/4405): \[java] Processing error with ArrayIndexOutOfBoundsException
-* 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
-* 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
- * [#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
- * [#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
-* java-design
- * [#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
- * [#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
- * [#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
-* 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
-* 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
-* 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
-* xml
- * [#1800](https://github.com/pmd/pmd/pull/1800): \[xml] Unimplement org.w3c.dom.Node from the XmlNodeWrapper
-
-### ✨ 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)
-* [#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)
-* [#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)
-* [#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)
-* [#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)
-
-### 📈 Stats
-* 4694 commits
-* 617 closed tickets & PRs
-* Days since last release: 30
+### ✨ External Contributions
{% endtocmaker %}
diff --git a/docs/pages/release_notes_old.md b/docs/pages/release_notes_old.md
index f773376557..70374c0cb9 100644
--- a/docs/pages/release_notes_old.md
+++ b/docs/pages/release_notes_old.md
@@ -7,6 +7,704 @@ Previous versions of PMD can be downloaded here: https://github.com/pmd/pmd/rele
+## 30-May-2023 - 7.0.0-rc3
+
+We're excited to bring you the next major version of PMD!
+
+Since this is a big release, we provide here only a concise version of the release notes. We prepared a separate
+page with the full [Detailed Release Notes for PMD 7.0.0](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_release_notes_pmd7.html).
+
+
+
ℹ️ Release Candidates
+
PMD 7.0.0 is finally almost ready. In order to gather feedback, we are going to ship a couple of release candidates.
+These are officially available on GitHub and Maven Central and can be used as usual (e.g. as a dependency).
+We encourage you to try out the new features, but keep in mind that we may introduce API breaking changes between
+the release candidates. It should be stable enough if you don't use custom rules.
+
+
We have still some tasks planned for the next release candidates.
+You can see the progress in PMD 7 Tracking Issue #3898.
+
+
If you find any problem or difficulty while updating from PMD 6, please provide feedback via our
+issue tracker. That way we can improve the experience
+for all.
+
+
+### Table Of Contents
+
+* [Changes since 7.0.0-rc2](#changes-since-7.0.0-rc2)
+ * [New CPD report format cpdhtml-v2.xslt](#new-cpd-report-format-cpdhtml-v2.xslt)
+ * [Fixed issues](#fixed-issues)
+ * [API Changes](#api-changes)
+ * [External Contributions](#external-contributions)
+* [🚀 Major Features and Enhancements](#🚀-major-features-and-enhancements)
+ * [New official logo](#new-official-logo)
+ * [Revamped Java module](#revamped-java-module)
+ * [Revamped Command Line Interface](#revamped-command-line-interface)
+ * [Full Antlr support](#full-antlr-support)
+ * [Updated PMD Designer](#updated-pmd-designer)
+ * [New CPD report format cpdhtml-v2.xslt](#new-cpd-report-format-cpdhtml-v2.xslt)
+* [🎉 Language Related Changes](#🎉-language-related-changes)
+ * [New: Swift support](#new:-swift-support)
+ * [New: Kotlin support (experimental)](#new:-kotlin-support-(experimental))
+ * [New: CPD support for TypeScript](#new:-cpd-support-for-typescript)
+ * [New: CPD support for Julia](#new:-cpd-support-for-julia)
+ * [New: CPD support for Coco](#new:-cpd-support-for-coco)
+ * [Changed: JavaScript support](#changed:-javascript-support)
+ * [Changed: Language versions](#changed:-language-versions)
+ * [Changed: CPP can now ignore identifiers in sequences (CPD)](#changed:-cpp-can-now-ignore-identifiers-in-sequences-(cpd))
+* [🌟 New and changed rules](#🌟-new-and-changed-rules)
+ * [New Rules](#new-rules)
+ * [Changed Rules](#changed-rules)
+ * [Removed Rules](#removed-rules)
+* [🚨 API](#🚨-api)
+* [💥 Compatibility and migration notes](#💥-compatibility-and-migration-notes)
+* [🐛 Fixed Issues](#🐛-fixed-issues)
+* [✨ External Contributions](#✨-external-contributions)
+* [📈 Stats](#📈-stats)
+
+### Changes since 7.0.0-rc2
+
+This section lists the most important changes from the last release candidate.
+The remaining section describes the complete release notes for 7.0.0.
+
+#### New CPD report format cpdhtml-v2.xslt
+
+Thanks to @mohan-chinnappan-n a new CPD report format has been added which features a data table.
+It uses an XSLT stylesheet to convert CPD's XML format into HTML.
+
+See [the example report](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/report-examples/cpdhtml-v2.html).
+
+#### Fixed issues
+
+* miscellaneous
+ * [#4460](https://github.com/pmd/pmd/pull/4460): Fix assembly-plugin warnings
+* core
+ * [#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
+* java-bestpractices
+ * [#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
+* java-codestyle
+ * [#4268](https://github.com/pmd/pmd/issues/4268): \[java] CommentDefaultAccessModifier: false positive with TestNG annotations
+ * [#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
+ * [#4557](https://github.com/pmd/pmd/issues/4557): \[java] UnnecessaryImport FP with static imports of overloaded methods
+* java-design
+ * [#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
+ * [#4549](https://github.com/pmd/pmd/pull/4549): \[java] Make LawOfDemeter results deterministic
+* java-errorprone
+ * [#4063](https://github.com/pmd/pmd/issues/4063): \[java] AvoidBranchingStatementAsLastInLoop: False-negative about try/finally block
+ * [#4457](https://github.com/pmd/pmd/issues/4457): \[java] OverrideBothEqualsAndHashcode: false negative with anonymous classes
+ * [#4510](https://github.com/pmd/pmd/issues/4510): \[java] ConstructorCallsOverridableMethod: false positive with lombok's @Value
+ * [#4546](https://github.com/pmd/pmd/issues/4546): \[java] OverrideBothEqualsAndHashCode ignores records
+* java-performance
+ * [#4458](https://github.com/pmd/pmd/issues/4458): \[java] RedundantFieldInitializer: false positive with lombok's @Value
+
+#### API Changes
+
+* 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`
+* The asset filenames of PMD on [GitHub Releases](https://github.com/pmd/pmd/releases) are
+ now `pmd-dist--bin.zip`, `pmd-dist--src.zip` and `pmd-dist--doc.zip`.
+ Keep that in mind, if you have an automated download script.
+
+ The structure inside the ZIP files stay the same, e.g. we still provide inside the binary distribution
+ ZIP file the base directory `pmd-bin-`.
+* The CLI option `--stress` (or `-stress`) has been removed without replacement.
+* 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.
+* Replaced `RuleViolation::getFilename` with new 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.
+
+#### External Contributions
+
+* [#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)
+* [#4431](https://github.com/pmd/pmd/pull/4431): \[coco] CPD: Coco support for code duplication detection - [Wener](https://github.com/wener-tiobe) (@wener-tiobe)
+* [#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)
+* [#4507](https://github.com/pmd/pmd/pull/4507): \[java] Fix #4503: A false negative about JUnitTestsShouldIncludeAssert and testng - [AnnaDev](https://github.com/LynnBroe) (@LynnBroe)
+* [#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)
+
+### 🚀 Major Features and Enhancements
+
+#### New official logo
+
+The new official logo of PMD:
+
+![New PMD Logo](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/images/logo/pmd-logo-300px.png)
+
+#### Revamped Java module
+
+* Java grammar substantially refactored - more correct regarding the Java Language Specification (JLS)
+* Built-in rules have been upgraded for the changed AST
+* Rewritten type resolution framework and symbol table correctly implements the JLS
+* AST exposes more semantic information (method calls, field accesses)
+
+For more information, see the [Detailed Release Notes for PMD 7](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_release_notes_pmd7.html).
+
+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)
+
+#### Revamped Command Line Interface
+
+* unified and consistent Command Line Interface for both Linux/Unix and Windows across our different utilities
+* single script `pmd` (`pmd.bat` for Windows) to launch the different utilities:
+ * `pmd check` to run PMD rules and analyze a project
+ * `pmd cpd` to run CPD (copy paste detector)
+ * `pmd designer` to run the PMD Rule Designer
+* progress bar support for `pmd check`
+* shell completion
+
+![Demo](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/images/userdocs/pmd-demo.gif)
+
+For more information, see the [Detailed Release Notes for PMD 7](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_release_notes_pmd7.html).
+
+Contributors: [Juan Martín Sotuyo Dodero](https://github.com/jsotuyod) (@jsotuyod)
+
+#### Full Antlr support
+
+* [Antlr](https://www.antlr.org/) based grammars can now be used to build full-fledged PMD rules.
+* Previously, Antlr grammar could only be used for CPD
+* New supported languages: Swift and Kotlin
+
+For more information, see the [Detailed Release Notes for PMD 7](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_release_notes_pmd7.html).
+
+Contributors: [Lucas Soncini](https://github.com/lsoncini) (@lsoncini),
+[Matías Fraga](https://github.com/matifraga) (@matifraga),
+[Tomás De Lucca](https://github.com/tomidelucca) (@tomidelucca)
+
+#### Updated PMD Designer
+
+This PMD release ships a new version of the pmd-designer.
+For the changes, see [PMD Designer Changelog](https://github.com/pmd/pmd-designer/releases/tag/7.0.0-rc1).
+
+#### New CPD report format cpdhtml-v2.xslt
+
+Thanks to @mohan-chinnappan-n a new CPD report format has been added which features a data table.
+It uses an XSLT stylesheet to convert CPD's XML format into HTML.
+
+See [the example report](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/report-examples/cpdhtml-v2.html).
+
+### 🎉 Language Related Changes
+
+Note that this is just a concise listing of the highlight.
+For more information on the languages, see the [Detailed Release Notes for PMD 7](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_release_notes_pmd7.html).
+
+#### New: Swift support
+
+* use PMD to analyze Swift code with PMD rules
+* initially 4 built-in rules
+
+Contributors: [Lucas Soncini](https://github.com/lsoncini) (@lsoncini),
+[Matías Fraga](https://github.com/matifraga) (@matifraga),
+[Tomás De Lucca](https://github.com/tomidelucca) (@tomidelucca)
+
+#### New: Kotlin support (experimental)
+
+* use PMD to analyze Kotlin code with PMD rules
+* Support for Kotlin 1.8 grammar
+* initially 2 built-in rules
+
+#### New: CPD support for TypeScript
+
+Thanks to a contribution, CPD now supports the TypeScript language. It is shipped
+with the rest of the JavaScript support in the module `pmd-javascript`.
+
+Contributors: [Paul Guyot](https://github.com/pguyot) (@pguyot)
+
+#### New: CPD support for Julia
+
+Thanks to a contribution, CPD now supports the Julia language. It is shipped
+in the new module `pmd-julia`.
+
+Contributors: [Wener](https://github.com/wener-tiobe) (@wener-tiobe)
+
+#### New: CPD support for Coco
+
+Thanks to a contribution, CPD now supports Coco, a modern programming language
+designed specifically for building event-driven software. It is shipped in the new
+module `pmd-coco`.
+
+Contributors: [Wener](https://github.com/wener-tiobe) (@wener-tiobe)
+
+#### Changed: JavaScript support
+
+* latest version supports ES6 and also some new constructs (see [Rhino](https://github.com/mozilla/rhino)])
+* comments are retained
+
+#### Changed: Language versions
+
+* more predefined language versions for each supported language
+* can be used to limit rule execution for specific versions only with `minimumLanguageVersion` and
+ `maximumLanguageVersion` attributes.
+
+#### Changed: CPP can now ignore identifiers in sequences (CPD)
+
+* new command line option for CPD: `--ignore-sequences`.
+* This option is used for CPP only: with the already existing option `--ignore-literal-sequences`, only
+ literals were ignored. The new option additional ignores identifiers as well in sequences.
+* See [PR #4470](https://github.com/pmd/pmd/pull/4470) for details.
+
+### 🌟 New and changed rules
+
+#### New Rules
+
+**Apex**
+* [`UnusedMethod`](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_rules_apex_design.html#unusedmethod) finds unused methods in your code.
+
+**Java**
+* [`UnnecessaryBoxing`](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_rules_java_codestyle.html#unnecessaryboxing) reports boxing and unboxing conversions that may be made implicit.
+
+**Kotlin**
+* [`FunctionNameTooShort`](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_rules_kotlin_bestpractices.html#functionnametooshort)
+* [`OverrideBothEqualsAndHashcode`](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_rules_kotlin_errorprone.html#overridebothequalsandhashcode)
+
+**Swift**
+* [`ProhibitedInterfaceBuilder`](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_rules_swift_bestpractices.html#prohibitedinterfacebuilder)
+* [`UnavailableFunction`](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_rules_swift_bestpractices.html#unavailablefunction)
+* [`ForceCast`](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_rules_swift_errorprone.html#forcecast)
+* [`ForceTry`](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_rules_swift_errorprone.html#forcetry)
+
+#### 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 (vm):
+ * Apex: [`ExcessiveClassLength`](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_rules_apex_design.html#excessiveclasslength), [`ExcessiveParameterList`](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_rules_apex_design.html#excessiveparameterlist),
+ [`ExcessivePublicCount`](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_rules_apex_design.html#excessivepubliccount), [`NcssConstructorCount`](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_rules_apex_design.html#ncssconstructorcount),
+ [`NcssMethodCount`](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_rules_apex_design.html#ncssmethodcount), [`NcssTypeCount`](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_rules_apex_design.html#ncsstypecount)
+ * Java: [`ExcessiveImports`](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_rules_java_design.html#excessiveimports), [`ExcessiveParameterList`](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_rules_java_design.html#excessiveparameterlist),
+ [`ExcessivePublicCount`](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_rules_java_design.html#excessivepubliccount), [`SwitchDensity`](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_rules_java_design.html#switchdensity)
+ * PLSQL: [`ExcessiveMethodLength`](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_rules_plsql_design.html#excessivemethodlength), [`ExcessiveObjectLength`](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_rules_plsql_design.html#excessiveobjectlength),
+ [`ExcessivePackageBodyLength`](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_rules_plsql_design.html#excessivepackagebodylength), [`ExcessivePackageSpecificationLength`](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_rules_plsql_design.html#excessivepackagespecificationlength),
+ [`ExcessiveParameterList`](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_rules_plsql_design.html#excessiveparameterlist), [`ExcessiveTypeLength`](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_rules_plsql_design.html#excessivetypelength),
+ [`NcssMethodCount`](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_rules_plsql_design.html#ncssmethodcount), [`NcssObjectCount`](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_rules_plsql_design.html#ncssobjectcount),
+ [`NPathComplexity`](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_rules_plsql_design.html#npathcomplexity)
+ * VM: [`ExcessiveTemplateLength`](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_rules_vm_design.html#excessivetemplatelength)
+
+* The general property `violationSuppressXPath` which is available for all rules to
+ [suppress warnings](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/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.
+
+**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-rc3/pmd_rules_java_design.html#cognitivecomplexity).
+
+ The report location is controlled by the overrides of the method 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-rc3/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-rc3/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-rc3/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-rc3/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-rc3/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-rc3/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-rc3/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-rc3/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-rc3/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.
+
+**Java Design**
+
+* [`CyclomaticComplexity`](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/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-rc3/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-rc3/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-rc3/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-rc3/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-rc3/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-rc3/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-rc3/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.
+* [`CommentSize`](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/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-rc3/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-rc3/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-rc3/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-rc3/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.
+
+#### Removed Rules
+
+Many rules, that were previously deprecated have been finally removed.
+See [Detailed Release Notes for PMD 7](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_release_notes_pmd7.html) for the complete list.
+
+### 🚨 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.
+
+Also, there are some improvement and changes in different areas. For the detailed description
+of the changes listed here, see [Detailed Release Notes for PMD 7](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_release_notes_pmd7.html).
+
+* Miscellaneous smaller changes and cleanups
+* XPath 3.1 support for XPath-based rules
+* Node stream API for AST traversal
+* Metrics framework
+* Testing framework
+* Language Lifecycle and Language Properties
+
+### 💥 Compatibility and migration notes
+See [Detailed Release Notes for PMD 7](https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_release_notes_pmd7.html).
+
+### 🐛 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
+* 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
+ * [#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
+ * [#3918](https://github.com/pmd/pmd/issues/3918): \[core] Make LanguageRegistry non static
+ * [#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
+ * [#4120](https://github.com/pmd/pmd/issues/4120): \[core] Explicitly name all language versions
+ * [#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
+ * [#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
+* 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
+ * [#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
+* doc
+ * [#2501](https://github.com/pmd/pmd/issues/2501): \[doc] Verify ANTLR Documentation
+ * [#4438](https://github.com/pmd/pmd/issues/4438): \[doc] Documentation links in VS Code are outdated
+* 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
+ * [#4427](https://github.com/pmd/pmd/issues/4427): \[apex] ApexBadCrypto test failing to detect inline code
+* 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
+* 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
+ * [#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
+ * [#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!
+ * [#4405](https://github.com/pmd/pmd/issues/4405): \[java] Processing error with ArrayIndexOutOfBoundsException
+* 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
+* 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
+ * [#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
+ * [#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
+* java-design
+ * [#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
+ * [#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
+ * [#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
+* 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
+* 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
+* 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
+* xml
+ * [#1800](https://github.com/pmd/pmd/pull/1800): \[xml] Unimplement org.w3c.dom.Node from the XmlNodeWrapper
+
+### ✨ 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)
+* [#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)
+* [#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)
+* [#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)
+* [#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)
+
+### 📈 Stats
+* 4694 commits
+* 617 closed tickets & PRs
+* Days since last release: 30
+
+
+
## 29-April-2023 - 7.0.0-rc2
We're excited to bring you the next major version of PMD!