pmd/pmd_release_notes.html

2279 lines
89 KiB
HTML
Raw Normal View History

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="keywords" content=" changelog, release notes">
<title>PMD Release Notes | PMD Source Code Analyzer</title>
<link rel="stylesheet" type="text/css" href="assets/fontawesome-free-5.15.4-web/css/all.min.css">
<link rel="stylesheet" type="text/css" href="assets/bootstrap-4.5.2-dist/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="css/syntax.css">
<link rel="stylesheet" type="text/css" href="css/modern-business.css">
<link rel="stylesheet" type="text/css" href="css/customstyles.css">
<link rel="stylesheet" type="text/css" href="css/theme-green.css">
<link rel="stylesheet" type="text/css" href="css/pmd-customstyles.css">
<link rel="shortcut icon" href="images/logo/favicon.ico" type="image/x-icon">
<link rel="icon" href="images/logo/favicon.ico" type="image/x-icon">
<link rel="alternate" type="application/rss+xml" title="" href="feed.xml">
</head>
<body>
<!-- Content is offset by the height of the topnav bar. -->
<!-- There's already a padding-top rule in modern-business.css, but it apparently doesn't work on Firefox 60 and Chrome 67 -->
<div id="topbar-content-offset">
<!-- Navigation -->
<nav class="navbar navbar-expand-lg fixed-top navbar-dark">
<div class="container topnavlinks">
<a class="navbar-brand fas fa-home fa-lg" href="index.html">&nbsp;<span class="projectTitle"> PMD Source Code Analyzer Project</span></a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto mt-2 mt-lg-0"></ul>
<ul class="navbar-nav">
<!-- toggle sidebar button -->
<li class="nav-item"><a id="tg-sb-link" class="nav-link" href="#"><i id="tg-sb-icon" class="fas fa-toggle-on"></i> Nav</a></li>
<!-- entries without drop-downs appear here -->
<li class="nav-item"><a class="nav-link" href="https://github.com/pmd/pmd/releases/latest" target="_blank">Download</a></li>
<li class="nav-item"><a class="nav-link" href="https://github.com/pmd/pmd" target="_blank">Fork us on github</a></li>
<!-- entries with drop-downs appear here -->
<!-- conditional logic to control which topnav appears for the audience defined in the configuration file.-->
</ul>
<form class="form-inline my-2 my-lg-0">
<input class="form-control mr-sm-2" type="search" placeholder="search..." id="search-input">
<ul id="results-container"></ul>
</form>
</div>
</div>
</nav>
<!-- Page Content -->
<div class="container-toc-wrapper">
<div class="container">
<div class="col-lg-12">&nbsp;</div>
<!-- Content Row -->
<div class="row">
<!-- Sidebar Column -->
<div class="col-md-3" id="tg-sb-sidebar">
<ul id="mysidebar" class="nav">
<li class="sidebarTitle">PMD 7.0.0-SNAPSHOT</li>
<div class="sidebarTitleDate">Release date: ??-????-2023</div>
<li>
<a href="#">About</a>
<ul>
<li><a href="index.html">Home</a></li>
<li class="active"><a href="pmd_release_notes.html">Release notes</a></li>
<li><a href="pmd_release_notes_pmd7.html">Release notes (PMD 7)</a></li>
<li><a href="pmd_about_help.html">Getting help</a></li>
</ul>
</li>
<li>
<a href="#">User Documentation</a>
<ul>
<li><a href="pmd_userdocs_installation.html">Installation and basic CLI usage</a></li>
<li><a href="pmd_userdocs_making_rulesets.html">Making rulesets</a></li>
<li><a href="pmd_userdocs_configuring_rules.html">Configuring rules</a></li>
<li><a href="pmd_userdocs_best_practices.html">Best practices</a></li>
<li><a href="pmd_userdocs_suppressing_warnings.html">Suppressing warnings</a></li>
<li><a href="pmd_userdocs_incremental_analysis.html">Incremental analysis</a></li>
<li><a href="pmd_userdocs_cli_reference.html">PMD CLI reference</a></li>
<li><a href="pmd_userdocs_report_formats.html">PMD Report formats</a></li>
<li><a href="pmd_userdocs_3rdpartyrulesets.html">3rd party rulesets</a></li>
<li class="subfolders">
<a href="#">CPD reference</a>
<ul>
<li><a href="pmd_userdocs_cpd.html">Copy-paste detection</a></li>
<li><a href="pmd_userdocs_cpd_report_formats.html">CPD Report formats</a></li>
</ul>
</li>
<li class="subfolders">
<a href="#">Extending PMD</a>
<ul>
<li><a href="pmd_userdocs_extending_writing_rules_intro.html">Introduction to writing rules</a></li>
<li><a href="pmd_userdocs_extending_your_first_rule.html">Your first rule</a></li>
<li><a href="pmd_userdocs_extending_writing_xpath_rules.html">XPath rules</a></li>
<li><a href="pmd_userdocs_extending_writing_java_rules.html">Java rules</a></li>
<li><a href="pmd_userdocs_extending_designer_reference.html">Rule designer reference</a></li>
<li><a href="pmd_userdocs_extending_defining_properties.html">Defining rule properties</a></li>
<li><a href="pmd_userdocs_extending_rule_guidelines.html">Rule guidelines</a></li>
<li><a href="pmd_userdocs_extending_testing.html">Testing your rules</a></li>
</ul>
</li>
<li class="subfolders">
<a href="#">Tools / Integrations</a>
<ul>
<li><a href="pmd_userdocs_tools_maven.html">Maven PMD Plugin</a></li>
<li><a href="pmd_userdocs_tools_gradle.html">Gradle</a></li>
<li><a href="pmd_userdocs_tools_ant.html">Ant</a></li>
<li><a href="pmd_userdocs_tools_java_api.html">PMD Java API</a></li>
<li><a href="pmd_userdocs_tools_ci.html">CI integrations</a></li>
<li><a href="pmd_userdocs_tools.html">Other Tools / Integrations</a></li>
</ul>
</li>
</ul>
</li>
<li>
<a href="#">Rule Reference</a>
<ul>
<li class="subfolders">
<a href="#">Apex Rules</a>
<ul>
<li><a href="pmd_rules_apex.html">Index</a></li>
<li><a href="pmd_rules_apex_bestpractices.html">Best Practices</a></li>
<li><a href="pmd_rules_apex_codestyle.html">Code Style</a></li>
<li><a href="pmd_rules_apex_design.html">Design</a></li>
<li><a href="pmd_rules_apex_documentation.html">Documentation</a></li>
<li><a href="pmd_rules_apex_errorprone.html">Error Prone</a></li>
<li><a href="pmd_rules_apex_performance.html">Performance</a></li>
<li><a href="pmd_rules_apex_security.html">Security</a></li>
</ul>
</li>
<li class="subfolders">
<a href="#">HTML Rules</a>
<ul>
<li><a href="pmd_rules_html.html">Index</a></li>
<li><a href="pmd_rules_html_bestpractices.html">Best Practices</a></li>
</ul>
</li>
<li class="subfolders">
<a href="#">Java Rules</a>
<ul>
<li><a href="pmd_rules_java.html">Index</a></li>
<li><a href="pmd_rules_java_bestpractices.html">Best Practices</a></li>
<li><a href="pmd_rules_java_codestyle.html">Code Style</a></li>
<li><a href="pmd_rules_java_design.html">Design</a></li>
<li><a href="pmd_rules_java_documentation.html">Documentation</a></li>
<li><a href="pmd_rules_java_errorprone.html">Error Prone</a></li>
<li><a href="pmd_rules_java_multithreading.html">Multithreading</a></li>
<li><a href="pmd_rules_java_performance.html">Performance</a></li>
<li><a href="pmd_rules_java_security.html">Security</a></li>
</ul>
</li>
<li class="subfolders">
<a href="#">Java Server Pages Rules</a>
<ul>
<li><a href="pmd_rules_jsp.html">Index</a></li>
<li><a href="pmd_rules_jsp_bestpractices.html">Best Practices</a></li>
<li><a href="pmd_rules_jsp_codestyle.html">Code Style</a></li>
<li><a href="pmd_rules_jsp_design.html">Design</a></li>
<li><a href="pmd_rules_jsp_errorprone.html">Error Prone</a></li>
<li><a href="pmd_rules_jsp_security.html">Security</a></li>
</ul>
</li>
<li class="subfolders">
<a href="#">JavaScript Rules</a>
<ul>
<li><a href="pmd_rules_ecmascript.html">Index</a></li>
<li><a href="pmd_rules_ecmascript_bestpractices.html">Best Practices</a></li>
<li><a href="pmd_rules_ecmascript_codestyle.html">Code Style</a></li>
<li><a href="pmd_rules_ecmascript_errorprone.html">Error Prone</a></li>
</ul>
</li>
<li class="subfolders">
<a href="#">Kotlin Rules</a>
<ul>
<li><a href="pmd_rules_kotlin.html">Index</a></li>
<li><a href="pmd_rules_kotlin_bestpractices.html">Best Practices</a></li>
<li><a href="pmd_rules_kotlin_errorprone.html">Error Prone</a></li>
</ul>
</li>
<li class="subfolders">
<a href="#">Maven POM Rules</a>
<ul>
<li><a href="pmd_rules_pom.html">Index</a></li>
<li><a href="pmd_rules_pom_errorprone.html">Error Prone</a></li>
</ul>
</li>
<li class="subfolders">
<a href="#">Modelica Rules</a>
<ul>
<li><a href="pmd_rules_modelica.html">Index</a></li>
<li><a href="pmd_rules_modelica_bestpractices.html">Best Practices</a></li>
</ul>
</li>
<li class="subfolders">
<a href="#">PLSQL Rules</a>
<ul>
<li><a href="pmd_rules_plsql.html">Index</a></li>
<li><a href="pmd_rules_plsql_bestpractices.html">Best Practices</a></li>
<li><a href="pmd_rules_plsql_codestyle.html">Code Style</a></li>
<li><a href="pmd_rules_plsql_design.html">Design</a></li>
<li><a href="pmd_rules_plsql_errorprone.html">Error Prone</a></li>
</ul>
</li>
<li class="subfolders">
<a href="#">Salesforce VisualForce Rules</a>
<ul>
<li><a href="pmd_rules_vf.html">Index</a></li>
<li><a href="pmd_rules_vf_security.html">Security</a></li>
</ul>
</li>
<li class="subfolders">
<a href="#">Scala Rules</a>
<ul>
<li><a href="pmd_rules_scala.html">Index</a></li>
</ul>
</li>
<li class="subfolders">
<a href="#">Swift Rules</a>
<ul>
<li><a href="pmd_rules_swift.html">Index</a></li>
<li><a href="pmd_rules_swift_bestpractices.html">Best Practices</a></li>
<li><a href="pmd_rules_swift_errorprone.html">Error Prone</a></li>
</ul>
</li>
<li class="subfolders">
<a href="#">VM Rules</a>
<ul>
<li><a href="pmd_rules_vm.html">Index</a></li>
<li><a href="pmd_rules_vm_bestpractices.html">Best Practices</a></li>
<li><a href="pmd_rules_vm_design.html">Design</a></li>
<li><a href="pmd_rules_vm_errorprone.html">Error Prone</a></li>
</ul>
</li>
<li class="subfolders">
<a href="#">WSDL Rules</a>
<ul>
<li><a href="pmd_rules_wsdl.html">Index</a></li>
</ul>
</li>
<li class="subfolders">
<a href="#">XML Rules</a>
<ul>
<li><a href="pmd_rules_xml.html">Index</a></li>
<li><a href="pmd_rules_xml_errorprone.html">Error Prone</a></li>
</ul>
</li>
<li class="subfolders">
<a href="#">XSL Rules</a>
<ul>
<li><a href="pmd_rules_xsl.html">Index</a></li>
<li><a href="pmd_rules_xsl_codestyle.html">Code Style</a></li>
<li><a href="pmd_rules_xsl_performance.html">Performance</a></li>
</ul>
</li>
</ul>
</li>
<li>
<a href="#">Language-Specific Documentation</a>
<ul>
<li><a href="pmd_languages_configuration.html">Language configuration</a></li>
<li><a href="pmd_languages_apex.html">Apex</a></li>
<li><a href="pmd_languages_java.html">Java</a></li>
<li><a href="pmd_languages_js_ts.html">JavaScript / TypeScript</a></li>
<li><a href="pmd_languages_jsp.html">JSP</a></li>
<li><a href="pmd_languages_kotlin.html">Kotlin</a></li>
<li><a href="pmd_languages_plsql.html">PLSQL</a></li>
<li><a href="pmd_languages_visualforce.html">Visualforce</a></li>
<li><a href="pmd_languages_xml.html">XML and XML dialects</a></li>
<li><a href="pmd_languages_html.html">HTML</a></li>
<li><a href="pmd_languages_gherkin.html">Gherkin</a></li>
</ul>
</li>
<li>
<a href="#">Developer Documentation</a>
<ul>
<li><a href="pmd_devdocs_development.html">Developer resources</a></li>
<li><a href="pmd_devdocs_building.html">Building PMD from source</a></li>
<li><a href="https://github.com/pmd/pmd/blob/master/CONTRIBUTING.md" target="_blank">Contributing</a></li>
<li><a href="pmd_devdocs_writing_documentation.html">Writing documentation</a></li>
<li><a href="pmd_devdocs_roadmap.html">Roadmap</a></li>
<li><a href="pmd_devdocs_how_pmd_works.html">How PMD works</a></li>
<li><a href="pmd_devdocs_pmdtester.html">Pmdtester</a></li>
<li><a href="pmd_devdocs_rule_deprecation_policy.html">Rule Deprecation Policy</a></li>
<li class="subfolders">
<a href="#">Major contributions</a>
<ul>
<li><a href="pmd_devdocs_major_rule_guidelines.html">Rule Guidelines</a></li>
<li><a href="pmd_devdocs_major_adding_new_language_javacc.html">Adding a new language (JavaCC)</a></li>
<li><a href="pmd_devdocs_major_adding_new_language_antlr.html">Adding a new language (ANTLR)</a></li>
<li><a href="pmd_devdocs_major_adding_new_cpd_language.html">Adding a new CPD language</a></li>
</ul>
</li>
<li class="subfolders">
<a href="#">Experimental features</a>
<ul>
<li><a href="pmd_devdocs_experimental_ast_dump.html">Creating (XML) dump of the AST</a></li>
</ul>
</li>
</ul>
</li>
<li>
<a href="#">Project documentation</a>
<ul>
<li class="subfolders">
<a href="#">Trivia about PMD</a>
<ul>
<li><a href="pmd_projectdocs_trivia_news.html">PMD in the press</a></li>
<li><a href="pmd_projectdocs_trivia_products.html">Products & books related to PMD</a></li>
<li><a href="pmd_projectdocs_trivia_similarprojects.html">Similar projects</a></li>
<li><a href="pmd_projectdocs_trivia_meaning.html">What does 'PMD' mean?</a></li>
</ul>
</li>
<li><a href="pmd_projectdocs_logo.html">Logo</a></li>
<li><a href="pmd_projectdocs_faq.html">FAQ</a></li>
<li><a href="license.html">License</a></li>
<li><a href="pmd_projectdocs_credits.html">Credits</a></li>
<li><a href="pmd_release_notes_old.html">Old release notes</a></li>
<li><a href="pmd_projectdocs_decisions.html">Decisions</a></li>
<li class="subfolders">
<a href="#">Project management</a>
<ul>
<li><a href="pmd_projectdocs_committers_infrastructure.html">Infrastructure</a></li>
<li><a href="pmd_projectdocs_committers_releasing.html">Release process</a></li>
<li><a href="pmd_projectdocs_committers_merging_pull_requests.html">Merging pull requests</a></li>
<li><a href="pmd_projectdocs_committers_main_landing_page.html">Main Landing page</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<!-- Content Column -->
<div class="col-md-9" id="tg-sb-content">
<header>
<div class="row">
<div class="col-lg-12">
<a href="./" role="button"
><i class="fa fa-home fa-lg"></i
></a>
» PMD Release Notes
<a
target="_blank"
href="https://github.com/pmd/pmd/blob/master/docs/pages/release_notes.md"
class="float-right"
role="button"
><i class="fab fa-github fa-lg"></i> Edit on GitHub</a
>
</div>
</div>
<hr />
</header>
<div class="post-header">
<h1 class="post-title-main">PMD Release Notes</h1>
</div>
<div class="post-content" data-github-edit-url="https://github.com/pmd/pmd/blob/master/docs/pages/release_notes.md">
<div id="inline-toc"><!-- empty, move TOC here when screen size too small --></div>
<h2 id="--2023---700-snapshot">??-????-2023 - 7.0.0-SNAPSHOT</h2>
<p>Were excited to bring you the next major version of PMD!</p>
<p>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 <a href="pmd_release_notes_pmd7.html">Detailed Release Notes for PMD 7.0.0</a>.</p>
<div style="border: 1px solid; border-radius: .25rem; padding: .75rem 1.25rem;" role="alert">
<strong> Release Candidates</strong>
<p>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.</p>
<p>We have still some tasks planned for the next release candidates.
You can see the progress in <a href="https://github.com/pmd/pmd/issues/3898">PMD 7 Tracking Issue #3898</a>.</p>
<p>If you find any problem or difficulty while updating from PMD 6, please provide feedback via our
<a href="https://github.com/pmd/pmd/issues/new/choose">issue tracker</a>. That way we can improve the experience
for all.</p>
</div>
<h3 id="changes-since-700-rc1">Changes since 7.0.0-rc1</h3>
<p>This section lists the most important changes from the last release candidate.
The remaining section describe the complete release notes for 7.0.0.</p>
<h4 id="api-changes">API Changes</h4>
<ul>
<li>Moved the two classes <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/cpd/impl/AntlrTokenizer.html#"><code>AntlrTokenizer</code></a> and <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/cpd/impl/JavaCCTokenizer.html#"><code>JavaCCTokenizer</code></a> from
<code class="language-plaintext highlighter-rouge">internal</code> package into package <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/cpd/impl/package-summary.html#"><code>net.sourceforge.pmd.cpd.impl</code></a>. These two classes are part of the API and
are base classes for CPD language implementations.</li>
<li><code class="language-plaintext highlighter-rouge">AntlrBaseRule</code> is gone in favor of <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/rule/AbstractVisitorRule.html#"><code>AbstractVisitorRule</code></a>.</li>
<li>The classes <a href="https://docs.pmd-code.org/apidocs/pmd-kotlin/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/kotlin/ast/KotlinInnerNode.html#"><code>KotlinInnerNode</code></a> and <a href="https://docs.pmd-code.org/apidocs/pmd-swift/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/swift/ast/SwiftInnerNode.html#"><code>SwiftInnerNode</code></a>
are package-private now.</li>
<li>The parameter order of <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/document/FileCollector.html#addSourceFile(String,String)"><code>addSourceFile</code></a> has been swapped
in order to have the same meaning as in 6.55.0. That will make it easier if you upgrade from 6.55.0 to 7.0.0.
However, that means, that you need to change these method calls if you have migrated to 7.0.0-rc1 already.</li>
</ul>
<h4 id="updated-pmd-designer">Updated PMD Designer</h4>
<p>This PMD release ships a new version of the pmd-designer.
For the changes, see <a href="https://github.com/pmd/pmd-designer/releases/tag/7.0.0-rc1">PMD Designer Changelog</a>.</p>
<h4 id="rule-changes">Rule Changes</h4>
<ul>
<li><a href="pmd_rules_java_design.html#immutablefield"><code class="language-plaintext highlighter-rouge">ImmutableField</code></a>: the property <code class="language-plaintext highlighter-rouge">ignoredAnnotations</code> has been removed. The property was
deprecated since PMD 6.52.0.</li>
</ul>
<h4 id="fixed-issues">Fixed Issues</h4>
<ul>
<li>cli
<ul>
<li><a href="https://github.com/pmd/pmd/issues/4482">#4482</a>: [cli] pmd.bat can only be executed once</li>
<li><a href="https://github.com/pmd/pmd/issues/4484">#4484</a>: [cli] ast-dump with no properties produce an NPE</li>
</ul>
</li>
<li>core
<ul>
<li><a href="https://github.com/pmd/pmd/issues/2500">#2500</a>: [core] Clarify API for ANTLR based languages</li>
</ul>
</li>
<li>doc
<ul>
<li><a href="https://github.com/pmd/pmd/issues/2501">#2501</a>: [doc] Verify ANTLR Documentation</li>
<li><a href="https://github.com/pmd/pmd/issues/4438">#4438</a>: [doc] Documentation links in VS Code are outdated</li>
</ul>
</li>
<li>java-codestyle
<ul>
<li><a href="https://github.com/pmd/pmd/issues/4273">#4273</a>: [java] CommentDefaultAccessModifier ignoredAnnotations should include “org.junit.jupiter.api.extension.RegisterExtension” by default</li>
<li><a href="https://github.com/pmd/pmd/issues/4487">#4487</a>: [java] UnnecessaryConstructor: false-positive with @<!-- -->Inject and @<!-- -->Autowired</li>
</ul>
</li>
<li>java-design
<ul>
<li><a href="https://github.com/pmd/pmd/issues/4254">#4254</a>: [java] ImmutableField - false positive with Lombok @<!-- -->Setter</li>
<li><a href="https://github.com/pmd/pmd/issues/4477">#4477</a>: [java] SignatureDeclareThrowsException: false-positive with TestNG annotations</li>
<li><a href="https://github.com/pmd/pmd/issues/4490">#4490</a>: [java] ImmutableField - false negative with Lombok @<!-- -->Getter</li>
</ul>
</li>
<li>java-errorprone
<ul>
<li><a href="https://github.com/pmd/pmd/issues/4449">#4449</a>: [java] AvoidAccessibilityAlteration: Possible false positive in AvoidAccessibilityAlteration rule when using Lambda expression</li>
<li><a href="https://github.com/pmd/pmd/issues/4493">#4493</a>: [java] MissingStaticMethodInNonInstantiatableClass: false-positive about @<!-- -->Inject</li>
<li><a href="https://github.com/pmd/pmd/issues/4505">#4505</a>: [java] ImplicitSwitchFallThrough NPE in PMD 7.0.0-rc1</li>
</ul>
</li>
<li>java-multithreading
<ul>
<li><a href="https://github.com/pmd/pmd/issues/4483">#4483</a>: [java] NonThreadSafeSingleton false positive with double-checked locking</li>
</ul>
</li>
<li>miscellaneous
<ul>
<li><a href="https://github.com/pmd/pmd/issues/4462">#4462</a>: Provide Software Bill of Materials (SBOM)</li>
</ul>
</li>
</ul>
<h4 id="external-contributions">External contributions</h4>
<ul>
<li><a href="https://github.com/pmd/pmd/pull/4444">#4444</a>: [java] CommentDefaultAccessModifier - ignore org.junit.jupiter.api.extension.RegisterExtension by default - <a href="https://github.com/nirvikpatel">Nirvik Patel</a> (@nirvikpatel)</li>
<li><a href="https://github.com/pmd/pmd/pull/4450">#4450</a>: [java] Fix #4449 AvoidAccessibilityAlteration: Correctly handle Lambda expressions in PrivilegedAction scenarios - <a href="https://github.com/mohui1999">Seren</a> (@mohui1999)</li>
<li><a href="https://github.com/pmd/pmd/pull/4452">#4452</a>: [doc] Update PMD_APEX_ROOT_DIRECTORY documentation reference - <a href="https://github.com/nwcm">nwcm</a> (@nwcm)</li>
<li><a href="https://github.com/pmd/pmd/pull/4474">#4474</a>: [java] ImmutableField: False positive with lombok (fixes #4254) - <a href="https://github.com/PimvanderLoos">Pim van der Loos</a> (@PimvanderLoos)</li>
<li><a href="https://github.com/pmd/pmd/pull/4488">#4488</a>: [java] Fix #4477: A false-positive about SignatureDeclareThrowsException - <a href="https://github.com/LynnBroe">AnnaDev</a> (@LynnBroe)</li>
<li><a href="https://github.com/pmd/pmd/pull/4494">#4494</a>: [java] Fix #4487: A false-positive about UnnecessaryConstructor and @<!-- -->Inject and @<!-- -->Autowired - <a href="https://github.com/LynnBroe">AnnaDev</a> (@LynnBroe)</li>
<li><a href="https://github.com/pmd/pmd/pull/4495">#4495</a>: [java] Fix #4493: false-positive about MissingStaticMethodInNonInstantiatableClass and @<!-- -->Inject - <a href="https://github.com/LynnBroe">AnnaDev</a> (@LynnBroe)</li>
<li><a href="https://github.com/pmd/pmd/pull/4520">#4520</a>: [doc] Fix typo: missing closing quotation mark after CPD-END - <a href="https://github.com/joaodinissf">João Dinis Ferreira</a> (@joaodinissf)</li>
</ul>
<h3 id="-major-features-and-enhancements">🚀 Major Features and Enhancements</h3>
<h4 id="new-official-logo">New official logo</h4>
<p>The new official logo of PMD:</p>
<p><img src="images/logo/pmd-logo-300px.png" alt="New PMD Logo" /></p>
<h4 id="revamped-java-module">Revamped Java module</h4>
<ul>
<li>Java grammar substantially refactored - more correct regarding the Java Language Specification (JLS)</li>
<li>Built-in rules have been upgraded for the changed AST</li>
<li>Rewritten type resolution framework and symbol table correctly implements the JLS</li>
<li>AST exposes more semantic information (method calls, field accesses)</li>
</ul>
<p>For more information, see the <a href="pmd_release_notes_pmd7.html">Detailed Release Notes for PMD 7</a>.</p>
<p>Contributors: <a href="https://github.com/oowekyala">Clément Fournier</a> (@oowekyala),
<a href="https://github.com/adangel">Andreas Dangel</a> (@adangel),
<a href="https://github.com/jsotuyod">Juan Martín Sotuyo Dodero</a> (@jsotuyod)</p>
<h4 id="revamped-command-line-interface">Revamped Command Line Interface</h4>
<ul>
<li>unified and consistent Command Line Interface for both Linux/Unix and Windows across our different utilities</li>
<li>single script <code class="language-plaintext highlighter-rouge">pmd</code> (<code class="language-plaintext highlighter-rouge">pmd.bat</code> for Windows) to launch the different utilities:
<ul>
<li><code class="language-plaintext highlighter-rouge">pmd check</code> to run PMD rules and analyze a project</li>
<li><code class="language-plaintext highlighter-rouge">pmd cpd</code> to run CPD (copy paste detector)</li>
<li><code class="language-plaintext highlighter-rouge">pmd designer</code> to run the PMD Rule Designer</li>
</ul>
</li>
<li>progress bar support for <code class="language-plaintext highlighter-rouge">pmd check</code></li>
<li>shell completion</li>
</ul>
<p><img src="images/userdocs/pmd-demo.gif" alt="Demo" /></p>
<p>For more information, see the <a href="pmd_release_notes_pmd7.html">Detailed Release Notes for PMD 7</a>.</p>
<p>Contributors: <a href="https://github.com/jsotuyod">Juan Martín Sotuyo Dodero</a> (@jsotuyod)</p>
<h4 id="full-antlr-support">Full Antlr support</h4>
<ul>
<li><a href="https://www.antlr.org/">Antlr</a> based grammars can now be used to build full-fledged PMD rules.</li>
<li>Previously, Antlr grammar could only be used for CPD</li>
<li>New supported languages: Swift and Kotlin</li>
</ul>
<p>For more information, see the <a href="pmd_release_notes_pmd7.html">Detailed Release Notes for PMD 7</a>.</p>
<p>Contributors: <a href="https://github.com/lsoncini">Lucas Soncini</a> (@lsoncini),
<a href="https://github.com/matifraga">Matías Fraga</a> (@matifraga),
<a href="https://github.com/tomidelucca">Tomás De Lucca</a> (@tomidelucca)</p>
<h4 id="updated-pmd-designer-1">Updated PMD Designer</h4>
<p>This PMD release ships a new version of the pmd-designer.
For the changes, see <a href="https://github.com/pmd/pmd-designer/releases/tag/7.0.0-rc1">PMD Designer Changelog</a>.</p>
<h3 id="-language-related-changes">🎉 Language Related Changes</h3>
<p>Note that this is just a concise listing of the highlight.
For more information on the languages, see the <a href="pmd_release_notes_pmd7.html">Detailed Release Notes for PMD 7</a>.</p>
<h4 id="new-swift-support">New: Swift support</h4>
<ul>
<li>use PMD to analyze Swift code with PMD rules</li>
<li>initially 4 built-in rules</li>
</ul>
<p>Contributors: <a href="https://github.com/lsoncini">Lucas Soncini</a> (@lsoncini),
<a href="https://github.com/matifraga">Matías Fraga</a> (@matifraga),
<a href="https://github.com/tomidelucca">Tomás De Lucca</a> (@tomidelucca)</p>
<h4 id="new-kotlin-support-experimental">New: Kotlin support (experimental)</h4>
<ul>
<li>use PMD to analyze Kotlin code with PMD rules</li>
<li>Support for Kotlin 1.8 grammar</li>
<li>initially 2 built-in rules</li>
</ul>
<h4 id="new-typescript-support">New: TypeScript support</h4>
<p>Thanks to a contribution, CPD now supports the TypeScript language. It is shipped
with the rest of the JavaScript support in the module <code class="language-plaintext highlighter-rouge">pmd-javascript</code>.</p>
<p>Contributors: <a href="https://github.com/pguyot">Paul Guyot</a> (@pguyot)</p>
<h4 id="changed-javascript-support">Changed: JavaScript support</h4>
<ul>
<li>latest version supports ES6 and also some new constructs (see <a href="https://github.com/mozilla/rhino">Rhino</a>])</li>
<li>comments are retained</li>
</ul>
<h4 id="changed-language-versions">Changed: Language versions</h4>
<ul>
<li>more predefined language versions for each supported language</li>
<li>can be used to limit rule execution for specific versions only with <code class="language-plaintext highlighter-rouge">minimumLanguageVersion</code> and
<code class="language-plaintext highlighter-rouge">maximumLanguageVersion</code> attributes.</li>
</ul>
<h3 id="-new-and-changed-rules">🌟 New and changed rules</h3>
<h4 id="new-rules">New Rules</h4>
<p><strong>Apex</strong></p>
<ul>
<li><a href="pmd_rules_apex_design.html#unusedmethod"><code class="language-plaintext highlighter-rouge">UnusedMethod</code></a> finds unused methods in your code.</li>
</ul>
<p><strong>Java</strong></p>
<ul>
<li><a href="pmd_rules_java_codestyle.html#unnecessaryboxing"><code class="language-plaintext highlighter-rouge">UnnecessaryBoxing</code></a> reports boxing and unboxing conversions that may be made implicit.</li>
</ul>
<p><strong>Kotlin</strong></p>
<ul>
<li><a href="pmd_rules_kotlin_bestpractices.html#functionnametooshort"><code class="language-plaintext highlighter-rouge">FunctionNameTooShort</code></a></li>
<li><a href="pmd_rules_kotlin_errorprone.html#overridebothequalsandhashcode"><code class="language-plaintext highlighter-rouge">OverrideBothEqualsAndHashcode</code></a></li>
</ul>
<p><strong>Swift</strong></p>
<ul>
<li><a href="pmd_rules_swift_bestpractices.html#prohibitedinterfacebuilder"><code class="language-plaintext highlighter-rouge">ProhibitedInterfaceBuilder</code></a></li>
<li><a href="pmd_rules_swift_bestpractices.html#unavailablefunction"><code class="language-plaintext highlighter-rouge">UnavailableFunction</code></a></li>
<li><a href="pmd_rules_swift_errorprone.html#forcecast"><code class="language-plaintext highlighter-rouge">ForceCast</code></a></li>
<li><a href="pmd_rules_swift_errorprone.html#forcetry"><code class="language-plaintext highlighter-rouge">ForceTry</code></a></li>
</ul>
<h4 id="changed-rules">Changed Rules</h4>
<p><strong>Java</strong></p>
<ul>
<li><a href="pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname"><code class="language-plaintext highlighter-rouge">UnnecessaryFullyQualifiedName</code></a>: 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.</li>
<li><a href="pmd_rules_java_codestyle.html#uselessparentheses"><code class="language-plaintext highlighter-rouge">UselessParentheses</code></a>: the rule has two new properties which control how strict
the rule should be applied. With <code class="language-plaintext highlighter-rouge">ignoreClarifying</code> (default: true) parentheses that are strictly speaking
not necessary are allowed, if they separate expressions of different precedence.
The other property <code class="language-plaintext highlighter-rouge">ignoreBalancing</code> (default: true) is similar, in that it allows parentheses that help
reading and understanding the expressions.</li>
<li><a href="pmd_rules_java_bestpractices.html#loosecoupling"><code class="language-plaintext highlighter-rouge">LooseCoupling</code></a>: the rule has a new property to allow some types to be coupled
to (<code class="language-plaintext highlighter-rouge">allowedTypes</code>).</li>
<li><a href="pmd_rules_java_errorprone.html#emptycatchblock"><code class="language-plaintext highlighter-rouge">EmptyCatchBlock</code></a>: <code class="language-plaintext highlighter-rouge">CloneNotSupportedException</code> and <code class="language-plaintext highlighter-rouge">InterruptedException</code> are not
special-cased anymore. Rename the exception parameter to <code class="language-plaintext highlighter-rouge">ignored</code> to ignore them.</li>
<li><a href="pmd_rules_java_errorprone.html#dontimportsun"><code class="language-plaintext highlighter-rouge">DontImportSun</code></a>: <code class="language-plaintext highlighter-rouge">sun.misc.Signal</code> is not special-cased anymore.</li>
<li><a href="pmd_rules_java_codestyle.html#usediamondoperator"><code class="language-plaintext highlighter-rouge">UseDiamondOperator</code></a>: the property <code class="language-plaintext highlighter-rouge">java7Compatibility</code> is removed. The rule now
handles Java 7 properly without a property.</li>
<li><a href="pmd_rules_java_design.html#singularfield"><code class="language-plaintext highlighter-rouge">SingularField</code></a>: Properties <code class="language-plaintext highlighter-rouge">checkInnerClasses</code> and <code class="language-plaintext highlighter-rouge">disallowNotAssignment</code> are removed.
The rule is now more precise and will check these cases properly.</li>
<li><a href="pmd_rules_java_design.html#useutilityclass"><code class="language-plaintext highlighter-rouge">UseUtilityClass</code></a>: The property <code class="language-plaintext highlighter-rouge">ignoredAnnotations</code> has been removed.</li>
<li><a href="pmd_rules_java_design.html#lawofdemeter"><code class="language-plaintext highlighter-rouge">LawOfDemeter</code></a>: the rule has a new property <code class="language-plaintext highlighter-rouge">trustRadius</code>. This defines the maximum degree
of trusted data. The default of 1 is the most restrictive.</li>
<li><a href="pmd_rules_java_documentation.html#commentcontent"><code class="language-plaintext highlighter-rouge">CommentContent</code></a>: The properties <code class="language-plaintext highlighter-rouge">caseSensitive</code> and <code class="language-plaintext highlighter-rouge">disallowedTerms</code> are removed. The
new property <code class="language-plaintext highlighter-rouge">fobiddenRegex</code> can be used now to define the disallowed terms with a single regular
expression.</li>
<li><a href="pmd_rules_java_design.html#immutablefield"><code class="language-plaintext highlighter-rouge">ImmutableField</code></a>: the property <code class="language-plaintext highlighter-rouge">ignoredAnnotations</code> has been removed. The property was
deprecated since PMD 6.52.0.</li>
</ul>
<h4 id="removed-rules">Removed Rules</h4>
<p>Many rules, that were previously deprecated have been finally removed.
See <a href="pmd_release_notes_pmd7.html">Detailed Release Notes for PMD 7</a> for the complete list.</p>
<h3 id="-api">🚨 API</h3>
<p>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.</p>
<p>Also, there are some improvement and changes in different areas. For the detailed description
of the changes listed here, see <a href="pmd_release_notes_pmd7.html">Detailed Release Notes for PMD 7</a>.</p>
<ul>
<li>Miscellaneous smaller changes and cleanups</li>
<li>XPath 3.1 support for XPath-based rules</li>
<li>Node stream API for AST traversal</li>
<li>Metrics framework</li>
<li>Testing framework</li>
<li>Language Lifecycle and Language Properties</li>
</ul>
<h3 id="-compatibility-and-migration-notes">💥 Compatibility and migration notes</h3>
<p>See <a href="pmd_release_notes_pmd7.html">Detailed Release Notes for PMD 7</a>.</p>
<h3 id="-fixed-issues">🐛 Fixed Issues</h3>
<ul>
<li>miscellaneous
<ul>
<li><a href="https://github.com/pmd/pmd/issues/881">#881</a>: [all] Breaking API changes for 7.0.0</li>
<li><a href="https://github.com/pmd/pmd/issues/896">#896</a>: [all] Use slf4j</li>
<li><a href="https://github.com/pmd/pmd/pull/1431">#1431</a>: [ui] Remove old GUI applications (designerold, bgastviewer)</li>
<li><a href="https://github.com/pmd/pmd/issues/1451">#1451</a>: [core] RulesetFactoryCompatibility stores the whole ruleset file in memory as a string</li>
<li><a href="https://github.com/pmd/pmd/issues/2496">#2496</a>: Update PMD 7 Logo on landing page</li>
<li><a href="https://github.com/pmd/pmd/issues/2497">#2497</a>: PMD 7 Logo page</li>
<li><a href="https://github.com/pmd/pmd/issues/2498">#2498</a>: Update PMD 7 Logo in documentation</li>
<li><a href="https://github.com/pmd/pmd/issues/3797">#3797</a>: [all] Use JUnit5</li>
<li><a href="https://github.com/pmd/pmd/issues/4462">#4462</a>: Provide Software Bill of Materials (SBOM)</li>
</ul>
</li>
<li>ant
<ul>
<li><a href="https://github.com/pmd/pmd/issues/4080">#4080</a>: [ant] Split off Ant integration into a new submodule</li>
</ul>
</li>
<li>core
<ul>
<li><a href="https://github.com/pmd/pmd/issues/880">#880</a>: [core] Make visitors generic</li>
<li><a href="https://github.com/pmd/pmd/pull/1622">#1622</a>: [core] NodeStream API</li>
<li><a href="https://github.com/pmd/pmd/issues/1687">#1687</a>: [core] Deprecate and Remove XPath 1.0 support</li>
<li><a href="https://github.com/pmd/pmd/issues/1785">#1785</a>: [core] Allow abstract node types to be valid rulechain visits</li>
<li><a href="https://github.com/pmd/pmd/pull/1825">#1825</a>: [core] Support NoAttribute for XPath</li>
<li><a href="https://github.com/pmd/pmd/issues/2038">#2038</a>: [core] Remove DCD</li>
<li><a href="https://github.com/pmd/pmd/issues/2218">#2218</a>: [core] <code class="language-plaintext highlighter-rouge">isFindBoundary</code> should not be an attribute</li>
<li><a href="https://github.com/pmd/pmd/issues/2234">#2234</a>: [core] Consolidate PMD CLI into a single command</li>
<li><a href="https://github.com/pmd/pmd/issues/2239">#2239</a>: [core] Merging Javacc build scripts</li>
<li><a href="https://github.com/pmd/pmd/issues/2500">#2500</a>: [core] Clarify API for ANTLR based languages</li>
<li><a href="https://github.com/pmd/pmd/issues/2518">#2518</a>: [core] Language properties</li>
<li><a href="https://github.com/pmd/pmd/issues/2602">#2602</a>: [core] Remove ParserOptions</li>
<li><a href="https://github.com/pmd/pmd/pull/2614">#2614</a>: [core] Upgrade Saxon, add XPath 3.1, remove Jaxen</li>
<li><a href="https://github.com/pmd/pmd/pull/2696">#2696</a>: [core] Remove DFA</li>
<li><a href="https://github.com/pmd/pmd/issues/2821">#2821</a>: [core] Rule processing error filenames are missing paths</li>
<li><a href="https://github.com/pmd/pmd/issues/2873">#2873</a>: [core] Utility classes in pmd 7</li>
<li><a href="https://github.com/pmd/pmd/issues/2885">#2885</a>: [core] Error recovery mode</li>
<li><a href="https://github.com/pmd/pmd/issues/3203">#3203</a>: [core] Replace RuleViolationFactory implementations with ViolationDecorator</li>
<li><a href="https://github.com/pmd/pmd/pull/3692">#3692</a>: [core] Analysis listeners</li>
<li><a href="https://github.com/pmd/pmd/issues/3782">#3782</a>: [core] Language lifecycle</li>
<li><a href="https://github.com/pmd/pmd/issues/3815">#3815</a>: [core] Update Saxon HE to 10.7</li>
<li><a href="https://github.com/pmd/pmd/pull/3893">#3893</a>: [core] Text documents</li>
<li><a href="https://github.com/pmd/pmd/issues/3902">#3902</a>: [core] Violation decorators</li>
<li><a href="https://github.com/pmd/pmd/issues/3918">#3918</a>: [core] Make LanguageRegistry non static</li>
<li><a href="https://github.com/pmd/pmd/pull/3922">#3922</a>: [core] Better error reporting for the ruleset parser</li>
<li><a href="https://github.com/pmd/pmd/issues/4035">#4035</a>: [core] ConcurrentModificationException in DefaultRuleViolationFactory</li>
<li><a href="https://github.com/pmd/pmd/issues/4120">#4120</a>: [core] Explicitly name all language versions</li>
<li><a href="https://github.com/pmd/pmd/pull/4353">#4353</a>: [core] Micro optimizations for Node API</li>
<li><a href="https://github.com/pmd/pmd/pull/4365">#4365</a>: [core] Improve benchmarking</li>
<li><a href="https://github.com/pmd/pmd/pull/4420">#4420</a>: [core] Remove PMD.EOL</li>
</ul>
</li>
<li>cli
<ul>
<li><a href="https://github.com/pmd/pmd/issues/2234">#2234</a>: [core] Consolidate PMD CLI into a single command</li>
<li><a href="https://github.com/pmd/pmd/issues/3828">#3828</a>: [core] Progress reporting</li>
<li><a href="https://github.com/pmd/pmd/issues/4079">#4079</a>: [cli] Split off CLI implementation into a pmd-cli submodule</li>
<li><a href="https://github.com/pmd/pmd/issues/4482">#4482</a>: [cli] pmd.bat can only be executed once</li>
<li><a href="https://github.com/pmd/pmd/issues/4484">#4484</a>: [cli] ast-dump with no properties produce an NPE</li>
</ul>
</li>
<li>doc
<ul>
<li><a href="https://github.com/pmd/pmd/issues/2501">#2501</a>: [doc] Verify ANTLR Documentation</li>
<li><a href="https://github.com/pmd/pmd/issues/4438">#4438</a>: [doc] Documentation links in VS Code are outdated</li>
</ul>
</li>
<li>testing
<ul>
<li><a href="https://github.com/pmd/pmd/issues/2435">#2435</a>: [test] Remove duplicated Dummy language module</li>
<li><a href="https://github.com/pmd/pmd/issues/4234">#4234</a>: [test] Tests that change the logging level do not work</li>
</ul>
</li>
</ul>
<p>Language specific fixes:</p>
<ul>
<li>apex
<ul>
<li><a href="https://github.com/pmd/pmd/issues/1937">#1937</a>: [apex] Apex should only have a single RootNode</li>
<li><a href="https://github.com/pmd/pmd/issues/1648">#1648</a>: [apex,vf] Remove CodeClimate dependency</li>
<li><a href="https://github.com/pmd/pmd/pull/1750">#1750</a>: [apex] Remove apex statistical rules</li>
<li><a href="https://github.com/pmd/pmd/pull/2836">#2836</a>: [apex] Remove Apex ProjectMirror</li>
<li><a href="https://github.com/pmd/pmd/issues/4427">#4427</a>: [apex] ApexBadCrypto test failing to detect inline code</li>
</ul>
</li>
<li>apex-design
<ul>
<li><a href="https://github.com/pmd/pmd/issues/2667">#2667</a>: [apex] Integrate nawforce/ApexLink to build robust Unused rule</li>
</ul>
</li>
<li>java
<ul>
<li><a href="https://github.com/pmd/pmd/issues/520">#520</a>: [java] Allow <code class="language-plaintext highlighter-rouge">@SuppressWarnings</code> with constants instead of literals</li>
<li><a href="https://github.com/pmd/pmd/issues/864">#864</a>: [java] Similar/duplicated implementations for determining FQCN</li>
<li><a href="https://github.com/pmd/pmd/issues/905">#905</a>: [java] Add new node for anonymous class declaration</li>
<li><a href="https://github.com/pmd/pmd/issues/910">#910</a>: [java] AST inconsistency between primitive and reference type arrays</li>
<li><a href="https://github.com/pmd/pmd/issues/997">#997</a>: [java] Java8 parsing corner case with annotated array types</li>
<li><a href="https://github.com/pmd/pmd/issues/998">#998</a>: [java] AST inconsistencies around FormalParameter</li>
<li><a href="https://github.com/pmd/pmd/issues/1019">#1019</a>: [java] Breaking Java Grammar changes for PMD 7.0.0</li>
<li><a href="https://github.com/pmd/pmd/issues/1124">#1124</a>: [java] ImmutableList implementation in the qname codebase</li>
<li><a href="https://github.com/pmd/pmd/issues/1128">#1128</a>: [java] Improve ASTLocalVariableDeclaration</li>
<li><a href="https://github.com/pmd/pmd/issues/1150">#1150</a>: [java] ClassOrInterfaceType AST improvements</li>
<li><a href="https://github.com/pmd/pmd/issues/1207">#1207</a>: [java] Resolve explicit types using FQCNs, without hitting the classloader</li>
<li><a href="https://github.com/pmd/pmd/issues/1367">#1367</a>: [java] Parsing error on annotated inner class</li>
<li><a href="https://github.com/pmd/pmd/issues/1661">#1661</a>: [java] About operator nodes</li>
<li><a href="https://github.com/pmd/pmd/pull/2366">#2366</a>: [java] Remove qualified names</li>
<li><a href="https://github.com/pmd/pmd/issues/2819">#2819</a>: [java] GLB bugs in pmd 7</li>
<li><a href="https://github.com/pmd/pmd/issues/3642">#3642</a>: [java] Parse error on rare extra dimensions on method return type on annotation methods</li>
<li><a href="https://github.com/pmd/pmd/issues/3763">#3763</a>: [java] Ambiguous reference error in valid code</li>
<li><a href="https://github.com/pmd/pmd/issues/3749">#3749</a>: [java] Improve <code class="language-plaintext highlighter-rouge">isOverridden</code> in ASTMethodDeclaration</li>
<li><a href="https://github.com/pmd/pmd/issues/3750">#3750</a>: [java] Make symbol table support instanceof pattern bindings</li>
<li><a href="https://github.com/pmd/pmd/issues/3752">#3752</a>: [java] Expose annotations in symbol API</li>
<li><a href="https://github.com/pmd/pmd/pull/4237">#4237</a>: [java] Cleanup handling of Java comments</li>
<li><a href="https://github.com/pmd/pmd/issues/4317">#4317</a>: [java] Some AST nodes should not be TypeNodes</li>
<li><a href="https://github.com/pmd/pmd/issues/4359">#4359</a>: [java] Type resolution fails with NPE when the scope is not a type declaration</li>
<li><a href="https://github.com/pmd/pmd/issues/4367">#4367</a>: [java] Move testrule TypeResTest into internal</li>
</ul>
</li>
<li>java-bestpractices
<ul>
<li><a href="https://github.com/pmd/pmd/issues/342">#342</a>: [java] AccessorMethodGeneration: Name clash with another public field not properly handled</li>
<li><a href="https://github.com/pmd/pmd/issues/755">#755</a>: [java] AccessorClassGeneration false positive for private constructors</li>
<li><a href="https://github.com/pmd/pmd/issues/770">#770</a>: [java] UnusedPrivateMethod yields false positive for counter-variant arguments</li>
<li><a href="https://github.com/pmd/pmd/issues/807">#807</a>: [java] AccessorMethodGeneration false positive with overloads</li>
<li><a href="https://github.com/pmd/pmd/issues/833">#833</a>: [java] ForLoopCanBeForeach should consider iterating on this</li>
<li><a href="https://github.com/pmd/pmd/issues/1189">#1189</a>: [java] UnusedPrivateMethod false positive from inner class via external class</li>
<li><a href="https://github.com/pmd/pmd/issues/1205">#1205</a>: [java] Improve ConstantsInInterface message to mention alternatives</li>
<li><a href="https://github.com/pmd/pmd/issues/1212">#1212</a>: [java] Dont raise JUnitTestContainsTooManyAsserts on JUnit 5s assertAll</li>
<li><a href="https://github.com/pmd/pmd/issues/1422">#1422</a>: [java] JUnitTestsShouldIncludeAssert false positive with inherited @<!-- -->Rule field</li>
<li><a href="https://github.com/pmd/pmd/issues/1455">#1455</a>: [java] JUnitTestsShouldIncludeAssert: False positives for assert methods named “check” and “verify”</li>
<li><a href="https://github.com/pmd/pmd/issues/1563">#1563</a>: [java] False positive ForLoopCanBeForeach</li>
<li><a href="https://github.com/pmd/pmd/issues/1565">#1565</a>: [java] JUnitAssertionsShouldIncludeMessage false positive with AssertJ</li>
<li><a href="https://github.com/pmd/pmd/issues/1747">#1747</a>: [java] PreserveStackTrace false-positive</li>
<li><a href="https://github.com/pmd/pmd/issues/1969">#1969</a>: [java] MissingOverride false-positive triggered by package-private method overwritten in another package by extending class</li>
<li><a href="https://github.com/pmd/pmd/issues/1998">#1998</a>: [java] AccessorClassGeneration false-negative: subclass calls private constructor</li>
<li><a href="https://github.com/pmd/pmd/issues/2130">#2130</a>: [java] UnusedLocalVariable: false-negative with array</li>
<li><a href="https://github.com/pmd/pmd/issues/2147">#2147</a>: [java] JUnitTestsShouldIncludeAssert - false positives with lambdas and static methods</li>
<li><a href="https://github.com/pmd/pmd/issues/2464">#2464</a>: [java] LooseCoupling must ignore class literals: ArrayList.class</li>
<li><a href="https://github.com/pmd/pmd/issues/2542">#2542</a>: [java] UseCollectionIsEmpty can not detect the case <code class="language-plaintext highlighter-rouge">foo.bar().size()</code></li>
<li><a href="https://github.com/pmd/pmd/issues/2650">#2650</a>: [java] UseTryWithResources false positive when AutoCloseable helper used</li>
<li><a href="https://github.com/pmd/pmd/issues/2796">#2796</a>: [java] UnusedAssignment false positive with call chains</li>
<li><a href="https://github.com/pmd/pmd/issues/2797">#2797</a>: [java] MissingOverride long-standing issues</li>
<li><a href="https://github.com/pmd/pmd/issues/2806">#2806</a>: [java] SwitchStmtsShouldHaveDefault false-positive with Java 14 switch non-fallthrough branches</li>
<li><a href="https://github.com/pmd/pmd/issues/2822">#2822</a>: [java] LooseCoupling rule: Extend to cover user defined implementations and interfaces</li>
<li><a href="https://github.com/pmd/pmd/pull/2843">#2843</a>: [java] Fix UnusedAssignment FP with field accesses</li>
<li><a href="https://github.com/pmd/pmd/issues/2882">#2882</a>: [java] UseTryWithResources - false negative for explicit close</li>
<li><a href="https://github.com/pmd/pmd/issues/2883">#2883</a>: [java] JUnitAssertionsShouldIncludeMessage false positive with method call</li>
<li><a href="https://github.com/pmd/pmd/issues/2890">#2890</a>: [java] UnusedPrivateMethod false positive with generics</li>
<li><a href="https://github.com/pmd/pmd/issues/2946">#2946</a>: [java] SwitchStmtsShouldHaveDefault false positive on enum inside enums</li>
<li><a href="https://github.com/pmd/pmd/pull/3672">#3672</a>: [java] LooseCoupling - fix false positive with generics</li>
<li><a href="https://github.com/pmd/pmd/pull/3675">#3675</a>: [java] MissingOverride - fix false positive with mixing type vars</li>
<li><a href="https://github.com/pmd/pmd/issues/3858">#3858</a>: [java] UseCollectionIsEmpty should infer local variable type from method invocation</li>
</ul>
</li>
<li>java-codestyle
<ul>
<li><a href="https://github.com/pmd/pmd/issues/1208">#1208</a>: [java] PrematureDeclaration rule false-positive on variable declared to measure time</li>
<li><a href="https://github.com/pmd/pmd/issues/1429">#1429</a>: [java] PrematureDeclaration as result of method call (false positive)</li>
<li><a href="https://github.com/pmd/pmd/issues/1480">#1480</a>: [java] IdenticalCatchBranches false positive</li>
<li><a href="https://github.com/pmd/pmd/issues/1673">#1673</a>: [java] UselessParentheses false positive with conditional operator</li>
<li><a href="https://github.com/pmd/pmd/issues/1790">#1790</a>: [java] UnnecessaryFullyQualifiedName false positive with enum constant</li>
<li><a href="https://github.com/pmd/pmd/issues/1918">#1918</a>: [java] UselessParentheses false positive with boolean operators</li>
<li><a href="https://github.com/pmd/pmd/issues/2134">#2134</a>: [java] PreserveStackTrace not handling <code class="language-plaintext highlighter-rouge">Throwable.addSuppressed(...)</code></li>
<li><a href="https://github.com/pmd/pmd/issues/2299">#2299</a>: [java] UnnecessaryFullyQualifiedName false positive with similar package name</li>
<li><a href="https://github.com/pmd/pmd/issues/2391">#2391</a>: [java] UseDiamondOperator FP when expected type and constructed type have a different parameterization</li>
<li><a href="https://github.com/pmd/pmd/issues/2528">#2528</a>: [java] MethodNamingConventions - JUnit 5 method naming not support ParameterizedTest</li>
<li><a href="https://github.com/pmd/pmd/issues/2739">#2739</a>: [java] UselessParentheses false positive for string concatenation</li>
<li><a href="https://github.com/pmd/pmd/issues/2748">#2748</a>: [java] UnnecessaryCast false positive with unchecked cast</li>
<li><a href="https://github.com/pmd/pmd/issues/2973">#2973</a>: [java] New rule: UnnecessaryBoxing</li>
<li><a href="https://github.com/pmd/pmd/pull/3195">#3195</a>: [java] Improve rule UnnecessaryReturn to detect more cases</li>
<li><a href="https://github.com/pmd/pmd/pull/3218">#3218</a>: [java] Generalize UnnecessaryCast to flag all unnecessary casts</li>
<li><a href="https://github.com/pmd/pmd/issues/3221">#3221</a>: [java] PrematureDeclaration false positive for unused variables</li>
<li><a href="https://github.com/pmd/pmd/issues/3238">#3238</a>: [java] Improve ExprContext, fix FNs of UnnecessaryCast</li>
<li><a href="https://github.com/pmd/pmd/pull/3500">#3500</a>: [java] UnnecessaryBoxing - check for Integer.valueOf(String) calls</li>
<li><a href="https://github.com/pmd/pmd/issues/4273">#4273</a>: [java] CommentDefaultAccessModifier ignoredAnnotations should include “org.junit.jupiter.api.extension.RegisterExtension” by default</li>
<li><a href="https://github.com/pmd/pmd/pull/4357">#4357</a>: [java] Fix IllegalStateException in UseDiamondOperator rule</li>
<li><a href="https://github.com/pmd/pmd/issues/4487">#4487</a>: [java] UnnecessaryConstructor: false-positive with @<!-- -->Inject and @<!-- -->Autowired</li>
</ul>
</li>
<li>java-design
<ul>
<li><a href="https://github.com/pmd/pmd/issues/1014">#1014</a>: [java] LawOfDemeter: False positive with lambda expression</li>
<li><a href="https://github.com/pmd/pmd/issues/1605">#1605</a>: [java] LawOfDemeter: False positive for standard UTF-8 charset name</li>
<li><a href="https://github.com/pmd/pmd/issues/2160">#2160</a>: [java] Issues with Law of Demeter</li>
<li><a href="https://github.com/pmd/pmd/issues/2175">#2175</a>: [java] LawOfDemeter: False positive for chained methods with generic method call</li>
<li><a href="https://github.com/pmd/pmd/issues/2179">#2179</a>: [java] LawOfDemeter: False positive with static property access - should treat class-level property as global object, not dot-accessed property</li>
<li><a href="https://github.com/pmd/pmd/issues/2180">#2180</a>: [java] LawOfDemeter: False positive with Thread and ThreadLocalRandom</li>
<li><a href="https://github.com/pmd/pmd/issues/2182">#2182</a>: [java] LawOfDemeter: False positive with package-private access</li>
<li><a href="https://github.com/pmd/pmd/issues/2188">#2188</a>: [java] LawOfDemeter: False positive with fields assigned to local vars</li>
<li><a href="https://github.com/pmd/pmd/issues/2536">#2536</a>: [java] ClassWithOnlyPrivateConstructorsShouldBeFinal cant detect inner class</li>
<li><a href="https://github.com/pmd/pmd/pull/3668">#3668</a>: [java] ClassWithOnlyPrivateConstructorsShouldBeFinal - fix FP with inner private classes</li>
<li><a href="https://github.com/pmd/pmd/issues/3754">#3754</a>: [java] SingularField false positive with read in while condition</li>
<li><a href="https://github.com/pmd/pmd/issues/3786">#3786</a>: [java] SimplifyBooleanReturns should consider operator precedence</li>
<li><a href="https://github.com/pmd/pmd/pull/4238">#4238</a>: [java] Make LawOfDemeter not use the rulechain</li>
<li><a href="https://github.com/pmd/pmd/issues/4254">#4254</a>: [java] ImmutableField - false positive with Lombok @<!-- -->Setter</li>
<li><a href="https://github.com/pmd/pmd/issues/4477">#4477</a>: [java] SignatureDeclareThrowsException: false-positive with TestNG annotations</li>
<li><a href="https://github.com/pmd/pmd/issues/4490">#4490</a>: [java] ImmutableField - false negative with Lombok @<!-- -->Getter</li>
</ul>
</li>
<li>java-documentation
<ul>
<li><a href="https://github.com/pmd/pmd/pull/4369">#4369</a>: [java] Improve CommentSize</li>
<li><a href="https://github.com/pmd/pmd/pull/4416">#4416</a>: [java] Fix reported line number in CommentContentRule</li>
</ul>
</li>
<li>java-errorprone
<ul>
<li><a href="https://github.com/pmd/pmd/issues/659">#659</a>: [java] MissingBreakInSwitch - last default case does not contain a break</li>
<li><a href="https://github.com/pmd/pmd/issues/1005">#1005</a>: [java] CloneMethodMustImplementCloneable triggers for interfaces</li>
<li><a href="https://github.com/pmd/pmd/issues/1669">#1669</a>: [java] NullAssignment - FP with ternay and null as constructor argument</li>
<li><a href="https://github.com/pmd/pmd/issues/1899">#1899</a>: [java] Recognize @<!-- -->SuppressWanings(“fallthrough”) for MissingBreakInSwitch</li>
<li><a href="https://github.com/pmd/pmd/issues/2320">#2320</a>: [java] NullAssignment - FP with ternary and null as method argument</li>
<li><a href="https://github.com/pmd/pmd/issues/2532">#2532</a>: [java] AvoidDecimalLiteralsInBigDecimalConstructor can not detect the case <code class="language-plaintext highlighter-rouge">new BigDecimal(Expression)</code></li>
<li><a href="https://github.com/pmd/pmd/issues/2579">#2579</a>: [java] MissingBreakInSwitch detects the lack of break in the last case</li>
<li><a href="https://github.com/pmd/pmd/issues/2880">#2880</a>: [java] CompareObjectsWithEquals - false negative with type res</li>
<li><a href="https://github.com/pmd/pmd/issues/2893">#2893</a>: [java] Remove special cases from rule EmptyCatchBlock</li>
<li><a href="https://github.com/pmd/pmd/issues/2894">#2894</a>: [java] Improve MissingBreakInSwitch</li>
<li><a href="https://github.com/pmd/pmd/issues/3071">#3071</a>: [java] BrokenNullCheck FP with PMD 6.30.0</li>
<li><a href="https://github.com/pmd/pmd/issues/3087">#3087</a>: [java] UnnecessaryBooleanAssertion overlaps with SimplifiableTestAssertion</li>
<li><a href="https://github.com/pmd/pmd/issues/3100">#3100</a>: [java] UseCorrectExceptionLogging FP in 6.31.0</li>
<li><a href="https://github.com/pmd/pmd/issues/3173">#3173</a>: [java] UseProperClassLoader false positive</li>
<li><a href="https://github.com/pmd/pmd/issues/3351">#3351</a>: [java] ConstructorCallsOverridableMethod ignores abstract methods</li>
<li><a href="https://github.com/pmd/pmd/issues/3400">#3400</a>: [java] AvoidUsingOctalValues FN with underscores</li>
<li><a href="https://github.com/pmd/pmd/issues/3843">#3843</a>: [java] UseEqualsToCompareStrings should consider return type</li>
<li><a href="https://github.com/pmd/pmd/pull/4356">#4356</a>: [java] Fix NPE in CloseResourceRule</li>
<li><a href="https://github.com/pmd/pmd/issues/4449">#4449</a>: [java] AvoidAccessibilityAlteration: Possible false positive in AvoidAccessibilityAlteration rule when using Lambda expression</li>
<li><a href="https://github.com/pmd/pmd/issues/4493">#4493</a>: [java] MissingStaticMethodInNonInstantiatableClass: false-positive about @<!-- -->Inject</li>
<li><a href="https://github.com/pmd/pmd/issues/4505">#4505</a>: [java] ImplicitSwitchFallThrough NPE in PMD 7.0.0-rc1</li>
</ul>
</li>
<li>java-multithreading
<ul>
<li><a href="https://github.com/pmd/pmd/issues/2537">#2537</a>: [java] DontCallThreadRun cant detect the case that call run() in <code class="language-plaintext highlighter-rouge">this.run()</code></li>
<li><a href="https://github.com/pmd/pmd/issues/2538">#2538</a>: [java] DontCallThreadRun cant detect the case that call run() in <code class="language-plaintext highlighter-rouge">foo.bar.run()</code></li>
<li><a href="https://github.com/pmd/pmd/issues/2577">#2577</a>: [java] UseNotifyAllInsteadOfNotify falsely detect a special case with argument: <code class="language-plaintext highlighter-rouge">foo.notify(bar)</code></li>
<li><a href="https://github.com/pmd/pmd/issues/4483">#4483</a>: [java] NonThreadSafeSingleton false positive with double-checked locking</li>
</ul>
</li>
<li>java-performance
<ul>
<li><a href="https://github.com/pmd/pmd/issues/1224">#1224</a>: [java] InefficientEmptyStringCheck false negative in anonymous class</li>
<li><a href="https://github.com/pmd/pmd/issues/2587">#2587</a>: [java] AvoidArrayLoops could also check for list copy through iterated List.add()</li>
<li><a href="https://github.com/pmd/pmd/issues/2712">#2712</a>: [java] SimplifyStartsWith false-positive with AssertJ</li>
<li><a href="https://github.com/pmd/pmd/pull/3486">#3486</a>: [java] InsufficientStringBufferDeclaration: Fix NPE</li>
<li><a href="https://github.com/pmd/pmd/issues/3848">#3848</a>: [java] StringInstantiation: false negative when using method result</li>
</ul>
</li>
<li>kotlin
<ul>
<li><a href="https://github.com/pmd/pmd/issues/419">#419</a>: [kotlin] Add support for Kotlin</li>
<li><a href="https://github.com/pmd/pmd/pull/4389">#4389</a>: [kotlin] Update grammar to version 1.8</li>
</ul>
</li>
<li>swift
<ul>
<li><a href="https://github.com/pmd/pmd/pull/1877">#1877</a>: [swift] Feature/swift rules</li>
<li><a href="https://github.com/pmd/pmd/pull/1882">#1882</a>: [swift] UnavailableFunction Swift rule</li>
</ul>
</li>
<li>xml
<ul>
<li><a href="https://github.com/pmd/pmd/pull/1800">#1800</a>: [xml] Unimplement org.w3c.dom.Node from the XmlNodeWrapper</li>
</ul>
</li>
</ul>
<h3 id="-external-contributions">✨ External Contributions</h3>
<ul>
<li><a href="https://github.com/pmd/pmd/pull/1658">#1658</a>: [core] Node support for Antlr-based languages - <a href="https://github.com/matifraga">Matías Fraga</a> (@matifraga)</li>
<li><a href="https://github.com/pmd/pmd/pull/1698">#1698</a>: [core] [swift] Antlr Base Parser adapter and Swift Implementation - <a href="https://github.com/lsoncini">Lucas Soncini</a> (@lsoncini)</li>
<li><a href="https://github.com/pmd/pmd/pull/1774">#1774</a>: [core] Antlr visitor rules - <a href="https://github.com/lsoncini">Lucas Soncini</a> (@lsoncini)</li>
<li><a href="https://github.com/pmd/pmd/pull/1877">#1877</a>: [swift] Feature/swift rules - <a href="https://github.com/matifraga">Matías Fraga</a> (@matifraga)</li>
<li><a href="https://github.com/pmd/pmd/pull/1881">#1881</a>: [doc] Add ANTLR documentation - <a href="https://github.com/matifraga">Matías Fraga</a> (@matifraga)</li>
<li><a href="https://github.com/pmd/pmd/pull/1882">#1882</a>: [swift] UnavailableFunction Swift rule - <a href="https://github.com/tomidelucca">Tomás de Lucca</a> (@tomidelucca)</li>
<li><a href="https://github.com/pmd/pmd/pull/2830">#2830</a>: [apex] Apexlink POC - <a href="https://github.com/nawforce">Kevin Jones</a> (@nawforce)</li>
<li><a href="https://github.com/pmd/pmd/pull/3866">#3866</a>: [core] Add CLI Progress Bar - <a href="https://github.com/JerritEic">@JerritEic</a> (@JerritEic)</li>
<li><a href="https://github.com/pmd/pmd/pull/4402">#4402</a>: [javascript] CPD: add support for Typescript using antlr4 grammar - <a href="https://github.com/pguyot">Paul Guyot</a> (@pguyot)</li>
<li><a href="https://github.com/pmd/pmd/pull/4412">#4412</a>: [doc] Added new error msg to ConstantsInInterface - <a href="https://github.com/dague1">David Ljunggren</a> (@dague1)</li>
<li><a href="https://github.com/pmd/pmd/pull/4428">#4428</a>: [apex] ApexBadCrypto bug fix for #4427 - inline detection of hard coded values - <a href="https://github.com/sfdcsteve">Steven Stearns</a> (@sfdcsteve)</li>
<li><a href="https://github.com/pmd/pmd/pull/4444">#4444</a>: [java] CommentDefaultAccessModifier - ignore org.junit.jupiter.api.extension.RegisterExtension by default - <a href="https://github.com/nirvikpatel">Nirvik Patel</a> (@nirvikpatel)</li>
<li><a href="https://github.com/pmd/pmd/pull/4450">#4450</a>: [java] Fix #4449 AvoidAccessibilityAlteration: Correctly handle Lambda expressions in PrivilegedAction scenarios - <a href="https://github.com/mohui1999">Seren</a> (@mohui1999)</li>
<li><a href="https://github.com/pmd/pmd/pull/4452">#4452</a>: [doc] Update PMD_APEX_ROOT_DIRECTORY documentation reference - <a href="https://github.com/nwcm">nwcm</a> (@nwcm)</li>
<li><a href="https://github.com/pmd/pmd/pull/4474">#4474</a>: [java] ImmutableField: False positive with lombok (fixes #4254) - <a href="https://github.com/PimvanderLoos">Pim van der Loos</a> (@PimvanderLoos)</li>
<li><a href="https://github.com/pmd/pmd/pull/4488">#4488</a>: [java] Fix #4477: A false-positive about SignatureDeclareThrowsException - <a href="https://github.com/LynnBroe">AnnaDev</a> (@LynnBroe)</li>
<li><a href="https://github.com/pmd/pmd/pull/4494">#4494</a>: [java] Fix #4487: A false-positive about UnnecessaryConstructor and @<!-- -->Inject and @<!-- -->Autowired - <a href="https://github.com/LynnBroe">AnnaDev</a> (@LynnBroe)</li>
<li><a href="https://github.com/pmd/pmd/pull/4495">#4495</a>: [java] Fix #4493: false-positive about MissingStaticMethodInNonInstantiatableClass and @<!-- -->Inject - <a href="https://github.com/LynnBroe">AnnaDev</a> (@LynnBroe)</li>
<li><a href="https://github.com/pmd/pmd/pull/4520">#4520</a>: [doc] Fix typo: missing closing quotation mark after CPD-END - <a href="https://github.com/joaodinissf">João Dinis Ferreira</a> (@joaodinissf)</li>
</ul>
<h3 id="-stats">📈 Stats</h3>
<ul>
<li>4416 commits</li>
<li>464 closed tickets &amp; PRs</li>
<li>Days since last release: 28</li>
</ul>
<div class="tags">
</div>
</div>
<footer>
<hr />
<div>
This documentation is written in markdown. <br />
If there is something missing or can be improved, edit this page on
github and create a PR:
<a
target="_blank"
href="https://github.com/pmd/pmd/blob/master/docs/pages/release_notes.md"
role="button"
><i class="fab fa-github fa-lg"></i> Edit on GitHub</a
>
</div>
<hr />
<div class="row">
<div class="col-lg-12 footer">
&copy;2023 PMD Open Source Project. All rights
reserved. <br />
Site last generated: Apr 29, 2023 <br />
<p>
<img src="images/logo/pmd-logo-70px.png" alt="PMD
logo"/>
</p>
</div>
</div>
</footer>
</div>
<!-- /.row -->
</div>
<!-- /.container -->
</div>
<!-- Sticky TOC column -->
<div class="toc-col">
<div id="toc"></div>
</div>
<!-- /.toc-container-wrapper -->
</div>
</div>
<script type="application/javascript" src="assets/jquery-3.5.1/jquery-3.5.1.min.js"></script>
<script type="application/javascript" src="assets/anchorjs-4.2.2/anchor.min.js"></script>
<script type="application/javascript" src="assets/navgoco-0.2.1/src/jquery.navgoco.min.js"></script>
<script type="application/javascript" src="assets/bootstrap-4.5.2-dist/js/bootstrap.bundle.min.js"></script>
<script type="application/javascript" src="assets/Simple-Jekyll-Search-1.0.8/dest/jekyll-search.js"></script>
<script type="application/javascript" src="assets/jekyll-table-of-contents/toc.js"></script>
<script type="application/javascript" src="js/tabstate.js"></script>
<script type="application/javascript" src="js/customscripts.js"></script>
</body>
</html>