pmd/pmd_release_notes.html

4007 lines
251 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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_migrating_to_pmd7.html">Migration Guide for PMD 7</a></li>
<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>
<li><a href="pmd_userdocs_extending_ast_dump.html">Creating (XML) dump of the AST</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_bld.html">bld PMD Extension</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="#">Velocity Template Language (VTL) 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_bestpractices.html">Best Practices</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_index.html">Overview</a></li>
<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_cpp.html">C/C++</a></li>
<li><a href="pmd_languages_cs.html">C#</a></li>
<li><a href="pmd_languages_coco.html">Coco</a></li>
<li><a href="pmd_languages_dart.html">Dart</a></li>
<li><a href="pmd_languages_fortran.html">Fortran</a></li>
<li><a href="pmd_languages_gherkin.html">Gherkin</a></li>
<li><a href="pmd_languages_go.html">Go</a></li>
<li><a href="pmd_languages_html.html">HTML</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_julia.html">Julia</a></li>
<li><a href="pmd_languages_kotlin.html">Kotlin</a></li>
<li><a href="pmd_languages_lua.html">Lua</a></li>
<li><a href="pmd_languages_matlab.html">Matlab</a></li>
<li><a href="pmd_languages_modelica.html">Modelica</a></li>
<li><a href="pmd_languages_objectivec.html">Objective-C</a></li>
<li><a href="pmd_languages_perl.html">Perl</a></li>
<li><a href="pmd_languages_php.html">PHP</a></li>
<li><a href="pmd_languages_plsql.html">PLSQL</a></li>
<li><a href="pmd_languages_python.html">Python</a></li>
<li><a href="pmd_languages_ruby.html">Ruby</a></li>
<li><a href="pmd_languages_scala.html">Scala</a></li>
<li><a href="pmd_languages_swift.html">Swift</a></li>
<li><a href="pmd_languages_tsql.html">T-SQL</a></li>
<li><a href="pmd_languages_visualforce.html">Visualforce</a></li>
<li><a href="pmd_languages_vm.html">Velocity Template Language (VTL)</a></li>
<li><a href="pmd_languages_xml.html">XML and XML dialects</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="tag_experimental.html">List of experimental Features</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">
<details id="inline-toc-details">
<summary>Table of Contents</summary>
<div id="inline-toc"><!-- empty, move TOC here when screen size too small --></div>
</details>
<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-rc4">Changes since 7.0.0-rc4</h3>
<p>This section lists the most important changes from the last release candidate.
The remaining section describes the complete release notes for 7.0.0.</p>
<h4 id="new-and-noteworthy">New and Noteworthy</h4>
<h5 id="maven-pmd-plugin-compatibility-with-pmd-7">Maven PMD Plugin compatibility with PMD 7</h5>
<p>In order to use PMD 7 with <a href="https://maven.apache.org/plugins/maven-pmd-plugin/">maven-pmd-plugin</a> a new
compatibility module has been created. This allows to use PMD 7 by simply adding one additional dependency:</p>
<ol>
<li>Follow the guide <a href="https://maven.apache.org/plugins/maven-pmd-plugin/examples/upgrading-PMD-at-runtime.html">Upgrading PMD at Runtime</a></li>
<li>Add additionally the following dependency:</li>
</ol>
<div class="language-xml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;dependency&gt;</span>
<span class="nt">&lt;groupId&gt;</span>net.sourceforge.pmd<span class="nt">&lt;/groupId&gt;</span>
<span class="nt">&lt;artifactId&gt;</span>pmd-compat6<span class="nt">&lt;/artifactId&gt;</span>
<span class="nt">&lt;version&gt;</span>${pmdVersion}<span class="nt">&lt;/version&gt;</span>
<span class="nt">&lt;/dependency&gt;</span>
</code></pre></div></div>
<p>It is important to add this dependency as the <strong>first</strong> in the list, so that maven-pmd-plugin sees the (old)
compatible versions of some classes.</p>
<p>This module is available beginning with version 7.0.0-rc4 and will be there at least for the first
final version PMD 7 (7.0.0). Its not decided yet, whether we will keep updating it, after PMD 7 is finally
released.</p>
<p>Note: This compatibility module only works for the built-in rules, that are still available in PMD 7. E.g. you need
to review your rulesets and look out for deprecated rules and such. See the use case
<a href="pmd_userdocs_migrating_to_pmd7.html#im-using-only-built-in-rules">Im using only built-in rules</a>
in the <a href="pmd_userdocs_migrating_to_pmd7.html">Migration Guide for PMD 7</a>.</p>
<p>As PMD 7 revamped the Java module, if you have custom rules, you need to migrate these rules.
See the use case <a href="pmd_userdocs_migrating_to_pmd7.html#im-using-custom-rules">Im using custom rules</a>
in the Migration Guide.</p>
<h5 id="swift-support">Swift Support</h5>
<ul>
<li>limited support for Swift 5.9 (Macro Expansions)</li>
</ul>
<h5 id="groovy-support-cpd">Groovy Support (CPD)</h5>
<ul>
<li>We now support parsing all Groovy features from Groovy 3 and 4.</li>
<li>We now support <a href="pmd_userdocs_cpd.html#suppression">suppression</a> through <code class="language-plaintext highlighter-rouge">CPD-ON</code>/<code class="language-plaintext highlighter-rouge">CPD-OFF</code> comment pairs.</li>
<li>See <a href="https://github.com/pmd/pmd/pull/4726">PR #4726</a> for details.</li>
</ul>
<h5 id="updated-pmd-designer">Updated PMD Designer</h5>
<p>This PMD release ships a new version of the pmd-designer.
For the changes, see</p>
<ul>
<li><a href="https://github.com/pmd/pmd-designer/releases/tag/7.0.0">PMD Designer Changelog (7.0.0)</a>.</li>
</ul>
<h5 id="apex-support-replaced-jorje-with-fully-open-source-front-end">Apex Support: Replaced Jorje with fully open source front-end</h5>
<p>When PMD added Apex support with version 5.5.0, it utilized the Apex Jorje library to parse Apex source
and generate an AST. This library is however a binary-blob provided as part of the
<a href="https://github.com/forcedotcom/salesforcedx-vscode">Salesforce Extensions for VS Code</a>, and it is closed-source.</p>
<p>This causes problems, if binary blobs are not allowed by e.g. a company-wide policy. In that case, the Jorje
library prevented that PMD Apex could be used at all.</p>
<p>Also having access to the source code, enhancements and modifications are easier to do.</p>
<p>Under the hood, we use two open source libraries instead:</p>
<ul>
<li><a href="https://github.com/nawforce/apex-parser">apex-parser</a> by <a href="https://github.com/nawforce">Kevin Jones</a> (@nawforce)
This project provides the grammar for a ANTLR based parser.</li>
<li><a href="https://github.com/google/summit-ast">Summit-AST</a> by <a href="https://github.com/google">Google</a> (@google)
This project translates the ANTLR parse tree into an AST, that is similar to the AST Jorje provided.
Note: This is not an official Google product.</li>
</ul>
<p>Although the parsers is completely switched, there are only little known changes to the AST.
These are documented in the <a href="pmd_userdocs_migrating_to_pmd7.html#apex-ast">Migration Guide for PMD 7: Apex AST</a>.</p>
<p>See <a href="https://github.com/pmd/pmd/issues/3766">#3766</a> for details.</p>
<p>Contributors: <a href="https://github.com/aaronhurst-google">Aaron Hurst</a> (@aaronhurst-google),
<a href="https://github.com/eklimo">Edward Klimoshenko</a> (@eklimo)</p>
<h5 id="changed-html-support">Changed: HTML support</h5>
<p>Support for HTML was introduced in PMD 6.55.0 as an experimental feature. With PMD 7.0.0 this
is now considered stable.</p>
<h5 id="changed-kotlin-support">Changed: Kotlin support</h5>
<p>Experimental Kotlin support has been promoted as stable API now.</p>
<h4 id="rule-changes">Rule Changes</h4>
<p><strong>New Rules</strong></p>
<ul>
<li><a href="pmd_rules_apex_performance.html#operationwithhighcostinloop"><code class="language-plaintext highlighter-rouge">OperationWithHighCostInLoop</code></a> finds Schema class methods called in a loop, which is a
potential performance issue.</li>
<li><a href="pmd_rules_java_codestyle.html#useexplicittypes"><code class="language-plaintext highlighter-rouge">UseExplicitTypes</code></a> reports usages of <code class="language-plaintext highlighter-rouge">var</code> keyword, which was introduced with Java 10.</li>
<li><a href="pmd_rules_xml_bestpractices.html#missingencoding"><code class="language-plaintext highlighter-rouge">MissingEncoding</code></a> finds XML files without explicit encoding.</li>
</ul>
<p><strong>Changed Rules</strong></p>
<ul>
<li><a href="pmd_rules_java_codestyle.html#emptycontrolstatement"><code class="language-plaintext highlighter-rouge">EmptyControlStatement</code></a>: The rule has a new property to allow empty blocks when
they contain a comment (<code class="language-plaintext highlighter-rouge">allowCommentedBlocks</code>).</li>
</ul>
<p><strong>Removed Rules</strong></p>
<p>The following previously deprecated rules have been finally removed:</p>
<ul>
<li>Apex
<ul>
<li>performance.xml/AvoidSoqlInLoops <span style="font-size: small;">(deleted)</span> ➡️ use <a href="pmd_rules_apex_performance.html#operationwithlimitsinloop"><code class="language-plaintext highlighter-rouge">OperationWithLimitsInLoop</code></a></li>
<li>performance.xml/AvoidSoslInLoops <span style="font-size: small;">(deleted)</span> ➡️ use <a href="pmd_rules_apex_performance.html#operationwithlimitsinloop"><code class="language-plaintext highlighter-rouge">OperationWithLimitsInLoop</code></a></li>
<li>performance.xml/AvoidDmlStatementsInLoops <span style="font-size: small;">(deleted)</span> ➡️ use <a href="pmd_rules_apex_performance.html#operationwithlimitsinloop"><code class="language-plaintext highlighter-rouge">OperationWithLimitsInLoop</code></a></li>
</ul>
</li>
<li>Java
<ul>
<li>design.xml/ExcessiveClassLength <span style="font-size: small;">(deleted)</span> ➡️ use <a href="pmd_rules_java_design.html#ncsscount"><code class="language-plaintext highlighter-rouge">NcssCount</code></a></li>
<li>design.xml/ExcessiveMethodLength <span style="font-size: small;">(deleted)</span> ➡️ use <a href="pmd_rules_java_design.html#ncsscount"><code class="language-plaintext highlighter-rouge">NcssCount</code></a></li>
<li>errorprone.xml/BeanMembersShouldSerialize <span style="font-size: small;">(deleted)</span> ➡️ use <a href="pmd_rules_java_errorprone.html#nonserializableclass"><code class="language-plaintext highlighter-rouge">NonSerializableClass</code></a></li>
<li>errorprone.xml/EmptyFinallyBlock <span style="font-size: small;">(deleted)</span> ➡️ use <a href="pmd_rules_java_codestyle.html#emptycontrolstatement"><code class="language-plaintext highlighter-rouge">EmptyControlStatement</code></a></li>
<li>errorprone.xml/EmptyIfStmt <span style="font-size: small;">(deleted)</span> ➡️ use <a href="pmd_rules_java_codestyle.html#emptycontrolstatement"><code class="language-plaintext highlighter-rouge">EmptyControlStatement</code></a></li>
<li>errorprone.xml/EmptyInitializer <span style="font-size: small;">(deleted)</span> ➡️ use <a href="pmd_rules_java_codestyle.html#emptycontrolstatement"><code class="language-plaintext highlighter-rouge">EmptyControlStatement</code></a></li>
<li>errorprone.xml/EmptyStatementBlock <span style="font-size: small;">(deleted)</span> ➡️ use <a href="pmd_rules_java_codestyle.html#emptycontrolstatement"><code class="language-plaintext highlighter-rouge">EmptyControlStatement</code></a></li>
<li>errorprone.xml/EmptyStatementNotInLoop <span style="font-size: small;">(deleted)</span> ➡️ use <a href="pmd_rules_java_codestyle.html#unnecessarysemicolon"><code class="language-plaintext highlighter-rouge">UnnecessarySemicolon</code></a></li>
<li>errorprone.xml/EmptySwitchStatements <span style="font-size: small;">(deleted)</span> ➡️ use <a href="pmd_rules_java_codestyle.html#emptycontrolstatement"><code class="language-plaintext highlighter-rouge">EmptyControlStatement</code></a></li>
<li>errorprone.xml/EmptySynchronizedBlock <span style="font-size: small;">(deleted)</span> ➡️ use <a href="pmd_rules_java_codestyle.html#emptycontrolstatement"><code class="language-plaintext highlighter-rouge">EmptyControlStatement</code></a></li>
<li>errorprone.xml/EmptyTryBlock <span style="font-size: small;">(deleted)</span> ➡️ use <a href="pmd_rules_java_codestyle.html#emptycontrolstatement"><code class="language-plaintext highlighter-rouge">EmptyControlStatement</code></a></li>
<li>errorprone.xml/EmptyWhileStmt <span style="font-size: small;">(deleted)</span> ➡️ use <a href="pmd_rules_java_codestyle.html#emptycontrolstatement"><code class="language-plaintext highlighter-rouge">EmptyControlStatement</code></a></li>
</ul>
</li>
</ul>
<p><strong>Removed deprecated rulesets</strong></p>
<p>The following previously deprecated rulesets have been removed. These were the left-over rulesets from PMD 5.
The rules have been moved into categories with PMD 6.</p>
<ul>
<li>rulesets/apex/apexunit.xml</li>
<li>rulesets/apex/braces.xml</li>
<li>rulesets/apex/complexity.xml</li>
<li>rulesets/apex/empty.xml</li>
<li>rulesets/apex/metrics.xml</li>
<li>rulesets/apex/performance.xml</li>
<li>rulesets/apex/ruleset.xml</li>
<li>rulesets/apex/securty.xml</li>
<li>rulesets/apex/style.xml</li>
<li>rulesets/java/android.xml</li>
<li>rulesets/java/basic.xml</li>
<li>rulesets/java/clone.xml</li>
<li>rulesets/java/codesize.xml</li>
<li>rulesets/java/comments.xml</li>
<li>rulesets/java/controversial.xml</li>
<li>rulesets/java/coupling.xml</li>
<li>rulesets/java/design.xml</li>
<li>rulesets/java/empty.xml</li>
<li>rulesets/java/finalizers.xml</li>
<li>rulesets/java/imports.xml</li>
<li>rulesets/java/j2ee.xml</li>
<li>rulesets/java/javabeans.xml</li>
<li>rulesets/java/junit.xml</li>
<li>rulesets/java/logging-jakarta-commons.xml</li>
<li>rulesets/java/logging-java.xml</li>
<li>rulesets/java/metrics.xml</li>
<li>rulesets/java/migrating.xml</li>
<li>rulesets/java/migrating_to_13.xml</li>
<li>rulesets/java/migrating_to_14.xml</li>
<li>rulesets/java/migrating_to_15.xml</li>
<li>rulesets/java/migrating_to_junit4.xml</li>
<li>rulesets/java/naming.xml</li>
<li>rulesets/java/optimizations.xml</li>
<li>rulesets/java/strictexception.xml</li>
<li>rulesets/java/strings.xml</li>
<li>rulesets/java/sunsecure.xml</li>
<li>rulesets/java/typeresolution.xml</li>
<li>rulesets/java/unnecessary.xml</li>
<li>rulesets/java/unusedcode.xml</li>
<li>rulesets/ecmascript/basic.xml</li>
<li>rulesets/ecmascript/braces.xml</li>
<li>rulesets/ecmascript/controversial.xml</li>
<li>rulesets/ecmascript/unnecessary.xml</li>
<li>rulesets/jsp/basic.xml</li>
<li>rulesets/jsp/basic-jsf.xml</li>
<li>rulesets/plsql/codesize.xml</li>
<li>rulesets/plsql/dates.xml</li>
<li>rulesets/plsql/strictsyntax.xml</li>
<li>rulesets/plsql/TomKytesDespair.xml</li>
<li>rulesets/vf/security.xml</li>
<li>rulesets/vm/basic.xml</li>
<li>rulesets/pom/basic.xml</li>
<li>rulesets/xml/basic.xml</li>
<li>rulesets/xsl/xpath.xml</li>
<li>rulesets/releases/*</li>
</ul>
<h4 id="fixed-issues">Fixed issues</h4>
<ul>
<li>cli
<ul>
<li><a href="https://github.com/pmd/pmd/pull/4594">#4594</a>: [cli] Change completion generation to runtime</li>
<li><a href="https://github.com/pmd/pmd/pull/4685">#4685</a>: [cli] Clarify CPD documentation, fix positional parameter handling</li>
<li><a href="https://github.com/pmd/pmd/issues/4723">#4723</a>: [cli] Launch fails for “bash pmd”</li>
</ul>
</li>
<li>core
<ul>
<li><a href="https://github.com/pmd/pmd/issues/1027">#1027</a>: [core] Apply the new PropertyDescriptor&lt;Pattern&gt; type where applicable</li>
<li><a href="https://github.com/pmd/pmd/issues/3903">#3903</a>: [core] Consolidate <code class="language-plaintext highlighter-rouge">n.s.pmd.reporting</code> package</li>
<li><a href="https://github.com/pmd/pmd/issues/3905">#3905</a>: [core] Stabilize tree export API</li>
<li><a href="https://github.com/pmd/pmd/issues/3917">#3917</a>: [core] Consolidate <code class="language-plaintext highlighter-rouge">n.s.pmd.lang.rule</code> package</li>
<li><a href="https://github.com/pmd/pmd/issues/4065">#4065</a>: [core] Rename TokenMgrError to LexException, Tokenizer to CpdLexer</li>
<li><a href="https://github.com/pmd/pmd/issues/4309">#4309</a>: [core] Cleanups in XPath area</li>
<li><a href="https://github.com/pmd/pmd/issues/4312">#4312</a>: [core] Remove unnecessary property <code class="language-plaintext highlighter-rouge">color</code> and system property <code class="language-plaintext highlighter-rouge">pmd.color</code> in <code class="language-plaintext highlighter-rouge">TextColorRenderer</code></li>
<li><a href="https://github.com/pmd/pmd/issues/4313">#4313</a>: [core] Remove support for &lt;lang&gt;-&lt;ruleset&gt; hyphen notation for ruleset references</li>
<li><a href="https://github.com/pmd/pmd/issues/4314">#4314</a>: [core] Remove ruleset compatibility filter (RuleSetFactoryCompatibility) and CLI option <code class="language-plaintext highlighter-rouge">--no-ruleset-compatibility</code></li>
<li><a href="https://github.com/pmd/pmd/issues/4348">#4348</a>: [core] Consolidate @<!-- -->InternalApi classes</li>
<li><a href="https://github.com/pmd/pmd/issues/4349">#4349</a>: [core] Cleanup remaining experimental and deprecated API</li>
<li><a href="https://github.com/pmd/pmd/issues/4378">#4378</a>: [core] Ruleset loading processes commented rules</li>
<li><a href="https://github.com/pmd/pmd/issues/4674">#4674</a>: [core] WARNING: Illegal reflective access by org.codehaus.groovy.reflection.CachedClass</li>
<li><a href="https://github.com/pmd/pmd/pull/4694">#4694</a>: [core] Fix line/col numbers in TokenMgrError</li>
<li><a href="https://github.com/pmd/pmd/issues/4717">#4717</a>: [core] XSLTRenderer doesnt close report file</li>
<li><a href="https://github.com/pmd/pmd/pull/4750">#4750</a>: [core] Fix flaky SummaryHTMLRenderer</li>
<li><a href="https://github.com/pmd/pmd/pull/4782">#4782</a>: [core] Avoid using getImage/@<!-- -->Image</li>
</ul>
</li>
<li>doc
<ul>
<li><a href="https://github.com/pmd/pmd/issues/995">#995</a>: [doc] Document API evolution principles as ADR</li>
<li><a href="https://github.com/pmd/pmd/issues/2511">#2511</a>: [doc] Review guides for writing java/xpath rules for correctness with PMD 7</li>
<li><a href="https://github.com/pmd/pmd/issues/3175">#3175</a>: [doc] Document language module features</li>
<li><a href="https://github.com/pmd/pmd/issues/4308">#4308</a>: [doc] Document XPath API @<!-- ->NoAttribute and @<!-- -->DeprecatedAttribute</li>
<li><a href="https://github.com/pmd/pmd/issues/4319">#4319</a>: [doc] Document TypeRes API and Symbols API</li>
<li><a href="https://github.com/pmd/pmd/pull/4659">#4659</a>: [doc] Improve ant documentation</li>
<li><a href="https://github.com/pmd/pmd/pull/4669">#4669</a>: [doc] Add bld PMD Extension to Tools / Integrations</li>
<li><a href="https://github.com/pmd/pmd/issues/4676">#4676</a>: [doc] Clarify how CPD <code class="language-plaintext highlighter-rouge">--ignore-literals</code> and <code class="language-plaintext highlighter-rouge">--ignore-identifiers</code> work</li>
</ul>
</li>
<li>miscellaneous
<ul>
<li><a href="https://github.com/pmd/pmd/pull/4699">#4699</a>: Make PMD buildable with java 21</li>
<li><a href="https://github.com/pmd/pmd/pull/4586">#4586</a>: Use explicit encoding in ruleset xml files</li>
<li><a href="https://github.com/pmd/pmd/issues/4642">#4642</a>: Update regression tests with Java 21 language features</li>
<li><a href="https://github.com/pmd/pmd/issues/4736">#4736</a>: [ci] Improve build procedure</li>
<li><a href="https://github.com/pmd/pmd/pull/4741">#4741</a>: Add pmd-compat6 module for maven-pmd-plugin</li>
<li><a href="https://github.com/pmd/pmd/pull/4749">#4749</a>: Fixes NoSuchMethodError on processing errors in pmd-compat6</li>
<li><a href="https://github.com/pmd/pmd/issues/4776">#4776</a>: [ci] Upgrade to ruby 3</li>
<li><a href="https://github.com/pmd/pmd/pull/4796">#4796</a>: Remove deprecated and release rulesets</li>
</ul>
</li>
<li>apex
<ul>
<li><a href="https://github.com/pmd/pmd/issues/3766">#3766</a>: [apex] Replace Jorje with fully open source front-end</li>
</ul>
</li>
<li>apex-performance
<ul>
<li><a href="https://github.com/pmd/pmd/issues/4675">#4675</a>: [apex] New Rule: OperationWithHighCostInLoop</li>
</ul>
</li>
<li>groovy
<ul>
<li><a href="https://github.com/pmd/pmd/pull/4726">#4726</a>: [groovy] Support Groovy to 3 and 4 and CPD suppressions</li>
</ul>
</li>
<li>java
<ul>
<li><a href="https://github.com/pmd/pmd/issues/1307">#1307</a>: [java] AccessNode API changes</li>
<li><a href="https://github.com/pmd/pmd/issues/3751">#3751</a>: [java] Rename some node types</li>
<li><a href="https://github.com/pmd/pmd/pull/4628">#4628</a>: [java] Support loading classes from java runtime images</li>
<li><a href="https://github.com/pmd/pmd/issues/4753">#4753</a>: [java] PMD crashes while using generics and wildcards</li>
</ul>
</li>
<li>java-bestpractives
<ul>
<li><a href="https://github.com/pmd/pmd/issues/4625">#4625</a>: [java] UnusedPrivateMethod false positive: Autoboxing into Number</li>
</ul>
</li>
<li>java-codestyle
<ul>
<li><a href="https://github.com/pmd/pmd/issues/2847">#2847</a>: [java] New Rule: Use Explicit Types</li>
<li><a href="https://github.com/pmd/pmd/issues/4239">#4239</a>: [java] UnnecessaryLocalBeforeReturn - false positive with catch clause</li>
<li><a href="https://github.com/pmd/pmd/issues/4578">#4578</a>: [java] CommentDefaultAccessModifier comment needs to be before annotation if present</li>
<li><a href="https://github.com/pmd/pmd/issues/4631">#4631</a>: [java] UnnecessaryFullyQualifiedName fails to recognize illegal self reference in enums</li>
<li><a href="https://github.com/pmd/pmd/issues/4645">#4645</a>: [java] CommentDefaultAccessModifier - False Positive with JUnit5s ParameterizedTest</li>
<li><a href="https://github.com/pmd/pmd/pull/4754">#4754</a>: [java] EmptyControlStatementRule: Add allowCommentedBlocks property</li>
</ul>
</li>
<li>java-design
<ul>
<li><a href="https://github.com/pmd/pmd/issues/174">#174</a>: [java] SingularField false positive with switch in method that both assigns and reads field</li>
</ul>
</li>
<li>java-errorprone
<ul>
<li><a href="https://github.com/pmd/pmd/issues/718">#718</a>: [java] BrokenNullCheck false positive with parameter/field confusion</li>
<li><a href="https://github.com/pmd/pmd/issues/1831">#1831</a>: [java] DetachedTestCase reports abstract methods</li>
<li><a href="https://github.com/pmd/pmd/pull/4719">#4719</a>: [java] UnnecessaryCaseChange: example doc toUpperCase() should compare to a capitalized string</li>
</ul>
</li>
<li>javascript
<ul>
<li><a href="https://github.com/pmd/pmd/pull/4673">#4673</a>: [javascript] CPD: Added support for decorator notation</li>
</ul>
</li>
<li>plsql
<ul>
<li><a href="https://github.com/pmd/pmd/issues/4820">#4820</a>: [plsql] WITH clause is ignored for SELECT INTO statements</li>
</ul>
</li>
<li>swift
<ul>
<li><a href="https://github.com/pmd/pmd/issues/4697">#4697</a>: [swift] Support Swift 5.9 features (mainly macros expansion expressions)</li>
</ul>
</li>
<li>xml-bestpractices
<ul>
<li><a href="https://github.com/pmd/pmd/pull/4592">#4592</a>: [xml] Add MissingEncoding rule</li>
</ul>
</li>
</ul>
<h4 id="api-changes">API Changes</h4>
<p><strong>New API</strong></p>
<p>The API around <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/util/treeexport/TreeRenderer.html#"><code>TreeRenderer</code></a> has been declared as stable. It was previously
experimental. It can be used via the CLI subcommand <code class="language-plaintext highlighter-rouge">ast-dump</code> or programmatically, as described
on <a href="pmd_userdocs_extending_ast_dump.html">Creating XML dump of the AST</a>.</p>
<p><strong>General AST Changes to avoid <code class="language-plaintext highlighter-rouge">@Image</code></strong></p>
<p>See <a href="pmd_userdocs_migrating_to_pmd7.html#general-ast-changes-to-avoid-image">General AST Changes to avoid @Image</a>
in the migration guide for details.</p>
<p><strong>XPath Rules</strong></p>
<ul>
<li>The property <code class="language-plaintext highlighter-rouge">version</code> was already deprecated and has finally been removed. Please dont define the version
property anymore in your custom XPath rules. By default, the latest XPath version will be used, which
is XPath 3.1.</li>
</ul>
<p><strong>Moved classes/consolidated packages</strong></p>
<ul>
<li>pmd-core
<ul>
<li>Many types have been moved from the base package <code class="language-plaintext highlighter-rouge">net.sourceforge.pmd</code> into subpackage <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/rule/package-summary.html#"><code>net.sourceforge.pmd.lang.rule</code></a>
<ul>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/rule/Rule.html#"><code>Rule</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/rule/RulePriority.html#"><code>RulePriority</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/rule/RuleSet.html#"><code>RuleSet</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/rule/RuleSetFactory.html#"><code>RuleSetFactory</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/rule/RuleSetLoader.html#"><code>RuleSetLoader</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/rule/RuleSetLoadException.html#"><code>RuleSetLoadException</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/rule/RuleSetWriter.html#"><code>RuleSetWriter</code></a></li>
</ul>
</li>
<li>Many types have been moved from the base package <code class="language-plaintext highlighter-rouge">net.sourceforge.pmd</code> into subpackage <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/reporting/package-summary.html#"><code>net.sourceforge.pmd.reporting</code></a>
<ul>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/reporting/Report.html#"><code>Report</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/reporting/RuleContext.html#"><code>RuleContext</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/reporting/RuleViolation.html#"><code>RuleViolation</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/reporting/ViolationSuppressor.html#"><code>ViolationSuppressor</code></a></li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/rule/xpath/XPathRule.html#"><code>XPathRule</code></a> has been moved into subpackage <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/rule/xpath/package-summary.html#"><code>net.sourceforge.pmd.lang.rule.xpath</code></a>.</li>
</ul>
</li>
</ul>
<p><strong>Internalized classes and interfaces and methods</strong></p>
<p>The following classes/methods have been marked as @<!-- -->InternalApi before and are now moved into a <code class="language-plaintext highlighter-rouge">internal</code>
package or made (package) private and are <em>not accessible</em> anymore.</p>
<ul>
<li>pmd-core
<ul>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.cache.AbstractAnalysisCache</code> (moved to internal, now package private)</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.cache.AnalysisCache</code> (moved to internal)</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.cache.AnalysisCacheListener</code> (moved to internal)</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.cache.AnalysisResult</code> (moved to internal)</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.cache.CachedRuleMapper</code> (moved to internal, now package private)</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.cache.CachedRuleViolation</code> (moved to internal, now package private)</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.cache.ChecksumAware</code> (moved to internal)</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.cache.FileAnalysisCache</code> (moved to internal)</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.cache.NoopAnalysisCache</code> (moved to internal)</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.util.ResourceLoader</code> (moved to internal)</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/cpd/Tokens.html#"><code>net.sourceforge.pmd.cpd.Tokens</code></a>
<ul>
<li>Constructor is now package private.</li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/LanguageProcessor.AnalysisTask.html#"><code>net.sourceforge.pmd.lang.LanguageProcessor.AnalysisTask</code></a>
<ul>
<li>Constructor is now package private.</li>
<li>Method <code class="language-plaintext highlighter-rouge">withFiles(java.util.List)</code> is now package private. Note: it was not previously marked with @<!-- -->InternalApi.</li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/rule/RuleTargetSelector.html#"><code>net.sourceforge.pmd.lang.rule.RuleTargetSelector</code></a>
<ul>
<li>Method <code class="language-plaintext highlighter-rouge">isRuleChain()</code> has been removed.</li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/renderers/AbstractAccumulatingRenderer.html#"><code>net.sourceforge.pmd.renderers.AbstractAccumulatingRenderer</code></a>
<ul>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/renderers/AbstractAccumulatingRenderer.html#renderFileReport(net.sourceforge.pmd.reporting.Report)"><code>renderFileReport</code></a> - this method is now final
and cant be overridden anymore.</li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/reporting/Report.html#"><code>net.sourceforge.pmd.reporting.Report</code></a>
<ul>
<li>Constructor as well as the methods <code class="language-plaintext highlighter-rouge">addRuleViolation</code>, <code class="language-plaintext highlighter-rouge">addConfigError</code>, <code class="language-plaintext highlighter-rouge">addError</code> are now private.</li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/reporting/RuleContext.html#"><code>net.sourceforge.pmd.reporting.RuleContext</code></a>
<ul>
<li>Method <code class="language-plaintext highlighter-rouge">getRule()</code> is now package private.</li>
<li>Method <code class="language-plaintext highlighter-rouge">create(FileAnalysisListener listener, Rule rule)</code> has been removed.</li>
</ul>
</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.rules.RuleFactory</code>: moved into subpackage <code class="language-plaintext highlighter-rouge">lang.rule</code> and made package private.
It has now been hidden completely from public API.</li>
<li>Many types have been moved from into subpackage <code class="language-plaintext highlighter-rouge">lang.rule.internal</code>.
<ul>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.RuleSetReference</code></li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.RuleSetReferenceId</code></li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.RuleSets</code></li>
</ul>
</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.lang.rule.ParametricRuleViolation</code> is now package private and moved to <code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.reporting.ParametricRuleViolation</code>.
The only public API is <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/reporting/RuleViolation.html#"><code>RuleViolation</code></a>.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/rule/RuleSet.html#"><code>net.sourceforge.pmd.lang.rule.RuleSet</code></a>
<ul>
<li>Method <code class="language-plaintext highlighter-rouge">applies(Rule,LanguageVersion)</code> is now package private.</li>
<li>Method <code class="language-plaintext highlighter-rouge">applies(TextFile)</code> has been removed.</li>
<li>Method <code class="language-plaintext highlighter-rouge">applies(FileId)</code> is now package private.</li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/rule/RuleSetLoader.html#"><code>net.sourceforge.pmd.lang.rule.RuleSetLoader</code></a>
<ul>
<li>Method <code class="language-plaintext highlighter-rouge">loadRuleSetsWithoutException(java.util.List)</code> is now package private.</li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/rule/RuleSetLoadException.html#"><code>net.sourceforge.pmd.lang.rule.RuleSetLoadException</code></a>
<ul>
<li>All constructors are package private now.</li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/LexException.html#"><code>net.sourceforge.pmd.lang.ast.LexException</code></a> - the constructor <code class="language-plaintext highlighter-rouge">LexException(boolean, String, int, int, String, char)</code> is now package private.
It is only used by JavaCC-generated token managers.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/PMDConfiguration.html#"><code>net.sourceforge.pmd.PMDConfiguration</code></a>
<ul>
<li>Method <code class="language-plaintext highlighter-rouge">setAnalysisCache(AnalysisCache)</code> is now package private. Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/PMDConfiguration.html#setAnalysisCacheLocation(java.lang.String)"><code>setAnalysisCacheLocation</code></a> instead.</li>
<li>Method <code class="language-plaintext highlighter-rouge">getAnalysisCache()</code> is now package private.</li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/document/FileCollector.html#"><code>net.sourceforge.pmd.lang.document.FileCollector</code></a>
<ul>
<li>Method <code class="language-plaintext highlighter-rouge">newCollector(LanguageVersionDiscoverer, PmdReporter)</code> is now package private.</li>
<li>Method <code class="language-plaintext highlighter-rouge">newCollector(PmdReporter)</code> is now package private.</li>
<li>In order to create a FileCollector, use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/PmdAnalysis.html#files()"><code>files</code></a> instead.</li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/rule/xpath/Attribute.html#"><code>net.sourceforge.pmd.lang.rule.xpath.Attribute</code></a>
<ul>
<li>Method <code class="language-plaintext highlighter-rouge">replacementIfDeprecated()</code> is now package private.</li>
</ul>
</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.properties.PropertyTypeId</code> - moved in subpackage <code class="language-plaintext highlighter-rouge">internal</code>.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/properties/PropertyDescriptor.html#"><code>net.sourceforge.pmd.properties.PropertyDescriptor</code></a> - method <code class="language-plaintext highlighter-rouge">getTypeId()</code> is now package private.</li>
</ul>
</li>
<li>pmd-ant
<ul>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-ant/7.0.0-SNAPSHOT/net/sourceforge/pmd/ant/Formatter.html#"><code>net.sourceforge.pmd.ant.Formatter</code></a>
<ul>
<li>Method <code class="language-plaintext highlighter-rouge">getRenderer()</code> has been removed.</li>
<li>Method <code class="language-plaintext highlighter-rouge">start(String)</code> is private now.</li>
<li>Method <code class="language-plaintext highlighter-rouge">end(Report)</code> has been removed.</li>
<li>Method <code class="language-plaintext highlighter-rouge">isNoOutputSupplied()</code> is now package private.</li>
<li>Method <code class="language-plaintext highlighter-rouge">newListener(Project)</code> is now package private.</li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-ant/7.0.0-SNAPSHOT/net/sourceforge/pmd/ant/PMDTask.html#"><code>net.sourceforge.pmd.ant.PMDTask</code></a>
<ul>
<li>Method <code class="language-plaintext highlighter-rouge">getRelativizeRoots()</code> has been removed.</li>
</ul>
</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.ant.ReportException</code> is now package private. Note: It was not marked with @<!-- -->InternalApi before.</li>
</ul>
</li>
<li>pmd-apex
<ul>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-apex/7.0.0-SNAPSHOT/net/sourceforge/pmd/ast/ApexNode.html#"><code>net.sourceforge.pmd.ast.ApexNode</code></a>
<ul>
<li>Method <code class="language-plaintext highlighter-rouge">getNode()</code> has been removed. It was only deprecated before and not marked with @<!-- -->InternalApi.
However, it gave access to the wrapped Jorje node and was thus internal API.</li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-apex/7.0.0-SNAPSHOT/net/sourceforge/pmd/ast/AbstractApexNode.html#"><code>net.sourceforge.pmd.ast.AbstractApexNode</code></a>
<ul>
<li>Method <code class="language-plaintext highlighter-rouge">getNode()</code> is now package private.</li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-apex/7.0.0-SNAPSHOT/net/sourceforge/pmd/multifile/ApexMultifileAnalysis.html#"><code>net.sourceforge.pmd.multifile.ApexMultifileAnalysis</code></a>
<ul>
<li>Constructor is now package private.</li>
</ul>
</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.lang.apex.rule.design.AbstractNcssCountRule</code> (now package private)</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.lang.apex.rule.AbstractApexUnitTestRule</code> (moved to package <code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.apex.rule.bestpractices</code>, now package private)</li>
</ul>
</li>
<li>pmd-java
<ul>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.lang.java.rule.AbstractIgnoredAnnotationRule</code> (moved to internal)</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.lang.java.types.ast.LazyTypeResolver</code> (moved to internal)</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/types/JMethodSig.html#"><code>net.sourceforge.pmd.types.JMethodSig</code></a>
<ul>
<li>Method <code class="language-plaintext highlighter-rouge">internalApi()</code> has been removed.</li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/types/TypeOps.html#"><code>net.sourceforge.pmd.types.TypeOps</code></a>
<ul>
<li>Method <code class="language-plaintext highlighter-rouge">isSameTypeInInference(JTypeMirror,JTypeMirror)</code> is now package private.</li>
</ul>
</li>
</ul>
</li>
<li>pmd-jsp
<ul>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-jsp/7.0.0-SNAPSHOT/net/sourceforge/pmd/ast/JspParser.html#"><code>net.sourceforge.pmd.ast.JspParser</code></a>
<ul>
<li>Method <code class="language-plaintext highlighter-rouge">getTokenBehavior()</code> has been removed.</li>
</ul>
</li>
</ul>
</li>
<li>pmd-modelica
<ul>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-modelica/7.0.0-SNAPSHOT/net/sourceforge/pmd/ast/InternalApiBridge.html#"><code>net.sourceforge.pmd.ast.InternalApiBridge</code></a> renamed from <code class="language-plaintext highlighter-rouge">InternalModelicaNodeApi</code>.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-modelica/7.0.0-SNAPSHOT/net/sourceforge/pmd/resolver/InternalApiBridge.html#"><code>net.sourceforge.pmd.resolver.InternalApiBridge</code></a> renamed from <code class="language-plaintext highlighter-rouge">InternalModelicaResolverApi</code>.</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.lang.modelica.resolver.ModelicaSymbolFacade</code> has been removed.</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.lang.modelica.resolver.ResolutionContext</code> (moved to internal)</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.lang.modelica.resolver.ResolutionState</code> (moved to internal). Note: it was not previously marked with @<!-- -->InternalApi.</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.lang.modelica.resolver.Watchdog</code> (moved to internal). Note: it was not previously marked with @<!-- -->InternalApi.</li>
</ul>
</li>
<li>pmd-plsql
<ul>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.lang.plsql.rule.design.AbstractNcssCountRule</code> is now package private.</li>
</ul>
</li>
<li>pmd-scala
<ul>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-scala_2.13/7.0.0-SNAPSHOT/net/sourceforge/pmd/ScalaLanguageModule.html#"><code>net.sourceforge.pmd.ScalaLanguageModule</code></a>
<ul>
<li>Method <code class="language-plaintext highlighter-rouge">dialectOf(LanguageVersion)</code> has been removed.</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><strong>Removed classes and members (previously deprecated)</strong></p>
<p>The annotation <code class="language-plaintext highlighter-rouge">@DeprecatedUntil700</code> has been removed.</p>
<ul>
<li>pmd-core
<ul>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/cpd/CpdLanguageProperties.html#"><code>net.sourceforge.pmd.cpd.CpdLanguageProperties</code></a>. The field <code class="language-plaintext highlighter-rouge">DEFAULT_SKIP_BLOCKS_PATTERN</code> has been removed.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/impl/antlr4/BaseAntlrNode.html#"><code>net.sourceforge.pmd.lang.ast.impl.antlr4.BaseAntlrNode</code></a> - method <code class="language-plaintext highlighter-rouge">joinTokenText()</code> has been removed.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/Node.html#"><code>net.sourceforge.pmd.lang.ast.Node</code></a> - many methods have been removed:
<ul>
<li><code class="language-plaintext highlighter-rouge">getNthParent(int)</code> - Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/Node.html#ancestors()"><code>ancestors</code></a> instead, e.g. <code class="language-plaintext highlighter-rouge">node.ancestors().get(n-1)</code></li>
<li><code class="language-plaintext highlighter-rouge">getFirstParentOfType(Class)</code> - Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/Node.html#ancestors(java.lang.Class)"><code>ancestors</code></a> instead, e.g. <code class="language-plaintext highlighter-rouge">node.ancestors(parentType).first()</code></li>
<li><code class="language-plaintext highlighter-rouge">getParentsOfType(Class)</code> - Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/Node.html#ancestors(java.lang.Class)"><code>ancestors</code></a> instead, e.g. <code class="language-plaintext highlighter-rouge">node.ancestors(parentType).toList()</code></li>
<li><code class="language-plaintext highlighter-rouge">findChildrenOfType(Class)</code> - Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/Node.html#children(java.lang.Class)"><code>children</code></a> instead, e.g. <code class="language-plaintext highlighter-rouge">node.children(childType).toList()</code></li>
<li><code class="language-plaintext highlighter-rouge">findDescendantsOfType(Class)</code> - Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/Node.html#descendants(java.lang.Class)"><code>descendants</code></a> instead, e.g. <code class="language-plaintext highlighter-rouge">node.descendants(targetType).toList()</code></li>
<li><code class="language-plaintext highlighter-rouge">findDescendantsOfType(Class,boolean)</code> - Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/Node.html#descendants(java.lang.Class)"><code>descendants</code></a> instead, e.g. <code class="language-plaintext highlighter-rouge">node.descendants(targetType).crossFindBoundaries(b).toList()</code></li>
<li><code class="language-plaintext highlighter-rouge">getFirstChildOfType(Class)</code> - Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/Node.html#firstChild(java.lang.Class)"><code>firstChild</code></a> instead</li>
<li><code class="language-plaintext highlighter-rouge">getFirstDescendantOfType(Class)</code> - Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/Node.html#descendants(java.lang.Class)"><code>descendants</code></a> instead, e.g. <code class="language-plaintext highlighter-rouge">node.descendants(targetType).first()</code></li>
<li><code class="language-plaintext highlighter-rouge">hasDescendantOfType(Class)</code> - Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/Node.html#descendants(java.lang.Class)"><code>descendants</code></a> instead, e.g. <code class="language-plaintext highlighter-rouge">node.descendants(targetType).nonEmpty()</code></li>
<li><code class="language-plaintext highlighter-rouge">findChildNodesWithXPath(String)</code> - Use the <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/NodeStream.html#"><code>NodeStream</code></a> API instead.</li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/impl/GenericNode.html#"><code>net.sourceforge.pmd.lang.ast.impl.GenericNode</code></a> - method <code class="language-plaintext highlighter-rouge">getNthParent(int)</code> has been removed. Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/Node.html#ancestors()"><code>ancestors</code></a> instead, e.g. <code class="language-plaintext highlighter-rouge">node.ancestors().get(n-1)</code></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/document/FileCollector.html#"><code>net.sourceforge.pmd.lang.document.FileCollector</code></a> - method <code class="language-plaintext highlighter-rouge">addZipFile(java.nio.file.Path)</code> has been removed. Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/document/FileCollector.html#addZipFileWithContent(java.nio.file.Path)"><code>addZipFileWithContent</code></a> instead</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/document/TextDocument.html#"><code>net.sourceforge.pmd.lang.document.TextDocument</code></a> - method <code class="language-plaintext highlighter-rouge">readOnlyString(CharSequence,String,LanguageVersion)</code> has been removed.
Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/document/TextDocument.html#readOnlyString(java.lang.CharSequence,net.sourceforge.pmd.lang.document.FileId,net.sourceforge.pmd.lang.LanguageVersion)"><code>readOnlyString</code></a> instead.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/document/TextFile.html#"><code>net.sourceforge.pmd.lang.document.TextFile</code></a> - method <code class="language-plaintext highlighter-rouge">dataSourceCompat(DataSource,PMDConfiguration)</code> has been removed.
Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/document/TextFile.html#"><code>TextFile</code></a> directly, e.g. <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/document/TextFile.forPath.html#"><code>TextFile.forPath</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/rule/xpath/XPathVersion.html#"><code>net.sourceforge.pmd.lang.rule.xpath.XPathVersion</code></a>
<ul>
<li><code class="language-plaintext highlighter-rouge">XPATH_1_0</code></li>
<li><code class="language-plaintext highlighter-rouge">XPATH_1_0_COMPATIBILITY</code></li>
<li><code class="language-plaintext highlighter-rouge">XPATH_2_0</code></li>
<li>Only XPath version 3.1 is now supported. This version of the XPath language is mostly identical to
XPath 2.0. XPath rules by default use now <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/rule/xpath/XPathVersion.html#XPATH_3_1"><code>XPATH_3_1</code></a>.</li>
</ul>
</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.lang.rule.AbstractDelegateRule</code> removed. It has been merged with <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/rule/RuleReference.html#"><code>RuleReference</code></a>.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/rule/AbstractRule.html#"><code>net.sourceforge.pmd.lang.rule.AbstractRule</code></a> - the following methods have been removed:
<ul>
<li><code class="language-plaintext highlighter-rouge">deepCopyValuesTo(AbstractRule)</code> - use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/rule/AbstractRule.html#deepCopy()"><code>deepCopy</code></a> instead.</li>
<li><code class="language-plaintext highlighter-rouge">addRuleChainVisit(Class)</code> - override <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/rule/AbstractRule.html#buildTargetSelector()"><code>buildTargetSelector</code></a> in order to register nodes for rule chain visits.</li>
<li><code class="language-plaintext highlighter-rouge">addViolation(...)</code> - use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/RuleContext.html#addViolation(net.sourceforge.pmd.lang.ast.Node)"><code>addViolation</code></a> instead, e.g. via <code class="language-plaintext highlighter-rouge">asCtx(data).addViolation(...)</code>.
Note: These methods were only marked as deprected in javadoc.</li>
<li><code class="language-plaintext highlighter-rouge">addViolationWithMessage(...)</code> - use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/RuleContext.html#addViolationWithMessage(net.sourceforge.pmd.lang.ast.Node,java.lang.String)"><code>addViolationWithMessage</code></a> instead, e.g. via
<code class="language-plaintext highlighter-rouge">asCtx(data).addViolationWithMessage(...)</code>. Note: These methods were only marked as deprected in javadoc.</li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/rule/RuleReference.html#"><code>net.sourceforge.pmd.lang.rule.RuleReference</code></a> - the following methods have been removed:
<ul>
<li><code class="language-plaintext highlighter-rouge">setRuleSetReference(RuleSetReference)</code> - without replacement. Just construct new <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/rule/RuleReference.html#"><code>RuleReference</code></a> instead.</li>
<li><code class="language-plaintext highlighter-rouge">hasOverriddenProperty(PropertyDescriptor)</code> - use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/rule/RuleReference.html#isPropertyOverridden(net.sourceforge.pmd.properties.PropertyDescriptor)"><code>isPropertyOverridden</code></a> instead.</li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/rule/XPathRule.html#"><code>net.sourceforge.pmd.lang.rule.XPathRule</code></a>
<ul>
<li>The constant <code class="language-plaintext highlighter-rouge">XPATH_DESCRIPTOR</code> has been made private and is not accessible anymore.</li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/Language.html#"><code>net.sourceforge.pmd.lang.Language</code></a> - method <code class="language-plaintext highlighter-rouge">getTerseName()</code> removed. Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/Language.html#getId()"><code>getId</code></a> instead.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/LanguageModuleBase.html#"><code>net.sourceforge.pmd.lang.LanguageModuleBase</code></a> - method <code class="language-plaintext highlighter-rouge">getTerseName()</code> removed. Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/LanguageModuleBase.html#getId()"><code>getId</code></a> instead.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/LanguageRegistry.html#"><code>net.sourceforge.pmd.lang.LanguageRegistry</code></a> - the following methods have been removed:
<ul>
<li><code class="language-plaintext highlighter-rouge">getLanguage(String)</code> - use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/LanguageRegistry.getLanguageByFullName.html#"><code>LanguageRegistry.getLanguageByFullName</code></a>
via <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/LanguageRegistry.html#PMD"><code>PMD</code></a> or <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/LanguageRegistry.html#CPD"><code>CPD</code></a> instead.</li>
<li><code class="language-plaintext highlighter-rouge">findLanguageByTerseName(String)</code> - use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/LanguageRegistry.html#getLanguageById(java.lang.String)"><code>getLanguageById</code></a>
via <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/LanguageRegistry.html#PMD"><code>PMD</code></a> or <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/LanguageRegistry.html#CPD"><code>CPD</code></a> instead.</li>
<li><code class="language-plaintext highlighter-rouge">findByExtension(String)</code> - removed without replacement.</li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/LanguageVersionDiscoverer.html#"><code>net.sourceforge.pmd.lang.LanguageVersionDiscoverer</code></a> - method <code class="language-plaintext highlighter-rouge">getLanguagesForFile(java.io.File)</code> removed.
Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/LanguageVersionDiscoverer.html#getLanguagesForFile(java.lang.String)"><code>getLanguagesForFile</code></a> instead.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/properties/AbstractPropertySource.html#"><code>net.sourceforge.pmd.properties.AbstractPropertySource</code></a>
<ul>
<li>field <code class="language-plaintext highlighter-rouge">propertyDescriptors</code> has been made private and is not accessible anymore.
Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/properties/AbstractPropertySource.html#getPropertyDescriptors()"><code>getPropertyDescriptors</code></a> instead.</li>
<li>field <code class="language-plaintext highlighter-rouge">propertyValuesByDescriptor</code> has been made private and is not accessible anymore.
Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/properties/AbstractPropertySource.html#getPropertiesByPropertyDescriptor()"><code>getPropertiesByPropertyDescriptor</code></a>
or <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/properties/AbstractPropertySource.html#getOverriddenPropertiesByPropertyDescriptor()"><code>getOverriddenPropertiesByPropertyDescriptor</code></a> instead.</li>
<li>method <code class="language-plaintext highlighter-rouge">copyPropertyDescriptors()</code> has been removed. Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/properties/AbstractPropertySource.html#getPropertyDescriptors()"><code>getPropertyDescriptors</code></a> instead.</li>
<li>method <code class="language-plaintext highlighter-rouge">copyPropertyValues()</code> has been removed. Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/properties/AbstractPropertySource.html#getPropertiesByPropertyDescriptor()"><code>getPropertiesByPropertyDescriptor</code></a>
or <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/properties/AbstractPropertySource.html#getOverriddenPropertiesByPropertyDescriptor()"><code>getOverriddenPropertiesByPropertyDescriptor</code></a> instead.</li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/reporting/Reportable.html#"><code>net.sourceforge.pmd.reporting.Reportable</code></a> - the following methods have been removed. Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/reporting/Reportable.html#getReportLocation()"><code>getReportLocation</code></a> instead
<ul>
<li><code class="language-plaintext highlighter-rouge">getBeginLine()</code></li>
<li><code class="language-plaintext highlighter-rouge">getBeginColumn()</code></li>
<li><code class="language-plaintext highlighter-rouge">getEndLine()</code></li>
<li><code class="language-plaintext highlighter-rouge">getEndColumn()</code></li>
</ul>
</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.util.datasource.DataSource</code> - use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/document/TextFile.html#"><code>TextFile</code></a> instead.</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.util.datasource.FileDataSource</code></li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.util.datasource.ReaderDataSource</code></li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.util.datasource.ZipDataSource</code></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/util/CollectionUtil.html#"><code>net.sourceforge.pmd.util.CollectionUtil</code></a>
<ul>
<li>method <code class="language-plaintext highlighter-rouge">invertedMapFrom(...)</code> has been removed.</li>
<li>method <code class="language-plaintext highlighter-rouge">mapFrom(...)</code> has been removed.</li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/AbstractConfiguration.html#"><code>net.sourceforge.pmd.AbstractConfiguration</code></a> - the following methods have been removed:
<ul>
<li><code class="language-plaintext highlighter-rouge">setIgnoreFilePath(String)</code> - use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/AbstractConfiguration.html#setIgnoreFilePath(java.nio.file.Path)"><code>setIgnoreFilePath</code></a> instead.</li>
<li><code class="language-plaintext highlighter-rouge">setInputFilePath(String)</code> - use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/AbstractConfiguration.html#setInputFilePath(java.nio.file.Path)"><code>setInputFilePath</code></a> instead.</li>
<li><code class="language-plaintext highlighter-rouge">setInputPaths(String)</code> - use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/AbstractConfiguration.html#setInputPathList(java.util.List)"><code>setInputPathList</code></a> or
<a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/AbstractConfiguration.html#addInputPath(java.nio.file.Path)"><code>addInputPath</code></a> instead.</li>
<li><code class="language-plaintext highlighter-rouge">setInputUri(String)</code> - use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/AbstractConfiguration.html#setInputUri(java.net.URI)"><code>setInputUri</code></a> instead.</li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/PMDConfiguration.html#"><code>net.sourceforge.pmd.PMDConfiguration</code></a> - the following methods have been removed
<ul>
<li><code class="language-plaintext highlighter-rouge">prependClasspath(String)</code> - use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/PMDConfiguration.html#prependAuxClasspath(java.lang.String)"><code>prependAuxClasspath</code></a> instead.</li>
<li><code class="language-plaintext highlighter-rouge">getRuleSets()</code> - use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/PMDConfiguration.html#getRuleSetPaths()"><code>getRuleSetPaths</code></a> instead.</li>
<li><code class="language-plaintext highlighter-rouge">setRuleSets(String)</code> - use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/PMDConfiguration.html#setRuleSets(java.util.List)"><code>setRuleSets</code></a> or
<a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/PMDConfiguration.html#addRuleSet(java.lang.String)"><code>addRuleSet</code></a> instead.</li>
<li><code class="language-plaintext highlighter-rouge">setReportFile(String)</code> - use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/PMDConfiguration.html#setReportFile(java.nio.file.Path)"><code>setReportFile</code></a> instead.</li>
<li><code class="language-plaintext highlighter-rouge">getReportFile()</code> - use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/PMDConfiguration.html#getReportFilePath()"><code>getReportFilePath</code></a> instead.</li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/Report.html#"><code>net.sourceforge.pmd.Report</code></a> - method <code class="language-plaintext highlighter-rouge">merge(Report)</code> has been removed. Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/Report.html#union(net.sourceforge.pmd.Report)"><code>union</code></a> instead.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/RuleSetLoader.html#"><code>net.sourceforge.pmd.RuleSetLoader</code></a> - method <code class="language-plaintext highlighter-rouge">toFactory()</code> has been made package private and is not accessible anymore.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/RuleViolation.html#"><code>net.sourceforge.pmd.RuleViolation</code></a> - the following methods have been removed:
<ul>
<li><code class="language-plaintext highlighter-rouge">getPackageName()</code> - use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/RuleViolation.html#getAdditionalInfo()"><code>getAdditionalInfo</code></a> with <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/RuleViolation.html#PACKAGE_NAME"><code>PACKAGE_NAME</code></a> instead, e.g. <code class="language-plaintext highlighter-rouge">getAdditionalInfo().get(PACKAGE_NAME)</code>.</li>
<li><code class="language-plaintext highlighter-rouge">getClassName()</code> - use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/RuleViolation.html#getAdditionalInfo()"><code>getAdditionalInfo</code></a> with <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/RuleViolation.html#CLASS_NAME"><code>CLASS_NAME</code></a> instead, e.g. <code class="language-plaintext highlighter-rouge">getAdditionalInfo().get(CLASS_NAME)</code>.</li>
<li><code class="language-plaintext highlighter-rouge">getMethodName()</code> - use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/RuleViolation.html#getAdditionalInfo()"><code>getAdditionalInfo</code></a> with <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/RuleViolation.html#METHOD_NAME"><code>METHOD_NAME</code></a> instead, e.g. <code class="language-plaintext highlighter-rouge">getAdditionalInfo().get(METHOD_NAME)</code>.</li>
<li><code class="language-plaintext highlighter-rouge">getVariableName()</code> - use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/RuleViolation.html#getAdditionalInfo()"><code>getAdditionalInfo</code></a> with <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/RuleViolation.html#VARIABLE_NAME"><code>VARIABLE_NAME</code></a> instead, e.g. <code class="language-plaintext highlighter-rouge">getAdditionalInfo().get(VARIABLE_NAME)</code>.</li>
</ul>
</li>
</ul>
</li>
<li>pmd-apex
<ul>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-apex/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/apex/ast/ApexNode.html#"><code>ApexNode</code></a> and <a href="https://docs.pmd-code.org/apidocs/pmd-apex/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/apex/ast/ASTApexFile.html#"><code>ASTApexFile</code></a>
<ul>
<li>
<p><code class="language-plaintext highlighter-rouge">#getApexVersion()</code>: In PMD 6, this method has been deprecated but was defined in the class <code class="language-plaintext highlighter-rouge">ApexRootNode</code>.
The version returned is always “Version.CURRENT”, as the apex compiler integration
doesnt use additional information which Apex version actually is used. Therefore, this method cant be
used to determine the Apex version of the project that is being analyzed.</p>
<p>If the current version is needed, then <code class="language-plaintext highlighter-rouge">Node.getTextDocument().getLanguageVersion()</code> can be used. This
is the version that has been selected via CLI <code class="language-plaintext highlighter-rouge">--use-version</code> parameter.</p>
</li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-apex/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/apex/ast/ApexNode.html#"><code>net.sourceforge.pmd.lang.apex.ast.ApexNode</code></a>
<ul>
<li>method <code class="language-plaintext highlighter-rouge">jjtAccept()</code> has been removed.
Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/Node.html#acceptVisitor(net.sourceforge.pmd.lang.ast.AstVisitor,P)"><code>acceptVisitor</code></a> instead.</li>
<li>method <code class="language-plaintext highlighter-rouge">getNode()</code> has been removed. The underlying node is only available in AST nodes, but not in rule implementations.</li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-apex/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/apex/ast/AbstractApexNode.html#"><code>net.sourceforge.pmd.lang.apex.ast.AbstractApexNode</code></a> - method <code class="language-plaintext highlighter-rouge">getNode()</code> is now package private.
AST nodes still have access to the underlying Jorje node via the protected property <code class="language-plaintext highlighter-rouge">node</code>.</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.lang.apex.ast.ApexParserVisitor</code>
Use <a href="https://docs.pmd-code.org/apidocs/pmd-apex/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/apex/ast/ApexVisitor.html#"><code>ApexVisitor</code></a> or <a href="https://docs.pmd-code.org/apidocs/pmd-apex/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/apex/ast/ApexVisitorBase.html#"><code>ApexVisitorBase</code></a> instead.</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.lang.apex.ast.ApexParserVisitorAdapter</code></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-apex/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/apex/ast/ASTAssignmentExpression.html#"><code>net.sourceforge.pmd.lang.apex.ast.ASTAssignmentExpression</code></a> - method <code class="language-plaintext highlighter-rouge">getOperator()</code> removed.
Use <a href="https://docs.pmd-code.org/apidocs/pmd-apex/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/apex/ast/ASTAssignmentExpression.html#getOp()"><code>getOp</code></a> instead.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-apex/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/apex/ast/ASTBinaryExpression.html#"><code>net.sourceforge.pmd.lang.apex.ast.ASTBinaryExpression</code></a> - method <code class="language-plaintext highlighter-rouge">getOperator()</code> removed.
Use <a href="https://docs.pmd-code.org/apidocs/pmd-apex/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/apex/ast/ASTBinaryExpression.html#getOp()"><code>getOp</code></a> instead.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-apex/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/apex/ast/ASTBooleanExpression.html#"><code>net.sourceforge.pmd.lang.apex.ast.ASTBooleanExpression</code></a> - method <code class="language-plaintext highlighter-rouge">getOperator()</code> removed.
Use <a href="https://docs.pmd-code.org/apidocs/pmd-apex/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/apex/ast/ASTBooleanExpression.html#getOp()"><code>getOp</code></a> instead.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-apex/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/apex/ast/ASTPostfixExpression.html#"><code>net.sourceforge.pmd.lang.apex.ast.ASTPostfixExpression</code></a> - method <code class="language-plaintext highlighter-rouge">getOperator()</code> removed.
Use <a href="https://docs.pmd-code.org/apidocs/pmd-apex/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/apex/ast/ASTPostfixExpression.html#getOp()"><code>getOp</code></a> instead.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-apex/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/apex/ast/ASTPrefixExpression.html#"><code>net.sourceforge.pmd.lang.apex.ast.ASTPrefixExpression</code></a> - method <code class="language-plaintext highlighter-rouge">getOperator()</code> removed.
Use <a href="https://docs.pmd-code.org/apidocs/pmd-apex/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/apex/ast/ASTPrefixExpression.html#getOp()"><code>getOp</code></a> instead.</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.lang.apex.rule.security.Helper</code> removed. This was actually internal API.</li>
</ul>
</li>
<li>pmd-java
<ul>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/AbstractPackageNameModuleDirective.html#"><code>net.sourceforge.pmd.lang.java.ast.AbstractPackageNameModuleDirective</code></a> - method <code class="language-plaintext highlighter-rouge">getImage()</code> has been removed.
Use <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/AbstractPackageNameModuleDirective.html#getPackageName()"><code>getPackageName</code></a> instead.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/AbstractTypeDeclaration.html#"><code>net.sourceforge.pmd.lang.java.ast.AbstractTypeDeclaration</code></a> - method <code class="language-plaintext highlighter-rouge">getImage()</code> has been removed.
Use <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/AbstractTypeDeclaration.html#getSimpleName()"><code>getSimpleName</code></a> instead.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ASTAnnotation.html#"><code>net.sourceforge.pmd.lang.java.ast.ASTAnnotation</code></a> - method <code class="language-plaintext highlighter-rouge">getAnnotationName()</code> has been removed.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ASTClassType.html#"><code>net.sourceforge.pmd.lang.java.ast.ASTClassType</code></a>
<ul>
<li>constructor <code class="language-plaintext highlighter-rouge">ASTClassType(java.lang.String)</code> has been removed.</li>
<li>method <code class="language-plaintext highlighter-rouge">getImage()</code> has been removed.</li>
<li>method <code class="language-plaintext highlighter-rouge">isReferenceToClassSameCompilationUnit()</code> has been removed.</li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ASTFieldDeclaration.html#"><code>net.sourceforge.pmd.lang.java.ast.ASTFieldDeclaration</code></a> - method <code class="language-plaintext highlighter-rouge">getVariableName()</code> has been removed.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ASTLiteral.html#"><code>net.sourceforge.pmd.lang.java.ast.ASTLiteral</code></a> - the following methods have been removed:
<ul>
<li><code class="language-plaintext highlighter-rouge">isStringLiteral()</code> - use <code class="language-plaintext highlighter-rouge">node instanceof ASTStringLiteral</code> instead.</li>
<li><code class="language-plaintext highlighter-rouge">isCharLiteral()</code> - use <code class="language-plaintext highlighter-rouge">node instanceof ASTCharLiteral</code> instead.</li>
<li><code class="language-plaintext highlighter-rouge">isNullLiteral()</code> - use <code class="language-plaintext highlighter-rouge">node instanceof ASTNullLiteral</code> instead.</li>
<li><code class="language-plaintext highlighter-rouge">isBooleanLiteral()</code> - use <code class="language-plaintext highlighter-rouge">node instanceof ASTBooleanLiteral</code> instead.</li>
<li><code class="language-plaintext highlighter-rouge">isNumericLiteral()</code> - use <code class="language-plaintext highlighter-rouge">node instanceof ASTNumericLiteral</code> instead.</li>
<li><code class="language-plaintext highlighter-rouge">isIntLiteral()</code> - use <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ASTNumericLiteral.html#isIntLiteral()"><code>isIntLiteral</code></a> instead.</li>
<li><code class="language-plaintext highlighter-rouge">isLongLiteral()</code> - use <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ASTNumericLiteral.html#isLongLiteral()"><code>isLongLiteral</code></a> instead.</li>
<li><code class="language-plaintext highlighter-rouge">isFloatLiteral()</code> - use <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ASTNumericLiteral.html#isFloatLiteral()"><code>isFloatLiteral</code></a> instead.</li>
<li><code class="language-plaintext highlighter-rouge">isDoubleLiteral()</code> - use <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ASTNumericLiteral.html#isDoubleLiteral()"><code>isDoubleLiteral</code></a> instead.</li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ASTMethodDeclaration.html#"><code>net.sourceforge.pmd.lang.java.ast.ASTMethodDeclaration</code></a> - methods <code class="language-plaintext highlighter-rouge">getImage()</code> and <code class="language-plaintext highlighter-rouge">getMethodName()</code> have been removed.
Use <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ASTMethodDeclaration.html#getName()"><code>getName</code></a> instead.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ASTMethodReference.html#"><code>net.sourceforge.pmd.lang.java.ast.ASTMethodReference</code></a> - method <code class="language-plaintext highlighter-rouge">getImage()</code> has been removed.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ASTModuleName.html#"><code>net.sourceforge.pmd.lang.java.ast.ASTModuleName</code></a> - method <code class="language-plaintext highlighter-rouge">getImage()</code> has been removed.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ASTPrimitiveType.html#"><code>net.sourceforge.pmd.lang.java.ast.ASTPrimitiveType</code></a> - method <code class="language-plaintext highlighter-rouge">getImage()</code> has been removed.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ASTType.html#"><code>net.sourceforge.pmd.lang.java.ast.ASTType</code></a>
<ul>
<li><code class="language-plaintext highlighter-rouge">getTypeImage()</code> has been removed.</li>
<li><code class="language-plaintext highlighter-rouge">getArrayDepth()</code> has been removed. Its only available for arrays: <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ASTArrayType.html#getArrayDepth()"><code>getArrayDepth</code></a>.</li>
<li><code class="language-plaintext highlighter-rouge">isPrimitiveType()</code> - use <code class="language-plaintext highlighter-rouge">node instanceof ASTPrimitiveType</code> instead.</li>
<li><code class="language-plaintext highlighter-rouge">isArrayType()</code> - use <code class="language-plaintext highlighter-rouge">node instanceof ASTArrayType</code> instead.</li>
<li><code class="language-plaintext highlighter-rouge">isClassOrInterfaceType()</code> - use <code class="language-plaintext highlighter-rouge">node instanceof ASTClassType</code> instead.</li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ASTTypeDeclaration.html#"><code>net.sourceforge.pmd.lang.java.ast.ASTTypeDeclaration</code></a> - method <code class="language-plaintext highlighter-rouge">getImage()</code> has been removed.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ASTUnaryExpression.html#"><code>net.sourceforge.pmd.lang.java.ast.ASTUnaryExpression</code></a> - method <code class="language-plaintext highlighter-rouge">isPrefix()</code> has been removed.
Use <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ASTUnaryExpression.html#getOperator()"><code>getOperator</code></a><code class="language-plaintext highlighter-rouge">.isPrefix()</code> instead.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ASTVariableId.html#"><code>net.sourceforge.pmd.lang.java.ast.ASTVariableId</code></a> - methods <code class="language-plaintext highlighter-rouge">getImage()</code> and <code class="language-plaintext highlighter-rouge">getVariableName()</code> have been removed.
Use <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ASTVariableId.html#getName()"><code>getName</code></a> instead.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/JavaComment.html#"><code>net.sourceforge.pmd.lang.java.ast.JavaComment</code></a> - method <code class="language-plaintext highlighter-rouge">getImage()</code> has been removed.
Use <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/JavaComment.html#getText()"><code>getText</code></a> instead.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/JavaNode.html#"><code>net.sourceforge.pmd.lang.java.ast.JavaNode</code></a> - method <code class="language-plaintext highlighter-rouge">jjtAccept()</code> has been removed.
Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/Node.html#acceptVisitor(net.sourceforge.pmd.lang.ast.AstVisitor,P)"><code>acceptVisitor</code></a> instead.</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.lang.java.ast.JavaParserVisitor</code>
Use <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/JavaVisitor.html#"><code>JavaVisitor</code></a> or <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/JavaVisitorBase.html#"><code>JavaVisitorBase</code></a> instead.</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.lang.java.ast.JavaParserVisitorAdapter</code></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ModifierOwner.html#"><code>net.sourceforge.pmd.lang.java.ast.ModifierOwner</code></a>
<ul>
<li><code class="language-plaintext highlighter-rouge">isFinal()</code> - This is still available in various subtypes, where it makes sense, e.g. <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ASTLocalVariableDeclaration.html#isFinal()"><code>isFinal</code></a>.</li>
<li><code class="language-plaintext highlighter-rouge">isAbstract()</code> - This is still available in subtypes, e.g. <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ASTTypeDeclaration.html#isAbstract()"><code>isAbstract</code></a>.</li>
<li><code class="language-plaintext highlighter-rouge">isStrictfp()</code> - Use <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ModifierOwner.html#hasModifiers(net.sourceforge.pmd.lang.java.ast.JModifier,net.sourceforge.pmd.lang.java.ast.JModifier...)"><code>hasModifiers</code></a> instead, e.g. <code class="language-plaintext highlighter-rouge">hasModifiers(STRICTFP)</code>.</li>
<li><code class="language-plaintext highlighter-rouge">isSynchronized()</code> - Use <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ModifierOwner.html#hasModifiers(net.sourceforge.pmd.lang.java.ast.JModifier,net.sourceforge.pmd.lang.java.ast.JModifier...)"><code>hasModifiers</code></a> instead, e.g. <code class="language-plaintext highlighter-rouge">hasModifiers(SYNCHRONIZED)</code>.</li>
<li><code class="language-plaintext highlighter-rouge">isNative()</code> - Use <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ModifierOwner.html#hasModifiers(net.sourceforge.pmd.lang.java.ast.JModifier,net.sourceforge.pmd.lang.java.ast.JModifier...)"><code>hasModifiers</code></a> instead, e.g. <code class="language-plaintext highlighter-rouge">hasModifiers(NATIVE)</code>.</li>
<li><code class="language-plaintext highlighter-rouge">isStatic()</code> - This is still available in subtypes, e.g. <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ASTMethodDeclaration.html#isStatic()"><code>isStatic</code></a>.</li>
<li><code class="language-plaintext highlighter-rouge">isVolatile()</code> - Use <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ModifierOwner.html#hasModifiers(net.sourceforge.pmd.lang.java.ast.JModifier,net.sourceforge.pmd.lang.java.ast.JModifier...)"><code>hasModifiers</code></a> instead, e.g. <code class="language-plaintext highlighter-rouge">hasModifiers(VOLATILE)</code>.</li>
<li><code class="language-plaintext highlighter-rouge">isTransient()</code> - Use <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ModifierOwner.html#hasModifiers(net.sourceforge.pmd.lang.java.ast.JModifier,net.sourceforge.pmd.lang.java.ast.JModifier...)"><code>hasModifiers</code></a> instead, e.g. <code class="language-plaintext highlighter-rouge">hasModifiers(TRANSIENT)</code>.</li>
<li><code class="language-plaintext highlighter-rouge">isPrivate()</code> - Use <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ModifierOwner.html#getVisibility()"><code>getVisibility</code></a> instead, e.g. <code class="language-plaintext highlighter-rouge">getVisibility() == Visibility.V_PRIVATE</code>.</li>
<li><code class="language-plaintext highlighter-rouge">isPublic()</code> - Use <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ModifierOwner.html#getVisibility()"><code>getVisibility</code></a> instead, e.g. <code class="language-plaintext highlighter-rouge">getVisibility() == Visibility.V_PUBLIC</code>.</li>
<li><code class="language-plaintext highlighter-rouge">isProtected()</code> - Use <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ModifierOwner.html#getVisibility()"><code>getVisibility</code></a> instead, e.g. <code class="language-plaintext highlighter-rouge">getVisibility() == Visibility.V_PROTECTED</code>.</li>
<li><code class="language-plaintext highlighter-rouge">isPackagePrivate()</code> - Use <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ModifierOwner.html#getVisibility()"><code>getVisibility</code></a> instead, e.g. <code class="language-plaintext highlighter-rouge">getVisibility() == Visibility.V_PACKAGE</code>.</li>
<li><code class="language-plaintext highlighter-rouge">isSyntacticallyAbstract()</code> - Use <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ModifierOwner.html#hasExplicitModifiers(net.sourceforge.pmd.lang.java.ast.JModifier,net.sourceforge.pmd.lang.java.ast.JModifier...)"><code>hasExplicitModifiers</code></a> instead, e.g. <code class="language-plaintext highlighter-rouge">hasExplicitModifiers(ABSTRACT)</code>.</li>
<li><code class="language-plaintext highlighter-rouge">isSyntacticallyPublic()</code> - Use <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ModifierOwner.html#hasExplicitModifiers(net.sourceforge.pmd.lang.java.ast.JModifier,net.sourceforge.pmd.lang.java.ast.JModifier...)"><code>hasExplicitModifiers</code></a> instead, e.g. <code class="language-plaintext highlighter-rouge">hasExplicitModifiers(PUBLIC)</code>.</li>
<li><code class="language-plaintext highlighter-rouge">isSyntacticallyStatic()</code> - Use <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ModifierOwner.html#hasExplicitModifiers(net.sourceforge.pmd.lang.java.ast.JModifier,net.sourceforge.pmd.lang.java.ast.JModifier...)"><code>hasExplicitModifiers</code></a> instead, e.g. <code class="language-plaintext highlighter-rouge">hasExplicitModifiers(STATIC)</code>.</li>
<li><code class="language-plaintext highlighter-rouge">isSyntacticallyFinal()</code> - Use <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ModifierOwner.html#hasExplicitModifiers(net.sourceforge.pmd.lang.java.ast.JModifier,net.sourceforge.pmd.lang.java.ast.JModifier...)"><code>hasExplicitModifiers</code></a> instead, e.g. <code class="language-plaintext highlighter-rouge">hasExplicitModifiers(FINAL)</code>.</li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/TypeNode.html#"><code>net.sourceforge.pmd.lang.java.ast.TypeNode</code></a> - method <code class="language-plaintext highlighter-rouge">getType()</code> has been removed. Use <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/TypeNode.html#getTypeMirror()"><code>getTypeMirror</code></a> instead.</li>
</ul>
</li>
<li>pmd-javascript
<ul>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-javascript/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ecmascript/ast/AbstractEcmascriptNode.html#"><code>AbstractEcmascriptNode</code></a> - method <code class="language-plaintext highlighter-rouge">getNode()</code> has been removed.
AST nodes still have access to the underlying Rhino node via the protected property <code class="language-plaintext highlighter-rouge">node</code>.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-javascript/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ecmascript/ast/ASTFunctionNode.html#"><code>ASTFunctionNode</code></a> - method <code class="language-plaintext highlighter-rouge">getBody(int)</code> removed.
Use <a href="https://docs.pmd-code.org/apidocs/pmd-javascript/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ecmascript/ast/ASTFunctionNode.html#getBody()"><code>getBody</code></a> instead.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-javascript/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ecmascript/ast/ASTTryStatement.html#"><code>ASTTryStatement</code></a>
<ul>
<li>method <code class="language-plaintext highlighter-rouge">isCatch()</code> has been removed. Use <a href="https://docs.pmd-code.org/apidocs/pmd-javascript/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ecmascript/ast/ASTTryStatement.html#hasCatch()"><code>hasCatch</code></a> instead.</li>
<li>method <code class="language-plaintext highlighter-rouge">isFinally()</code> has been removed. USe <a href="https://docs.pmd-code.org/apidocs/pmd-javascript/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ecmascript/ast/ASTTryStatement.html#hasFinally()"><code>hasFinally</code></a> instead.</li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-javascript/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ecmascript/ast/EcmascriptNode.html#"><code>EcmascriptNode</code></a>
<ul>
<li>method <code class="language-plaintext highlighter-rouge">jjtAccept()</code> has been removed. Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/Node.html#acceptVisitor(net.sourceforge.pmd.lang.ast.AstVisitor,P)"><code>acceptVisitor</code></a> instead.</li>
<li>method <code class="language-plaintext highlighter-rouge">getNode()</code> has been removed. The underlying node is only available in AST nodes, but not in rule implementations.</li>
</ul>
</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.lang.ecmascript.ast.EcmascriptParserVisitor</code>
Use <a href="https://docs.pmd-code.org/apidocs/pmd-javascript/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ecmascript/ast/EcmascriptVisitor.html#"><code>EcmascriptVisitor</code></a> or <a href="https://docs.pmd-code.org/apidocs/pmd-javascript/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ecmascript/ast/EcmascriptVisitorBase.html#"><code>EcmascriptVisitorBase</code></a> instead.</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.lang.ecmascript.ast.EcmascriptParserVisitorAdapter</code></li>
</ul>
</li>
<li>pmd-jsp
<ul>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.lang.jsp.ast.JspParserVisitor</code>
Use <a href="https://docs.pmd-code.org/apidocs/pmd-jsp/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/jsp/ast/JspVisitor.html#"><code>JspVisitor</code></a> or <a href="https://docs.pmd-code.org/apidocs/pmd-jsp/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/jsp/ast/JspVisitorBase.html#"><code>JspVisitorBase</code></a> instead.</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.lang.jsp.ast.JspParserVisitorAdapter</code></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-jsp/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/jsp/ast/JspNode.html#"><code>net.sourceforge.pmd.lang.jsp.ast.JspNode</code></a> - method <code class="language-plaintext highlighter-rouge">jjtAccept()</code> has been removed.
Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/Node.html#acceptVisitor(net.sourceforge.pmd.lang.ast.AstVisitor,P)"><code>acceptVisitor</code></a> instead.</li>
</ul>
</li>
<li>pmd-modelica
<ul>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.lang.modelica.ast.ModelicaParserVisitor</code>
Use <a href="https://docs.pmd-code.org/apidocs/pmd-modelica/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/modelica/ast/ModelicaVisitor.html#"><code>ModelicaVisitor</code></a> or <a href="https://docs.pmd-code.org/apidocs/pmd-modelica/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/modelica/ast/ModelicaVisitorBase.html#"><code>ModelicaVisitorBase</code></a> instead.</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.lang.modelica.ast.ModelicaParserVisitorAdapter</code></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-modelica/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/modelica/ast/ModelicaNode.html#"><code>net.sourceforge.pmd.lang.modelica.ast.ModelicaNode</code></a> - method <code class="language-plaintext highlighter-rouge">jjtAccept()</code> has been removed.
Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/Node.html#acceptVisitor(net.sourceforge.pmd.lang.ast.AstVisitor,P)"><code>acceptVisitor</code></a> instead.</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.lang.modelica.rule.AmbiguousResolutionRule</code>
Use <a href="https://docs.pmd-code.org/apidocs/pmd-modelica/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/modelica/rule/bestpractices/AmbiguousResolutionRule.html#"><code>AmbiguousResolutionRule</code></a> instead.</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.lang.modelica.rule.ConnectUsingNonConnector</code>
Use <a href="https://docs.pmd-code.org/apidocs/pmd-modelica/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/modelica/rule/bestpractices/ConnectUsingNonConnectorRule.html#"><code>ConnectUsingNonConnectorRule</code></a></li>
</ul>
</li>
<li>pmd-plsql
<ul>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.lang.plsql.ast.PLSQLParserVisitor</code>
Use <a href="https://docs.pmd-code.org/apidocs/pmd-plsql/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/plsql/ast/PlsqlVisitor.html#"><code>PlsqlVisitor</code></a> or <a href="https://docs.pmd-code.org/apidocs/pmd-plsql/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/plsql/ast/PlsqlVisitorBase.html#"><code>PlsqlVisitorBase</code></a> instead.</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.lang.plsql.ast.PLSQLParserVisitorAdapter</code></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-plsql/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/plsql/ast/PLSQLNode.html#"><code>net.sourceforge.pmd.lang.plsql.ast.PLSQLNode</code></a> - method <code class="language-plaintext highlighter-rouge">jjtAccept()</code> has been removed.
Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/Node.html#acceptVisitor(net.sourceforge.pmd.lang.ast.AstVisitor,P)"><code>acceptVisitor</code></a> instead.</li>
</ul>
</li>
<li>pmd-scala
<ul>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-scala_2.13/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/scala/ast/ScalaNode.html#"><code>net.sourceforge.pmd.lang.scala.ast.ScalaNode</code></a>
<ul>
<li>Method <code class="language-plaintext highlighter-rouge">accept()</code> has been removed. Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/Node.html#acceptVisitor(net.sourceforge.pmd.lang.ast.AstVisitor,P)"><code>acceptVisitor</code></a> instead.</li>
<li>Method <code class="language-plaintext highlighter-rouge">getNode()</code> has been removed. The underlying node is only available in AST nodes, but not in rule implementations.</li>
</ul>
</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-scala_2.13/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/scala/ast/AbstractScalaNode.html#"><code>net.sourceforge.pmd.lang.scala.ast.AbstractScalaNode</code></a> - method <code class="language-plaintext highlighter-rouge">getNode()</code> has been removed. AST nodes still have access
to the underlying Scala node via the protected property <code class="language-plaintext highlighter-rouge">node</code>.</li>
</ul>
</li>
<li>pmd-visualforce
<ul>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-visualforce/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/vf/ast/VfNode.html#"><code>net.sourceforge.pmd.lang.vf.ast.VfNode</code></a> - method <code class="language-plaintext highlighter-rouge">jjtAccept()</code> has been removed.
Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/Node.html#acceptVisitor(net.sourceforge.pmd.lang.ast.AstVisitor,P)"><code>acceptVisitor</code></a> instead.</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.lang.vf.ast.VfParserVisitor</code>
Use <a href="https://docs.pmd-code.org/apidocs/pmd-visualforce/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/vf/ast/VfVisitor.html#"><code>VfVisitor</code></a> or <a href="https://docs.pmd-code.org/apidocs/pmd-visualforce/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/vf/ast/VfVisitorBase.html#"><code>VfVisitorBase</code></a> instead.</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.lang.vf.ast.VfParserVisitorAdapter</code></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-visualforce/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/vf/DataType.html#"><code>net.sourceforge.pmd.lang.vf.DataType</code></a> - method <code class="language-plaintext highlighter-rouge">fromBasicType(BasicType)</code> has been removed.
Use <a href="https://docs.pmd-code.org/apidocs/pmd-visualforce/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/vf/DataType.html#fromTypeName(java.lang.String)"><code>fromTypeName</code></a> instead.</li>
</ul>
</li>
<li>pmd-vm
<ul>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-vm/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/vm/ast/VmNode.html#"><code>net.sourceforge.pmd.lang.vm.ast.VmNode</code></a> - method <code class="language-plaintext highlighter-rouge">jjtAccept()</code> has been removed.
Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/Node.html#acceptVisitor(net.sourceforge.pmd.lang.ast.AstVisitor,P)"><code>acceptVisitor</code></a> instead.</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.lang.vm.ast.VmParserVisitor</code>
Use <a href="https://docs.pmd-code.org/apidocs/pmd-vm/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/vm/ast/VmVisitor.html#"><code>VmVisitor</code></a> or <a href="https://docs.pmd-code.org/apidocs/pmd-vm/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/vm/ast/VmVisitorBase.html#"><code>VmVisitorBase</code></a> instead.</li>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.lang.vm.ast.VmParserVisitorAdapter</code></li>
</ul>
</li>
</ul>
<p><strong>Removed classes, interfaces and methods (not previously deprecated)</strong></p>
<ul>
<li>pmd-apex
<ul>
<li>The method <code class="language-plaintext highlighter-rouge">isSynthetic()</code> in <a href="https://docs.pmd-code.org/apidocs/pmd-apex/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/apex/ast/ASTMethod.html#"><code>ASTMethod</code></a> has been removed.
With the switch from Jorje to Summit AST as underlying parser, no synthetic methods are generated by the
parser anymore. This also means, that there is no XPath attribute <code class="language-plaintext highlighter-rouge">@Synthetic</code> anymore.</li>
<li>The constant <code class="language-plaintext highlighter-rouge">STATIC_INITIALIZER_METHOD_NAME</code> in <a href="https://docs.pmd-code.org/apidocs/pmd-apex/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/apex/rule/codestyle/FieldDeclarationsShouldBeAtStartRule.html#"><code>FieldDeclarationsShouldBeAtStartRule</code></a>
has been removed. It was used to filter out synthetic methods, but these are not generated anymore with the
new parser.</li>
<li>The method <code class="language-plaintext highlighter-rouge">getContext()</code> in <a href="https://docs.pmd-code.org/apidocs/pmd-apex/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/apex/ast/ASTReferenceExpression.html#"><code>ASTReferenceExpression</code></a> has been removed.
It was not used and always returned <code class="language-plaintext highlighter-rouge">null</code>.</li>
<li>The method <code class="language-plaintext highlighter-rouge">getNamespace()</code> in all AST nodes (defined in <a href="https://docs.pmd-code.org/apidocs/pmd-apex/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/apex/ast/ApexNode.html#"><code>ApexNode</code></a>) has
been removed, as it was never fully implemented. It always returned an empty string.</li>
<li>The method <code class="language-plaintext highlighter-rouge">getNameSpace()</code> in <a href="https://docs.pmd-code.org/apidocs/pmd-apex/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/apex/ast/ApexQualifiedName.html#"><code>ApexQualifiedName</code></a> has been removed.</li>
<li>The class <code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.lang.apex.ast.ASTBridgeMethodCreator</code> has been removed. This was a node that has
been generated by the old Jorje parser only.</li>
</ul>
</li>
<li>pmd-apex-jorje
<ul>
<li>With the switch from Jorje to Summit AST, this maven module is no longer needed and has been removed.</li>
</ul>
</li>
<li>pmd-core
<ul>
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.util.Predicate</code> has been removed. It was marked as Experimental before. Use
<code class="language-plaintext highlighter-rouge">java.util.function.Predicate</code> instead.</li>
</ul>
</li>
<li>pmd-java
<ul>
<li>The interface <code class="language-plaintext highlighter-rouge">FinalizableNode</code> (introduced in 7.0.0-rc1) has been removed.
Its method <code class="language-plaintext highlighter-rouge">isFinal()</code> has been moved down to the
nodes where needed, e.g. <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ASTLocalVariableDeclaration.html#isFinal()"><code>ASTLocalVariableDeclaration#isFinal</code></a>.</li>
<li>The method <code class="language-plaintext highlighter-rouge">isPackagePrivate()</code> in <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ASTClassDeclaration.html#"><code>ASTClassDeclaration</code></a> (formerly ASTClassOrInterfaceDeclaration)
has been removed.
Use <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ModifierOwner.html#hasVisibility(net.sourceforge.pmd.lang.java.ast.ModifierOwner.Visibility)"><code>hasVisibility</code></a> instead,
which can correctly differentiate between local and package private classes.</li>
</ul>
</li>
</ul>
<p><strong>Renamed classes, interfaces</strong></p>
<ul>
<li>pmd-core
<ul>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/util/log/PmdReporter.html#"><code>PmdReporter</code></a> - has been renamed from <code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.util.log.MessageReporter</code></li>
</ul>
</li>
<li>pmd-java
<ul>
<li>The interface <code class="language-plaintext highlighter-rouge">AccessNode</code> has been renamed to <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/ModifierOwner.html#"><code>ModifierOwner</code></a>. This is only relevant
for Java rules, which use that type directly e.g. through downcasting.
Or when using the XPath function <code class="language-plaintext highlighter-rouge">pmd-java:nodeIs()</code>.</li>
<li>The node <code class="language-plaintext highlighter-rouge">ASTClassOrInterfaceType</code> has been renamed to <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/ASTClassType.html#"><code>ASTClassType</code></a>. XPath rules
need to be adjusted.</li>
<li>The node <code class="language-plaintext highlighter-rouge">ASTClassOrInterfaceDeclaration</code> has been renamed to <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/ASTClassDeclaration.html#"><code>ASTClassDeclaration</code></a>.
XPath rules need to be adjusted.</li>
<li>The interface <code class="language-plaintext highlighter-rouge">ASTAnyTypeDeclaration</code> has been renamed to <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/ASTTypeDeclaration.html#"><code>ASTTypeDeclaration</code></a>.
This is only relevant for Java rules, which use that type directly, e.g. through downcasting.
Or when using the XPath function <code class="language-plaintext highlighter-rouge">pmd-java:nodeIs()</code>.</li>
<li>The interface <code class="language-plaintext highlighter-rouge">ASTMethodOrConstructorDeclaration</code> has been renamed to
<a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/ASTExecutableDeclaration.html#"><code>ASTExecutableDeclaration</code></a>. This is only relevant for Java rules, which sue that type
directly, e.g. through downcasting. Or when using the XPath function <code class="language-plaintext highlighter-rouge">pmd-java:nodeIs()</code>.</li>
<li>The node <code class="language-plaintext highlighter-rouge">ASTVariableDeclaratorId</code> has been renamed to <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/ASTVariableId.html#"><code>ASTVariableId</code></a>. XPath rules
need to be adjusted.</li>
<li>The node <code class="language-plaintext highlighter-rouge">ASTClassOrInterfaceBody</code> has been renamed to <a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/ASTClassBody.html#"><code>ASTClassBody</code></a>. XPath rules
need to be adjusted.</li>
</ul>
</li>
<li>pmd-scala
<ul>
<li>The interface <code class="language-plaintext highlighter-rouge">ScalaParserVisitor</code> has been renamed to <a href="https://docs.pmd-code.org/apidocs/pmd-scala_2.13/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/scala/ast/ScalaVisitor.html#"><code>ScalaVisitor</code></a> in order
to align the naming scheme for the different language modules.</li>
<li>The class <code class="language-plaintext highlighter-rouge">ScalaParserVisitorAdapter</code> has been renamed to <a href="https://docs.pmd-code.org/apidocs/pmd-scala_2.13/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/scala/ast/ScalaVisitorBase.html#"><code>ScalaVisitorBase</code></a> in order
to align the naming scheme for the different language modules.</li>
</ul>
</li>
</ul>
<p><strong>Renamed classes and methods</strong></p>
<ul>
<li>pmd-core
<ul>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/6.55.0/net/sourceforge/pmd/lang/ast/TokenMgrError.html#"><code>TokenMgrError</code></a> has been renamed to <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/LexException.html#"><code>LexException</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/6.55.0/net/sourceforge/pmd/cpd/Tokenizer.html#"><code>Tokenizer</code></a> has been renamed to <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/cpd/CpdLexer.html#"><code>CpdLexer</code></a>. Along with this rename,
all the implementations have been renamed as well (<code class="language-plaintext highlighter-rouge">Tokenizer</code> -&gt; <code class="language-plaintext highlighter-rouge">CpdLexer</code>), e.g. “CppCpdLexer”, “JavaCpdLexer”.
This affects all language modules.</li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/6.55.0/net/sourceforge/pmd/cpd/AnyTokenizer.html#"><code>AnyTokenizer</code></a> has been renamed to <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/cpd/AnyCpdLexer.html#"><code>AnyCpdLexer</code></a>.</li>
</ul>
</li>
</ul>
<p><strong>Classes and methods, that are not experimental anymore</strong></p>
<p>These were annotated with <code class="language-plaintext highlighter-rouge">@Experimental</code>, but can now be considered stable.</p>
<ul>
<li>pmd-apex
<ul>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-apex/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/apex/ast/ASTCommentContainer.html#"><code>net.sourceforge.pmd.lang.apex.ast.ASTCommentContainer</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-apex/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/apex/multifile/ApexMultifileAnalysis.html#"><code>net.sourceforge.pmd.lang.apex.multifile.ApexMultifileAnalysis</code></a></li>
</ul>
</li>
<li>pmd-core
<ul>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/cpd/CPDReport.html#filterMatches(java.util.function.Predicate)"><code>CPDReport#filterMatches</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/impl/antlr4/AntlrToken.getKind.html#"><code>net.sourceforge.pmd.lang.ast.impl.antlr4.AntlrToken.getKind</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/impl/javacc/AbstractJjtreeNode.html#"><code>net.sourceforge.pmd.lang.ast.impl.javacc.AbstractJjtreeNode</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/impl/TokenDocument.html#"><code>net.sourceforge.pmd.lang.ast.impl.TokenDocument</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/AstInfo.getSuppressionComments.html#"><code>net.sourceforge.pmd.lang.ast.AstInfo.getSuppressionComments</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/AstInfo.withSuppressMap.html#"><code>net.sourceforge.pmd.lang.ast.AstInfo.withSuppressMap</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/GenericToken.getKind.html#"><code>net.sourceforge.pmd.lang.ast.GenericToken.getKind</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/document/FileCollector.addZipFileWithContent.html#"><code>net.sourceforge.pmd.lang.document.FileCollector.addZipFileWithContent</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/document/package-summary.html#"><code>net.sourceforge.pmd.lang.document</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/LanguageVersionHandler.getLanguageMetricsProvider.html#"><code>net.sourceforge.pmd.lang.LanguageVersionHandler.getLanguageMetricsProvider</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/LanguageVersionHandler.getDesignerBindings.html#"><code>net.sourceforge.pmd.lang.LanguageVersionHandler.getDesignerBindings</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/PlainTextLanguage.html#"><code>net.sourceforge.pmd.lang.PlainTextLanguage</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/properties/PropertyConstraint.getXmlConstraint.html#"><code>net.sourceforge.pmd.properties.PropertyConstraint.getXmlConstraint</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/properties/PropertyConstraint.toOptionalConstraint.html#"><code>net.sourceforge.pmd.properties.PropertyConstraint.toOptionalConstraint</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/properties/PropertyConstraint.fromPredicate.html#"><code>net.sourceforge.pmd.properties.PropertyConstraint.fromPredicate</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/properties/PropertyConstraint.fromPredicate.html#"><code>net.sourceforge.pmd.properties.PropertyConstraint.fromPredicate</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/renderers/AbstractRenderer.setReportFile.html#"><code>net.sourceforge.pmd.renderers.AbstractRenderer.setReportFile</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/renderers/Renderer.setReportFile.html#"><code>net.sourceforge.pmd.renderers.Renderer.setReportFile</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/util/designerbindings/DesignerBindings.html#"><code>net.sourceforge.pmd.util.designerbindings.DesignerBindings</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/util/designerbindings/DesignerBindings.TreeIconId.html#"><code>net.sourceforge.pmd.util.designerbindings.DesignerBindings.TreeIconId</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/util/designerbindings/RelatedNodesSelector.html#"><code>net.sourceforge.pmd.util.designerbindings.RelatedNodesSelector</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/Report/filterViolations.html#"><code>net.sourceforge.pmd.Report.filterViolations</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/Report/union.html#"><code>net.sourceforge.pmd.Report.union</code></a></li>
</ul>
</li>
<li>pmd-groovy
<ul>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-groovy/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/groovy/ast/impl/antlr4/GroovyToken.getKind.html#"><code>net.sourceforge.pmd.lang.groovy.ast.impl.antlr4.GroovyToken.getKind</code></a></li>
</ul>
</li>
<li>pmd-html
<ul>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-html/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/html/package-summary.html#"><code>net.sourceforge.pmd.lang.html</code></a></li>
</ul>
</li>
<li>pmd-java
<ul>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/ast/ASTExpression.html#getConversionContext()"><code>ASTExpression#getConversionContext</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/rule/AbstractJavaRulechainRule.html#AbstractJavaRulechainRule(java.lang.Class,java.lang.Class...)"><code>AbstractJavaRulechainRule#AbstractJavaRulechainRule</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/symbols/table/JSymbolTable.html#"><code>net.sourceforge.pmd.lang.java.symbols.table.JSymbolTable</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/symbols/JElementSymbol.html#"><code>net.sourceforge.pmd.lang.java.symbols.JElementSymbol</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/symbols/package-summary.html#"><code>net.sourceforge.pmd.lang.java.symbols</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/types/ast/ExprContext.html#"><code>net.sourceforge.pmd.lang.java.types.ast.ExprContext</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/types/JIntersectionType.html#getInducedClassType()"><code>JIntersectionType#getInducedClassType</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/types/JTypeMirror.html#streamMethods(java.util.function.Predicate)"><code>JTypeMirror#streamMethods</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/types/JTypeMirror.html#streamDeclaredMethods(java.util.function.Predicate)"><code>JTypeMirror#streamDeclaredMethods</code></a></li>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-java/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/java/types/JTypeMirror.html#getConstructors()"><code>JTypeMirror#getConstructors</code></a></li>
</ul>
</li>
<li>pmd-kotlin
<ul>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-kotlin/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/kotlin/KotlinLanguageModule.html#"><code>net.sourceforge.pmd.lang.kotlin.KotlinLanguageModule</code></a></li>
</ul>
</li>
<li>pmd-test-schema
<ul>
<li><a href="https://docs.pmd-code.org/apidocs/pmd-test-schema/7.0.0-SNAPSHOT/net/sourceforge/pmd/test/schema/TestSchemaParser.html#"><code>net.sourceforge.pmd.test.schema.TestSchemaParser</code></a></li>
</ul>
</li>
</ul>
<p><strong>Removed functionality</strong></p>
<ul>
<li>The CLI parameter <code class="language-plaintext highlighter-rouge">--no-ruleset-compatibility</code> has been removed. It was only used to allow loading
some rulesets originally written for PMD 5 also in PMD 6 without fixing the rulesets.</li>
<li>The class <a href="https://docs.pmd-code.org/apidocs/pmd-core/6.55.0/net/sourceforge/pmd/RuleSetFactoryCompatibility.html#"><code>RuleSetFactoryCompatibility</code></a> has been removed without replacement.
The different ways to enable/disable this filter in <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/PMDConfiguration.html#"><code>PMDConfiguration</code></a>
(Property “RuleSetFactoryCompatibilityEnabled”) and
<a href="https://docs.pmd-code.org/apidocs/pmd-ant/7.0.0-SNAPSHOT/net/sourceforge/pmd/ant/PMDTask.html#"><code>PMDTask</code></a> (Property “noRuleSetCompatibility”) have been removed as well.</li>
<li><code class="language-plaintext highlighter-rouge">textcolor</code> renderer (<a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/renderers/TextColorRenderer.html#"><code>TextColorRenderer</code></a>) now renders always in color.
The property <code class="language-plaintext highlighter-rouge">color</code> has been removed. The possibility to override this with the system property <code class="language-plaintext highlighter-rouge">pmd.color</code>
has been removed as well. If you dont want colors, use <code class="language-plaintext highlighter-rouge">text</code> renderer (<a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/renderers/TextRenderer.html#"><code>TextRenderer</code></a>).</li>
</ul>
<h4 id="external-contributions">External Contributions</h4>
<ul>
<li><a href="https://github.com/pmd/pmd/pull/4093">#4093</a>: [apex] Summit-AST Apex module - Part 1 - <a href="https://github.com/eklimo">Edward Klimoshenko</a> (@eklimo)</li>
<li><a href="https://github.com/pmd/pmd/pull/4151">#4151</a>: [apex] Summit-AST Apex module - Part 2 - expression nodes - <a href="https://github.com/aaronhurst-google">Aaron Hurst</a> (@aaronhurst-google)</li>
<li><a href="https://github.com/pmd/pmd/pull/4171">#4171</a>: [apex] Summit-AST Apex module - Part 3 - initializers - <a href="https://github.com/aaronhurst-google">Aaron Hurst</a> (@aaronhurst-google)</li>
<li><a href="https://github.com/pmd/pmd/pull/4206">#4206</a>: [apex] Summit-AST Apex module - Part 4 - statements - <a href="https://github.com/aaronhurst-google">Aaron Hurst</a> (@aaronhurst-google)</li>
<li><a href="https://github.com/pmd/pmd/pull/4219">#4219</a>: [apex] Summit-AST Apex module - Part 5 - annotations, triggers, misc. - <a href="https://github.com/aaronhurst-google">Aaron Hurst</a> (@aaronhurst-google)</li>
<li><a href="https://github.com/pmd/pmd/pull/4242">#4242</a>: [apex] Merge 6.52 into experimental-apex-parser - <a href="https://github.com/aaronhurst-google">Aaron Hurst</a> (@aaronhurst-google)</li>
<li><a href="https://github.com/pmd/pmd/pull/4251">#4251</a>: [apex] Summit-AST Apex module - Part 6 Passing testsuite - <a href="https://github.com/aaronhurst-google">Aaron Hurst</a> (@aaronhurst-google)</li>
<li><a href="https://github.com/pmd/pmd/pull/4448">#4448</a>: [apex] Bump summit-ast to new release 2.1.0 (and remove workaround) - <a href="https://github.com/aaronhurst-google">Aaron Hurst</a> (@aaronhurst-google)</li>
<li><a href="https://github.com/pmd/pmd/pull/4479">#4479</a>: [apex] Merge main (7.x) branch into experimental-apex-parser and fix tests - <a href="https://github.com/aaronhurst-google">Aaron Hurst</a> (@aaronhurst-google)</li>
<li><a href="https://github.com/pmd/pmd/pull/4640">#4640</a>: [cli] Launch script fails if run via “bash pmd” - <a href="https://github.com/shai-bennathan">Shai Bennathan</a> (@shai-bennathan)</li>
<li><a href="https://github.com/pmd/pmd/pull/4673">#4673</a>: [javascript] CPD: Added support for decorator notation - <a href="https://github.com/wener-tiobe">Wener</a> (@wener-tiobe)</li>
<li><a href="https://github.com/pmd/pmd/pull/4677">#4677</a>: [apex] Add new rule: OperationWithHighCostInLoop - <a href="https://github.com/tprouvot">Thomas Prouvot</a> (@tprouvot)</li>
<li><a href="https://github.com/pmd/pmd/pull/4698">#4698</a>: [swift] Add macro expansion support for swift 5.9 - <a href="https://github.com/kenji21">Richard B.</a> (@kenji21)</li>
<li><a href="https://github.com/pmd/pmd/pull/4706">#4706</a>: [java] DetachedTestCase should not report on abstract methods - <a href="https://github.com/Debamoy">Debamoy Datta</a> (@Debamoy)</li>
<li><a href="https://github.com/pmd/pmd/pull/4719">#4719</a>: [java] UnnecessaryCaseChange: example doc toUpperCase() should compare to a capitalized string - <a href="https://github.com/ciufudean">ciufudean</a> (@ciufudean)</li>
<li><a href="https://github.com/pmd/pmd/pull/4738">#4738</a>: [doc] Added reference to the PMD extension for bld - <a href="https://github.com/ethauvin">Erik C. Thauvin</a> (@ethauvin)</li>
<li><a href="https://github.com/pmd/pmd/pull/4749">#4749</a>: Fixes NoSuchMethodError on processing errors in pmd-compat6 - <a href="https://github.com/bergander">Andreas Bergander</a> (@bergander)</li>
<li><a href="https://github.com/pmd/pmd/pull/4750">#4750</a>: [core] Fix flaky SummaryHTMLRenderer - <a href="https://github.com/219sansim">219sansim</a> (@219sansim)</li>
<li><a href="https://github.com/pmd/pmd/pull/4754">#4754</a>: [java] EmptyControlStatementRule: Add allowCommentedBlocks property - <a href="https://github.com/bergander">Andreas Bergander</a> (@bergander)</li>
<li><a href="https://github.com/pmd/pmd/pull/4759">#4759</a>: [java] fix: remove delimiter attribute from ruleset category/java/errorprone.xml - <a href="https://github.com/marcindabrowski">Marcin Dąbrowski</a> (@marcindabrowski)</li>
<li><a href="https://github.com/pmd/pmd/pull/4825">#4825</a>: [plsql] Fix ignored WITH clause for SELECT INTO statements - <a href="https://github.com/lbovet">Laurent Bovet</a> (@lbovet)</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#revamped-java">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</p>
<ul>
<li><a href="https://github.com/pmd/pmd-designer/releases/tag/7.0.0-rc1">PMD Designer Changelog (7.0.0-rc1)</a>.</li>
<li><a href="https://github.com/pmd/pmd-designer/releases/tag/7.0.0-rc4">PMD Designer Changelog (7.0.0-rc4)</a>.</li>
<li><a href="https://github.com/pmd/pmd-designer/releases/tag/7.0.0">PMD Designer Changelog (7.0.0)</a>.</li>
</ul>
<h4 id="new-cpd-report-format-cpdhtml-v2xslt">New CPD report format cpdhtml-v2.xslt</h4>
<p>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 CPDs XML format into HTML.</p>
<p>See <a href="report-examples/cpdhtml-v2.html">the example report</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>limited support for Swift 5.9 (Macro Expansions)</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">New: Kotlin support</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-cpd-support-for-typescript">New: CPD support for TypeScript</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="new-cpd-support-for-julia">New: CPD support for Julia</h4>
<p>Thanks to a contribution, CPD now supports the Julia language. It is shipped
in the new module <code class="language-plaintext highlighter-rouge">pmd-julia</code>.</p>
<p>Contributors: <a href="https://github.com/wener-tiobe">Wener</a> (@wener-tiobe)</p>
<h4 id="new-cpd-support-for-coco">New: CPD support for Coco</h4>
<p>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 <code class="language-plaintext highlighter-rouge">pmd-coco</code>.</p>
<p>Contributors: <a href="https://github.com/wener-tiobe">Wener</a> (@wener-tiobe)</p>
<h4 id="new-java-21-support">New: Java 21 Support</h4>
<p>This release of PMD brings support for Java 21. There are the following new standard language features,
that are supported now:</p>
<ul>
<li><a href="https://openjdk.org/jeps/440">JEP 440: Record Patterns</a></li>
<li><a href="https://openjdk.org/jeps/441">JEP 441: Pattern Matching for switch</a></li>
</ul>
<p>PMD also supports the following preview language features:</p>
<ul>
<li><a href="https://openjdk.org/jeps/430">JEP 430: String Templates (Preview)</a></li>
<li><a href="https://openjdk.org/jeps/443">JEP 443: Unnamed Patterns and Variables (Preview)</a></li>
<li><a href="https://openjdk.org/jeps/445">JEP 445: Unnamed Classes and Instance Main Methods (Preview)</a></li>
</ul>
<p>In order to analyze a project with PMD that uses these language features,
youll need to enable it via the environment variable <code class="language-plaintext highlighter-rouge">PMD_JAVA_OPTS</code> and select the new language
version <code class="language-plaintext highlighter-rouge">21-preview</code>:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>export PMD_JAVA_OPTS=--enable-preview
pmd check --use-version java-21-preview ...
</code></pre></div></div>
<p>Note: Support for Java 19 preview language features have been removed. The version “19-preview” is no longer available.</p>
<h4 id="changed-html-support-1">Changed: HTML support</h4>
<p>Support for HTML was introduced in PMD 6.55.0 as an experimental feature. With PMD 7.0.0 this
is now considered stable.</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>
<h4 id="changed-cpp-can-now-ignore-identifiers-in-sequences-cpd">Changed: CPP can now ignore identifiers in sequences (CPD)</h4>
<ul>
<li>new command line option for CPD: <code class="language-plaintext highlighter-rouge">--ignore-sequences</code>.</li>
<li>This option is used for CPP only: with the already existing option <code class="language-plaintext highlighter-rouge">--ignore-literal-sequences</code>, only
literals were ignored. The new option additional ignores identifiers as well in sequences.</li>
<li>See <a href="https://github.com/pmd/pmd/pull/4470">PR #4470</a> for details.</li>
</ul>
<h4 id="changed-groovy-support-cpd">Changed: Groovy Support (CPD)</h4>
<ul>
<li>We now support parsing all Groovy features from Groovy 3 and 4.</li>
<li>We now support <a href="pmd_userdocs_cpd.html#suppression">suppression</a> through <code class="language-plaintext highlighter-rouge">CPD-ON</code>/<code class="language-plaintext highlighter-rouge">CPD-OFF</code> comment pairs.</li>
<li>See <a href="https://github.com/pmd/pmd/pull/4726">PR #4726</a> for details.</li>
</ul>
<h4 id="changed-apex-support-replaced-jorje-with-fully-open-source-front-end">Changed: Apex Support: Replaced Jorje with fully open source front-end</h4>
<p>When PMD added Apex support with version 5.5.0, it utilized the Apex Jorje library to parse Apex source
and generate an AST. This library is however a binary-blob provided as part of the
<a href="https://github.com/forcedotcom/salesforcedx-vscode">Salesforce Extensions for VS Code</a>, and it is closed-source.</p>
<p>This causes problems, if binary blobs are not allowed by e.g. a company-wide policy. In that case, the Jorje
library prevented that PMD Apex could be used at all.</p>
<p>Also having access to the source code, enhancements and modifications are easier to do.</p>
<p>Under the hood, we use two open source libraries instead:</p>
<ul>
<li><a href="https://github.com/nawforce/apex-parser">apex-parser</a> by <a href="https://github.com/nawforce">Kevin Jones</a> (@nawforce)
This project provides the grammar for a ANTLR based parser.</li>
<li><a href="https://github.com/google/summit-ast">Summit-AST</a> by <a href="https://github.com/google">Google</a> (@google)
This project translates the ANTLR parse tree into an AST, that is similar to the AST Jorje provided.
Note: This is not an official Google product.</li>
</ul>
<p>Although the parsers is completely switched, there are only little known changes to the AST.
These are documented in the <a href="pmd_userdocs_migrating_to_pmd7.html#apex-ast">Migration Guide for PMD 7: Apex AST</a>.</p>
<p>See <a href="https://github.com/pmd/pmd/issues/3766">#3766</a> for details.</p>
<p>Contributors: <a href="https://github.com/aaronhurst-google">Aaron Hurst</a> (@aaronhurst-google),
<a href="https://github.com/eklimo">Edward Klimoshenko</a> (@eklimo)</p>
<h4 id="changed-rule-properties">Changed: Rule properties</h4>
<ul>
<li>The old deprecated classes like <code class="language-plaintext highlighter-rouge">IntProperty</code> and <code class="language-plaintext highlighter-rouge">StringProperty</code> have been removed. Please use
<a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/properties/PropertyFactory.html#"><code>PropertyFactory</code></a> to create properties.</li>
<li>All properties which accept multiple values now use a comma (<code class="language-plaintext highlighter-rouge">,</code>) as a delimiter. The previous default was a
pipe character (<code class="language-plaintext highlighter-rouge">|</code>). The delimiter is not configurable anymore. If needed, the comma can be escaped
with a backslash.</li>
<li>The <code class="language-plaintext highlighter-rouge">min</code> and <code class="language-plaintext highlighter-rouge">max</code> attributes in property definitions in the XML are now optional and can appear separately
or be omitted.</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>
<li><a href="pmd_rules_apex_performance.html#operationwithhighcostinloop"><code class="language-plaintext highlighter-rouge">OperationWithHighCostInLoop</code></a> finds Schema class methods called in a loop, which is a
potential performance issue.</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>
<li><a href="pmd_rules_java_codestyle.html#useexplicittypes"><code class="language-plaintext highlighter-rouge">UseExplicitTypes</code></a> reports usages of <code class="language-plaintext highlighter-rouge">var</code> keyword, which was introduced with Java 10.</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>
<p><strong>XML</strong></p>
<ul>
<li><a href="pmd_rules_xml_bestpractices.html#missingencoding"><code class="language-plaintext highlighter-rouge">MissingEncoding</code></a> finds XML files without explicit encoding.</li>
</ul>
<h4 id="changed-rules">Changed Rules</h4>
<p><strong>General changes</strong></p>
<ul>
<li>All statistical rules (like ExcessiveClassLength, ExcessiveParameterList) have been simplified and unified.
The properties <code class="language-plaintext highlighter-rouge">topscore</code> and <code class="language-plaintext highlighter-rouge">sigma</code> have been removed. The property <code class="language-plaintext highlighter-rouge">minimum</code> 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):
<ul>
<li>Apex: <a href="pmd_rules_apex_design.html#excessiveclasslength"><code class="language-plaintext highlighter-rouge">ExcessiveClassLength</code></a>, <a href="pmd_rules_apex_design.html#excessiveparameterlist"><code class="language-plaintext highlighter-rouge">ExcessiveParameterList</code></a>,
<a href="pmd_rules_apex_design.html#excessivepubliccount"><code class="language-plaintext highlighter-rouge">ExcessivePublicCount</code></a>, <a href="pmd_rules_apex_design.html#ncssconstructorcount"><code class="language-plaintext highlighter-rouge">NcssConstructorCount</code></a>,
<a href="pmd_rules_apex_design.html#ncssmethodcount"><code class="language-plaintext highlighter-rouge">NcssMethodCount</code></a>, <a href="pmd_rules_apex_design.html#ncsstypecount"><code class="language-plaintext highlighter-rouge">NcssTypeCount</code></a></li>
<li>Java: <a href="pmd_rules_java_design.html#excessiveimports"><code class="language-plaintext highlighter-rouge">ExcessiveImports</code></a>, <a href="pmd_rules_java_design.html#excessiveparameterlist"><code class="language-plaintext highlighter-rouge">ExcessiveParameterList</code></a>,
<a href="pmd_rules_java_design.html#excessivepubliccount"><code class="language-plaintext highlighter-rouge">ExcessivePublicCount</code></a>, <a href="pmd_rules_java_design.html#switchdensity"><code class="language-plaintext highlighter-rouge">SwitchDensity</code></a></li>
<li>PLSQL: <a href="pmd_rules_plsql_design.html#excessivemethodlength"><code class="language-plaintext highlighter-rouge">ExcessiveMethodLength</code></a>, <a href="pmd_rules_plsql_design.html#excessiveobjectlength"><code class="language-plaintext highlighter-rouge">ExcessiveObjectLength</code></a>,
<a href="pmd_rules_plsql_design.html#excessivepackagebodylength"><code class="language-plaintext highlighter-rouge">ExcessivePackageBodyLength</code></a>, <a href="pmd_rules_plsql_design.html#excessivepackagespecificationlength"><code class="language-plaintext highlighter-rouge">ExcessivePackageSpecificationLength</code></a>,
<a href="pmd_rules_plsql_design.html#excessiveparameterlist"><code class="language-plaintext highlighter-rouge">ExcessiveParameterList</code></a>, <a href="pmd_rules_plsql_design.html#excessivetypelength"><code class="language-plaintext highlighter-rouge">ExcessiveTypeLength</code></a>,
<a href="pmd_rules_plsql_design.html#ncssmethodcount"><code class="language-plaintext highlighter-rouge">NcssMethodCount</code></a>, <a href="pmd_rules_plsql_design.html#ncssobjectcount"><code class="language-plaintext highlighter-rouge">NcssObjectCount</code></a>,
<a href="pmd_rules_plsql_design.html#npathcomplexity"><code class="language-plaintext highlighter-rouge">NPathComplexity</code></a></li>
<li>VM: <a href="pmd_rules_vm_design.html#excessivetemplatelength"><code class="language-plaintext highlighter-rouge">ExcessiveTemplateLength</code></a></li>
</ul>
</li>
<li>The general property <code class="language-plaintext highlighter-rouge">violationSuppressXPath</code> which is available for all rules to
<a href="pmd_userdocs_suppressing_warnings.html">suppress warnings</a> 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 <code class="language-plaintext highlighter-rouge">violationSuppressXPath</code> properties.</li>
</ul>
<p><strong>Apex General changes</strong></p>
<ul>
<li>The properties <code class="language-plaintext highlighter-rouge">cc_categories</code>, <code class="language-plaintext highlighter-rouge">cc_remediation_points_multiplier</code>, <code class="language-plaintext highlighter-rouge">cc_block_highlighting</code> have been removed
from all rules. These properties have been deprecated since PMD 6.13.0.
See <a href="https://github.com/pmd/pmd/issues/1648">issue #1648</a> for more details.</li>
</ul>
<p><strong>Java General changes</strong></p>
<ul>
<li>
<p>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. <a href="pmd_rules_java_design.html#cognitivecomplexity"><code class="language-plaintext highlighter-rouge">CognitiveComplexity</code></a>.</p>
<p>The report location is controlled by the overrides of the method <a href="https://docs.pmd-code.org/apidocs/pmd-core/7.0.0-SNAPSHOT/net/sourceforge/pmd/lang/ast/Node.html#getReportLocation()"><code>getReportLocation</code></a>
in different node types.</p>
<p>See <a href="https://github.com/pmd/pmd/issues/4439">issue #4439</a> and <a href="https://github.com/pmd/pmd/issues/730">issue #730</a>
for more details.</p>
</li>
</ul>
<p><strong>Java Best Practices</strong></p>
<ul>
<li><a href="pmd_rules_java_bestpractices.html#arrayisstoreddirectly"><code class="language-plaintext highlighter-rouge">ArrayIsStoredDirectly</code></a>: Violations are now reported on the assignment and not
anymore on the formal parameter. The reported line numbers will probably move.</li>
<li><a href="pmd_rules_java_bestpractices.html#avoidreassigningloopvariables"><code class="language-plaintext highlighter-rouge">AvoidReassigningLoopVariables</code></a>: This rule might not report anymore all
reassignments of the control variable in for-loops when the property <code class="language-plaintext highlighter-rouge">forReassign</code> is set to <code class="language-plaintext highlighter-rouge">skip</code>.
See <a href="https://github.com/pmd/pmd/issues/4500">issue #4500</a> for more details.</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_bestpractices.html#unusedlocalvariable"><code class="language-plaintext highlighter-rouge">UnusedLocalVariable</code></a>: This rule has some important false-negatives fixed
and finds many more cases now. For details see issues <a href="https://github.com/pmd/pmd/issues/2130">#2130</a>,
<a href="https://github.com/pmd/pmd/issues/4516">#4516</a>, and <a href="https://github.com/pmd/pmd/issues/4517">#4517</a>.</li>
</ul>
<p><strong>Java Codestyle</strong></p>
<ul>
<li><a href="pmd_rules_java_codestyle.html#methodnamingconventions"><code class="language-plaintext highlighter-rouge">MethodNamingConventions</code></a>: The property <code class="language-plaintext highlighter-rouge">checkNativeMethods</code> has been removed. The
property was deprecated since PMD 6.3.0. Use the property <code class="language-plaintext highlighter-rouge">nativePattern</code> to control whether native methods
should be considered or not.</li>
<li><a href="pmd_rules_java_codestyle.html#shortvariable"><code class="language-plaintext highlighter-rouge">ShortVariable</code></a>: This rule now also reports short enum constant names.</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> has been removed. The rule now
handles Java 7 properly without a property.</li>
<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_codestyle.html#emptycontrolstatement"><code class="language-plaintext highlighter-rouge">EmptyControlStatement</code></a>: The rule has a new property to allow empty blocks when
they contain a comment (<code class="language-plaintext highlighter-rouge">allowCommentedBlocks</code>).</li>
</ul>
<p><strong>Java Design</strong></p>
<ul>
<li><a href="pmd_rules_java_design.html#cyclomaticcomplexity"><code class="language-plaintext highlighter-rouge">CyclomaticComplexity</code></a>: The property <code class="language-plaintext highlighter-rouge">reportLevel</code> 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
<code class="language-plaintext highlighter-rouge">classReportLevel</code> and <code class="language-plaintext highlighter-rouge">methodReportLevel</code> instead.</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>
<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_design.html#npathcomplexity"><code class="language-plaintext highlighter-rouge">NPathComplexity</code></a>: The property <code class="language-plaintext highlighter-rouge">minimum</code> has been removed. It was deprecated since PMD 6.0.0.
Use the property <code class="language-plaintext highlighter-rouge">reportLevel</code> instead.</li>
<li><a href="pmd_rules_java_design.html#singularfield"><code class="language-plaintext highlighter-rouge">SingularField</code></a>: The properties <code class="language-plaintext highlighter-rouge">checkInnerClasses</code> and <code class="language-plaintext highlighter-rouge">disallowNotAssignment</code> have been 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>
</ul>
<p><strong>Java Documentation</strong></p>
<ul>
<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">forbiddenRegex</code> can be used now to define the disallowed terms with a single regular
expression.</li>
<li><a href="pmd_rules_java_documentation.html#commentrequired"><code class="language-plaintext highlighter-rouge">CommentRequired</code></a>:
<ul>
<li>Overridden methods are now detected even without the <code class="language-plaintext highlighter-rouge">@Override</code>
annotation. This is relevant for the property <code class="language-plaintext highlighter-rouge">methodWithOverrideCommentRequirement</code>.
See also <a href="https://github.com/pmd/pmd/pull/3757">pull request #3757</a>.</li>
<li>Elements in annotation types are now detected as well. This might lead to an increased number of violations
for missing public method comments.</li>
</ul>
</li>
<li><a href="pmd_rules_java_documentation.html#commentsize"><code class="language-plaintext highlighter-rouge">CommentSize</code></a>: When determining the line-length of a comment, the leading comment
prefix markers (e.g. <code class="language-plaintext highlighter-rouge">*</code> or <code class="language-plaintext highlighter-rouge">//</code>) are ignored and dont add up to the line-length.
See also <a href="https://github.com/pmd/pmd/pull/4369">pull request #4369</a>.</li>
</ul>
<p><strong>Java Error Prone</strong></p>
<ul>
<li><a href="pmd_rules_java_errorprone.html#avoidduplicateliterals"><code class="language-plaintext highlighter-rouge">AvoidDuplicateLiterals</code></a>: The property <code class="language-plaintext highlighter-rouge">exceptionfile</code> has been removed. The property was
deprecated since PMD 6.10.0. Use the property <code class="language-plaintext highlighter-rouge">exceptionList</code> instead.</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_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#implicitswitchfallthrough"><code class="language-plaintext highlighter-rouge">ImplicitSwitchFallThrough</code></a>: 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.</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>
<li>Rule Properties</li>
<li>New Programmatic API for CPD</li>
</ul>
<h3 id="-compatibility-and-migration-notes">💥 Compatibility and migration notes</h3>
<p>A detailed documentation of required changes are available in the
<a href="pmd_userdocs_migrating_to_pmd7.html">Migration Guide for PMD 7</a>.</p>
<p>See also <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>
<li><a href="https://github.com/pmd/pmd/pull/4460">#4460</a>: Fix assembly-plugin warnings</li>
<li><a href="https://github.com/pmd/pmd/issues/4582">#4582</a>: [dist] Download link broken</li>
<li><a href="https://github.com/pmd/pmd/pull/4586">#4586</a>: Use explicit encoding in ruleset xml files</li>
<li><a href="https://github.com/pmd/pmd/issues/4642">#4642</a>: Update regression tests with Java 21 language features</li>
<li><a href="https://github.com/pmd/pmd/issues/4691">#4691</a>: [CVEs] Critical and High CEVs reported on PMD and PMD dependencies</li>
<li><a href="https://github.com/pmd/pmd/pull/4699">#4699</a>: Make PMD buildable with java 21</li>
<li><a href="https://github.com/pmd/pmd/issues/4736">#4736</a>: [ci] Improve build procedure</li>
<li><a href="https://github.com/pmd/pmd/pull/4741">#4741</a>: Add pmd-compat6 module for maven-pmd-plugin</li>
<li><a href="https://github.com/pmd/pmd/pull/4749">#4749</a>: Fixes NoSuchMethodError on processing errors in pmd-compat6</li>
<li><a href="https://github.com/pmd/pmd/issues/4776">#4776</a>: [ci] Upgrade to ruby 3</li>
<li><a href="https://github.com/pmd/pmd/pull/4796">#4796</a>: Remove deprecated and release rulesets</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/issues/1027">#1027</a>: [core] Apply the new PropertyDescriptor&lt;Pattern&gt; type where applicable</li>
<li><a href="https://github.com/pmd/pmd/issues/1204">#1204</a>: [core] Allow numeric properties in XML to be within an unbounded range</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/3903">#3903</a>: [core] Consolidate <code class="language-plaintext highlighter-rouge">n.s.pmd.reporting</code> package</li>
<li><a href="https://github.com/pmd/pmd/issues/3905">#3905</a>: [core] Stabilize tree export API</li>
<li><a href="https://github.com/pmd/pmd/issues/3917">#3917</a>: [core] Consolidate <code class="language-plaintext highlighter-rouge">n.s.pmd.lang.rule</code> package</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/issues/3919">#3919</a>: [core] Merge CPD and PMD language</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/4065">#4065</a>: [core] Rename TokenMgrError to LexException, Tokenizer to CpdLexer</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/issues/4204">#4204</a>: [core] Provide a CpdAnalysis class as a programmatic entry point into CPD</li>
<li><a href="https://github.com/pmd/pmd/issues/4301">#4301</a>: [core] Remove deprecated property concrete classes</li>
<li><a href="https://github.com/pmd/pmd/issues/4302">#4302</a>: [core] Migrate Property Framework API to Java 8</li>
<li><a href="https://github.com/pmd/pmd/issues/4309">#4309</a>: [core] Cleanups in XPath area</li>
<li><a href="https://github.com/pmd/pmd/issues/4312">#4312</a>: [core] Remove unnecessary property <code class="language-plaintext highlighter-rouge">color</code> and system property <code class="language-plaintext highlighter-rouge">pmd.color</code> in <code class="language-plaintext highlighter-rouge">TextColorRenderer</code></li>
<li><a href="https://github.com/pmd/pmd/issues/4313">#4313</a>: [core] Remove support for &lt;lang&gt;-&lt;ruleset&gt; hyphen notation for ruleset references</li>
<li><a href="https://github.com/pmd/pmd/issues/4314">#4314</a>: [core] Remove ruleset compatibility filter (RuleSetFactoryCompatibility) and CLI option <code class="language-plaintext highlighter-rouge">--no-ruleset-compatibility</code></li>
<li><a href="https://github.com/pmd/pmd/issues/4323">#4323</a>: [core] Refactor CPD integration</li>
<li><a href="https://github.com/pmd/pmd/issues/4348">#4348</a>: [core] Consolidate @<!-- -->InternalApi classes</li>
<li><a href="https://github.com/pmd/pmd/issues/4349">#4349</a>: [core] Cleanup remaining experimental and deprecated API</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/4397">#4397</a>: [core] Refactor CPD</li>
<li><a href="https://github.com/pmd/pmd/issues/4378">#4378</a>: [core] Ruleset loading processes commented rules</li>
<li><a href="https://github.com/pmd/pmd/pull/4420">#4420</a>: [core] Remove PMD.EOL</li>
<li><a href="https://github.com/pmd/pmd/pull/4425">#4425</a>: [core] Replace TextFile::pathId</li>
<li><a href="https://github.com/pmd/pmd/issues/4454">#4454</a>: [core] “Unknown option: -min” but is referenced in documentation</li>
<li><a href="https://github.com/pmd/pmd/pull/4611">#4611</a>: [core] Fix loading language properties from env vars</li>
<li><a href="https://github.com/pmd/pmd/issues/4621">#4621</a>: [core] Make <code class="language-plaintext highlighter-rouge">ClasspathClassLoader::getResource</code> child first</li>
<li><a href="https://github.com/pmd/pmd/issues/4674">#4674</a>: [core] WARNING: Illegal reflective access by org.codehaus.groovy.reflection.CachedClass</li>
<li><a href="https://github.com/pmd/pmd/pull/4694">#4694</a>: [core] Fix line/col numbers in TokenMgrError</li>
<li><a href="https://github.com/pmd/pmd/issues/4717">#4717</a>: [core] XSLTRenderer doesnt close report file</li>
<li><a href="https://github.com/pmd/pmd/pull/4750">#4750</a>: [core] Fix flaky SummaryHTMLRenderer</li>
<li><a href="https://github.com/pmd/pmd/pull/4782">#4782</a>: [core] Avoid using getImage/@<!-- -->Image</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/pull/4423">#4423</a>: [cli] Fix NPE when only <code class="language-plaintext highlighter-rouge">--file-list</code> is specified</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>
<li><a href="https://github.com/pmd/pmd/pull/4594">#4594</a>: [cli] Change completion generation to runtime</li>
<li><a href="https://github.com/pmd/pmd/pull/4685">#4685</a>: [cli] Clarify CPD documentation, fix positional parameter handling</li>
<li><a href="https://github.com/pmd/pmd/issues/4723">#4723</a>: [cli] Launch fails for “bash pmd”</li>
</ul>
</li>
<li>doc
<ul>
<li><a href="https://github.com/pmd/pmd/issues/995">#995</a>: [doc] Document API evolution principles as ADR</li>
<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/2511">#2511</a>: [doc] Review guides for writing java/xpath rules for correctness with PMD 7</li>
<li><a href="https://github.com/pmd/pmd/issues/3175">#3175</a>: [doc] Document language module features</li>
<li><a href="https://github.com/pmd/pmd/issues/4294">#4294</a>: [doc] Migration Guide for upgrading PMD 6 ➡️ 7</li>
<li><a href="https://github.com/pmd/pmd/issues/4303">#4303</a>: [doc] Document new property framework</li>
<li><a href="https://github.com/pmd/pmd/issues/4308">#4308</a>: [doc] Document XPath API @<!-- ->NoAttribute and @<!-- -->DeprecatedAttribute</li>
<li><a href="https://github.com/pmd/pmd/issues/4319">#4319</a>: [doc] Document TypeRes API and Symbols API</li>
<li><a href="https://github.com/pmd/pmd/issues/4438">#4438</a>: [doc] Documentation links in VS Code are outdated</li>
<li><a href="https://github.com/pmd/pmd/issues/4521">#4521</a>: [doc] Website is not mobile friendly</li>
<li><a href="https://github.com/pmd/pmd/issues/4676">#4676</a>: [doc] Clarify how CPD <code class="language-plaintext highlighter-rouge">--ignore-literals</code> and <code class="language-plaintext highlighter-rouge">--ignore-identifiers</code> work</li>
<li><a href="https://github.com/pmd/pmd/pull/4659">#4659</a>: [doc] Improve ant documentation</li>
<li><a href="https://github.com/pmd/pmd/pull/4669">#4669</a>: [doc] Add bld PMD Extension to Tools / Integrations</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/3766">#3766</a>: [apex] Replace Jorje with fully open source front-end</li>
<li><a href="https://github.com/pmd/pmd/issues/3973">#3973</a>: [apex] Update parser to support new as user keywords (User Mode for Database Operations)</li>
<li><a href="https://github.com/pmd/pmd/issues/4427">#4427</a>: [apex] ApexBadCrypto test failing to detect inline code</li>
<li><a href="https://github.com/pmd/pmd/issues/4453">#4453</a>: [apex] [7.0-rc1] Exception while initializing Apexlink (Index 34812 out of bounds for length 34812)</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>
<li><a href="https://github.com/pmd/pmd/issues/4509">#4509</a>: [apex] ExcessivePublicCount doesnt consider inner classes correctly</li>
<li><a href="https://github.com/pmd/pmd/issues/4596">#4596</a>: [apex] ExcessivePublicCount ignores properties</li>
</ul>
</li>
<li>apex-performance
<ul>
<li><a href="https://github.com/pmd/pmd/issues/4675">#4675</a>: [apex] New Rule: OperationWithHighCostInLoop</li>
</ul>
</li>
<li>apex-security
<ul>
<li><a href="https://github.com/pmd/pmd/issues/4646">#4646</a>: [apex] ApexSOQLInjection does not recognise SObjectType or SObjectField as safe variable types</li>
</ul>
</li>
<li>groovy
<ul>
<li><a href="https://github.com/pmd/pmd/pull/4726">#4726</a>: [groovy] Support Groovy to 3 and 4 and CPD suppressions</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/1307">#1307</a>: [java] AccessNode API changes</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/3751">#3751</a>: [java] Rename some node types</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>
<li><a href="https://github.com/pmd/pmd/issues/4383">#4383</a>: [java] IllegalStateException: Object is not an array type!</li>
<li><a href="https://github.com/pmd/pmd/issues/4401">#4401</a>: [java] PMD 7 fails to build under Java 19</li>
<li><a href="https://github.com/pmd/pmd/issues/4405">#4405</a>: [java] Processing error with ArrayIndexOutOfBoundsException</li>
<li><a href="https://github.com/pmd/pmd/issues/4583">#4583</a>: [java] Support JDK 21 (LTS)</li>
<li><a href="https://github.com/pmd/pmd/pull/4628">#4628</a>: [java] Support loading classes from java runtime images</li>
<li><a href="https://github.com/pmd/pmd/issues/4753">#4753</a>: [java] PMD crashes while using generics and wildcards</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] ForLoopCanBeForeach false positive with method call using index variable</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>
<li><a href="https://github.com/pmd/pmd/issues/4433">#4433</a>: [java] [7.0-rc1] ReplaceHashtableWithMap on java.util.Properties</li>
<li><a href="https://github.com/pmd/pmd/issues/4492">#4492</a>: [java] GuardLogStatement gives false positive when argument is a Java method reference</li>
<li><a href="https://github.com/pmd/pmd/issues/4503">#4503</a>: [java] JUnitTestsShouldIncludeAssert: false negative with TestNG</li>
<li><a href="https://github.com/pmd/pmd/issues/4516">#4516</a>: [java] UnusedLocalVariable: false-negative with try-with-resources</li>
<li><a href="https://github.com/pmd/pmd/issues/4517">#4517</a>: [java] UnusedLocalVariable: false-negative with compound assignments</li>
<li><a href="https://github.com/pmd/pmd/issues/4518">#4518</a>: [java] UnusedLocalVariable: false-positive with multiple for-loop indices</li>
<li><a href="https://github.com/pmd/pmd/issues/4625">#4625</a>: [java] UnusedPrivateMethod false positive: Autoboxing into Number</li>
<li><a href="https://github.com/pmd/pmd/issues/4634">#4634</a>: [java] JUnit4TestShouldUseTestAnnotation false positive with TestNG</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 with return expressions</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/2847">#2847</a>: [java] New Rule: Use Explicit Types</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/4239">#4239</a>: [java] UnnecessaryLocalBeforeReturn - false positive with catch clause</li>
<li><a href="https://github.com/pmd/pmd/issues/4268">#4268</a>: [java] CommentDefaultAccessModifier: false positive with TestNG annotations</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/4432">#4432</a>: [java] [7.0-rc1] UnnecessaryImport - Unused static import is being used</li>
<li><a href="https://github.com/pmd/pmd/issues/4455">#4455</a>: [java] FieldNamingConventions: false positive with lomboks @<!-- -->UtilityClass</li>
<li><a href="https://github.com/pmd/pmd/issues/4487">#4487</a>: [java] UnnecessaryConstructor: false-positive with @<!-- -->Inject and @<!-- -->Autowired</li>
<li><a href="https://github.com/pmd/pmd/issues/4511">#4511</a>: [java] LocalVariableCouldBeFinal shouldnt report unused variables</li>
<li><a href="https://github.com/pmd/pmd/issues/4512">#4512</a>: [java] MethodArgumentCouldBeFinal shouldnt report unused parameters</li>
<li><a href="https://github.com/pmd/pmd/issues/4557">#4557</a>: [java] UnnecessaryImport FP with static imports of overloaded methods</li>
<li><a href="https://github.com/pmd/pmd/issues/4578">#4578</a>: [java] CommentDefaultAccessModifier comment needs to be before annotation if present</li>
<li><a href="https://github.com/pmd/pmd/issues/4631">#4631</a>: [java] UnnecessaryFullyQualifiedName fails to recognize illegal self reference in enums</li>
<li><a href="https://github.com/pmd/pmd/issues/4645">#4645</a>: [java] CommentDefaultAccessModifier - False Positive with JUnit5s ParameterizedTest</li>
<li><a href="https://github.com/pmd/pmd/pull/4754">#4754</a>: [java] EmptyControlStatementRule: Add allowCommentedBlocks property</li>
</ul>
</li>
<li>java-design
<ul>
<li><a href="https://github.com/pmd/pmd/issues/174">#174</a>: [java] SingularField false positive with switch in method that both assigns and reads field</li>
<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/issues/3840">#3840</a>: [java] LawOfDemeter disallows method call on locally created object</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/4434">#4434</a>: [java] [7.0-rc1] ExceptionAsFlowControl when simply propagating</li>
<li><a href="https://github.com/pmd/pmd/issues/4456">#4456</a>: [java] FinalFieldCouldBeStatic: false positive with lomboks @<!-- -->UtilityClass</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>
<li><a href="https://github.com/pmd/pmd/pull/4549">#4549</a>: [java] Make LawOfDemeter results deterministic</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/718">#718</a>: [java] BrokenNullCheck false positive with parameter/field confusion</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/1831">#1831</a>: [java] DetachedTestCase reports abstract methods</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/issues/4063">#4063</a>: [java] AvoidBranchingStatementAsLastInLoop: False-negative about try/finally block</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/4457">#4457</a>: [java] OverrideBothEqualsAndHashcode: false negative with anonymous classes</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>
<li><a href="https://github.com/pmd/pmd/issues/4510">#4510</a>: [java] ConstructorCallsOverridableMethod: false positive with lomboks @<!-- -->Value</li>
<li><a href="https://github.com/pmd/pmd/issues/4513">#4513</a>: [java] UselessOperationOnImmutable various false negatives with String</li>
<li><a href="https://github.com/pmd/pmd/issues/4514">#4514</a>: [java] AvoidLiteralsInIfCondition false positive and negative for String literals when ignoreExpressions=true</li>
<li><a href="https://github.com/pmd/pmd/issues/4546">#4546</a>: [java] OverrideBothEqualsAndHashCode ignores records</li>
<li><a href="https://github.com/pmd/pmd/pull/4719">#4719</a>: [java] UnnecessaryCaseChange: example doc toUpperCase() should compare to a capitalized string</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>
<li><a href="https://github.com/pmd/pmd/issues/4070">#4070</a>: [java] A false positive about the rule RedundantFieldInitializer</li>
<li><a href="https://github.com/pmd/pmd/issues/4458">#4458</a>: [java] RedundantFieldInitializer: false positive with lomboks @<!-- -->Value</li>
</ul>
</li>
<li>javascript
<ul>
<li><a href="https://github.com/pmd/pmd/pull/4673">#4673</a>: [javascript] CPD: Added support for decorator notation</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>plsql
<ul>
<li><a href="https://github.com/pmd/pmd/issues/4820">#4820</a>: [plsql] WITH clause is ignored for SELECT INTO statements</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>
<li><a href="https://github.com/pmd/pmd/issues/4697">#4697</a>: [swift] Support Swift 5.9 features (mainly macros expansion expressions)</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>
<li>xml-bestpractices
<ul>
<li><a href="https://github.com/pmd/pmd/pull/4592">#4592</a>: [xml] Add MissingEncoding rule</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/4093">#4093</a>: [apex] Summit-AST Apex module - Part 1 - <a href="https://github.com/eklimo">Edward Klimoshenko</a> (@eklimo)</li>
<li><a href="https://github.com/pmd/pmd/pull/4151">#4151</a>: [apex] Summit-AST Apex module - Part 2 - expression nodes - <a href="https://github.com/aaronhurst-google">Aaron Hurst</a> (@aaronhurst-google)</li>
<li><a href="https://github.com/pmd/pmd/pull/4171">#4171</a>: [apex] Summit-AST Apex module - Part 3 - initializers - <a href="https://github.com/aaronhurst-google">Aaron Hurst</a> (@aaronhurst-google)</li>
<li><a href="https://github.com/pmd/pmd/pull/4206">#4206</a>: [apex] Summit-AST Apex module - Part 4 - statements - <a href="https://github.com/aaronhurst-google">Aaron Hurst</a> (@aaronhurst-google)</li>
<li><a href="https://github.com/pmd/pmd/pull/4219">#4219</a>: [apex] Summit-AST Apex module - Part 5 - annotations, triggers, misc. - <a href="https://github.com/aaronhurst-google">Aaron Hurst</a> (@aaronhurst-google)</li>
<li><a href="https://github.com/pmd/pmd/pull/4242">#4242</a>: [apex] Merge 6.52 into experimental-apex-parser - <a href="https://github.com/aaronhurst-google">Aaron Hurst</a> (@aaronhurst-google)</li>
<li><a href="https://github.com/pmd/pmd/pull/4251">#4251</a>: [apex] Summit-AST Apex module - Part 6 Passing testsuite - <a href="https://github.com/aaronhurst-google">Aaron Hurst</a> (@aaronhurst-google)</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/4403">#4403</a>: [julia] CPD: Add support for Julia code duplication - <a href="https://github.com/wener-tiobe">Wener</a> (@wener-tiobe)</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/4426">#4426</a>: [cpd] New XML to HTML XLST report format for PMD CPD - <a href="https://github.com/mohan-chinnappan-n">mohan-chinnappan-n</a> (@mohan-chinnappan-n)</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/4431">#4431</a>: [coco] CPD: Coco support for code duplication detection - <a href="https://github.com/wener-tiobe">Wener</a> (@wener-tiobe)</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/4448">#4448</a>: [apex] Bump summit-ast to new release 2.1.0 (and remove workaround) - <a href="https://github.com/aaronhurst-google">Aaron Hurst</a> (@aaronhurst-google)</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/4470">#4470</a>: [cpp] CPD: Added strings as literal and ignore identifiers in sequences - <a href="https://github.com/wener-tiobe">Wener</a> (@wener-tiobe)</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/4479">#4479</a>: [apex] Merge main (7.x) branch into experimental-apex-parser and fix tests - <a href="https://github.com/aaronhurst-google">Aaron Hurst</a> (@aaronhurst-google)</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/4507">#4507</a>: [java] Fix #4503: A false negative about JUnitTestsShouldIncludeAssert and testng - <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>
<li><a href="https://github.com/pmd/pmd/pull/4528">#4528</a>: [apex] Update to apexlink - <a href="https://github.com/nawforce">Kevin Jones</a> (@nawforce)</li>
<li><a href="https://github.com/pmd/pmd/pull/4533">#4533</a>: [java] Fix #4063: False-negative about try/catch block in Loop - <a href="https://github.com/LynnBroe">AnnaDev</a> (@LynnBroe)</li>
<li><a href="https://github.com/pmd/pmd/pull/4536">#4536</a>: [java] Fix #4268: CommentDefaultAccessModifier - false positive with TestNGs @<!-- -->Test annotation - <a href="https://github.com/LynnBroe">AnnaDev</a> (@LynnBroe)</li>
<li><a href="https://github.com/pmd/pmd/pull/4537">#4537</a>: [java] Fix #4455: A false positive about FieldNamingConventions and UtilityClass - <a href="https://github.com/LynnBroe">AnnaDev</a> (@LynnBroe)</li>
<li><a href="https://github.com/pmd/pmd/pull/4538">#4538</a>: [java] Fix #4456: A false positive about FinalFieldCouldBeStatic and UtilityClass - <a href="https://github.com/LynnBroe">AnnaDev</a> (@LynnBroe)</li>
<li><a href="https://github.com/pmd/pmd/pull/4540">#4540</a>: [java] Fix #4457: false negative about OverrideBothEqualsAndHashcode - <a href="https://github.com/LynnBroe">AnnaDev</a> (@LynnBroe)</li>
<li><a href="https://github.com/pmd/pmd/pull/4541">#4541</a>: [java] Fix #4458: A false positive about RedundantFieldInitializer and @<!-- -->Value - <a href="https://github.com/LynnBroe">AnnaDev</a> (@LynnBroe)</li>
<li><a href="https://github.com/pmd/pmd/pull/4542">#4542</a>: [java] Fix #4510: A false positive about ConstructorCallsOverridableMethod and @<!-- -->Value - <a href="https://github.com/LynnBroe">AnnaDev</a> (@LynnBroe)</li>
<li><a href="https://github.com/pmd/pmd/pull/4553">#4553</a>: [java] Fix #4492: GuardLogStatement gives false positive when argument is a Java method reference - <a href="https://github.com/anastasiia-koba">Anastasiia Koba</a> (@anastasiia-koba)</li>
<li><a href="https://github.com/pmd/pmd/pull/4637">#4637</a>: [java] fix #4634 - JUnit4TestShouldUseTestAnnotation false positive with TestNG - <a href="https://github.com/krdabrowski">Krystian Dabrowski</a> (@krdabrowski)</li>
<li><a href="https://github.com/pmd/pmd/pull/4640">#4640</a>: [cli] Launch script fails if run via “bash pmd” - <a href="https://github.com/shai-bennathan">Shai Bennathan</a> (@shai-bennathan)</li>
<li><a href="https://github.com/pmd/pmd/pull/4649">#4649</a>: [apex] Add SObjectType and SObjectField to list of injectable SOQL variable types - <a href="https://github.com/rcorfieldffdc">Richard Corfield</a> (@rcorfieldffdc)</li>
<li><a href="https://github.com/pmd/pmd/pull/4651">#4651</a>: [doc] Add “Tencent Cloud Code Analysis” in Tools / Integrations - <a href="https://github.com/cyw3">yale</a> (@cyw3)</li>
<li><a href="https://github.com/pmd/pmd/pull/4664">#4664</a>: [cli] CPD: Fix NPE when only <code class="language-plaintext highlighter-rouge">--file-list</code> is specified - <a href="https://github.com/wener-tiobe">Wener</a> (@wener-tiobe)</li>
<li><a href="https://github.com/pmd/pmd/pull/4665">#4665</a>: [java] Doc: Fix references AutoClosable -&gt; AutoCloseable - <a href="https://github.com/AndreyBozhko">Andrey Bozhko</a> (@AndreyBozhko)</li>
<li><a href="https://github.com/pmd/pmd/pull/4673">#4673</a>: [javascript] CPD: Added support for decorator notation - <a href="https://github.com/wener-tiobe">Wener</a> (@wener-tiobe)</li>
<li><a href="https://github.com/pmd/pmd/pull/4677">#4677</a>: [apex] Add new rule: OperationWithHighCostInLoop - <a href="https://github.com/tprouvot">Thomas Prouvot</a> (@tprouvot)</li>
<li><a href="https://github.com/pmd/pmd/pull/4698">#4698</a>: [swift] Add macro expansion support for swift 5.9 - <a href="https://github.com/kenji21">Richard B.</a> (@kenji21)</li>
<li><a href="https://github.com/pmd/pmd/pull/4706">#4706</a>: [java] DetachedTestCase should not report on abstract methods - <a href="https://github.com/Debamoy">Debamoy Datta</a> (@Debamoy)</li>
<li><a href="https://github.com/pmd/pmd/pull/4719">#4719</a>: [java] UnnecessaryCaseChange: example doc toUpperCase() should compare to a capitalized string - <a href="https://github.com/ciufudean">ciufudean</a> (@ciufudean)</li>
<li><a href="https://github.com/pmd/pmd/pull/4738">#4738</a>: [doc] Added reference to the PMD extension for bld - <a href="https://github.com/ethauvin">Erik C. Thauvin</a> (@ethauvin)</li>
<li><a href="https://github.com/pmd/pmd/pull/4749">#4749</a>: Fixes NoSuchMethodError on processing errors in pmd-compat6 - <a href="https://github.com/bergander">Andreas Bergander</a> (@bergander)</li>
<li><a href="https://github.com/pmd/pmd/pull/4750">#4750</a>: [core] Fix flaky SummaryHTMLRenderer - <a href="https://github.com/219sansim">219sansim</a> (@219sansim)</li>
<li><a href="https://github.com/pmd/pmd/pull/4754">#4754</a>: [java] EmptyControlStatementRule: Add allowCommentedBlocks property - <a href="https://github.com/bergander">Andreas Bergander</a> (@bergander)</li>
<li><a href="https://github.com/pmd/pmd/pull/4759">#4759</a>: [java] fix: remove delimiter attribute from ruleset category/java/errorprone.xml - <a href="https://github.com/marcindabrowski">Marcin Dąbrowski</a> (@marcindabrowski)</li>
<li><a href="https://github.com/pmd/pmd/pull/4825">#4825</a>: [plsql] Fix ignored WITH clause for SELECT INTO statements - <a href="https://github.com/lbovet">Laurent Bovet</a> (@lbovet)</li>
</ul>
<h3 id="-stats">📈 Stats</h3>
<ul>
<li>5007 commits</li>
<li>658 closed tickets &amp; PRs</li>
<li>Days since last release: 122</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;2024 PMD Open Source Project. All rights
reserved. <br />
Site last generated: Feb 29, 2024 <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>