3006 lines
134 KiB
HTML
3006 lines
134 KiB
HTML
<!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"> <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"> </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>
|
||
|
||
|
||
|
||
</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="pmd_devdocs_experimental_ast_dump.html">Creating (XML) dump of the AST</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<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>We’re 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"><dependency></span>
|
||
<span class="nt"><groupId></span>net.sourceforge.pmd<span class="nt"></groupId></span>
|
||
<span class="nt"><artifactId></span>pmd-compat6<span class="nt"></artifactId></span>
|
||
<span class="nt"><version></span>${pmdVersion}<span class="nt"></version></span>
|
||
<span class="nt"></dependency></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). It’s 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">I’m 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">I’m 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>
|
||
|
||
<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>
|
||
|
||
<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<Pattern> type where applicable</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 doesn’t close report file</li>
|
||
<li><a href="https://github.com/pmd/pmd/pull/4750">#4750</a>: [core] Fix flaky SummaryHTMLRenderer</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>
|
||
</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/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-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/4578">#4578</a>: [java] CommentDefaultAccessModifier comment needs to be before annotation if present</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/4645">#4645</a>: [java] CommentDefaultAccessModifier - False Positive with JUnit5’s ParameterizedTest</li>
|
||
<li><a href="https://github.com/pmd/pmd/pull/4754">#4754</a>: [java] EmptyControlStatementRule: Add allowCommentedBlocks property</li>
|
||
</ul>
|
||
</li>
|
||
<li>java-errorprone
|
||
<ul>
|
||
<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>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>Removed classes and methods</strong></p>
|
||
|
||
<p>The following previously deprecated classes have been removed:</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/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
|
||
doesn’t use additional information which Apex version actually is used. Therefore, this method can’t be
|
||
used to determine the Apex version of the project that is being analyzed.</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>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
|
||
<h4 id="external-contributions">External Contributions</h4>
|
||
<ul>
|
||
<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>
|
||
</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">Updated PMD Designer</h4>
|
||
|
||
<p>This PMD release ships a new version of the pmd-designer.
|
||
For the changes, see <a href="https://github.com/pmd/pmd-designer/releases/tag/7.0.0-rc1">PMD Designer Changelog</a>.</p>
|
||
|
||
<h4 id="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 CPD’s 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-experimental">New: Kotlin support (experimental)</h4>
|
||
|
||
<ul>
|
||
<li>use PMD to analyze Kotlin code with PMD rules</li>
|
||
<li>Support for Kotlin 1.8 grammar</li>
|
||
<li>initially 2 built-in rules</li>
|
||
</ul>
|
||
|
||
<h4 id="new-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,
|
||
you’ll 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-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-apex-jorje-updated">Changed: Apex Jorje Updated</h4>
|
||
|
||
<p>With the new version of Apex Jorje, the new language constructs like User Mode Database Operations
|
||
can be parsed now. PMD should now be able to parse Apex code up to version 59.0 (Winter ‘23).</p>
|
||
|
||
<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-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 don’t 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>
|
||
</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<Pattern> 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/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/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/4323">#4323</a>: [core] Refactor CPD integration</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/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 doesn’t close report file</li>
|
||
<li><a href="https://github.com/pmd/pmd/pull/4750">#4750</a>: [core] Fix flaky SummaryHTMLRenderer</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/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 doesn’t 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/1367">#1367</a>: [java] Parsing error on annotated inner class</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/1661">#1661</a>: [java] About operator nodes</li>
|
||
<li><a href="https://github.com/pmd/pmd/pull/2366">#2366</a>: [java] Remove qualified names</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/2819">#2819</a>: [java] GLB bugs in pmd 7</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/3642">#3642</a>: [java] Parse error on rare extra dimensions on method return type on annotation methods</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/3763">#3763</a>: [java] Ambiguous reference error in valid code</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/3749">#3749</a>: [java] Improve <code class="language-plaintext highlighter-rouge">isOverridden</code> in ASTMethodDeclaration</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/3750">#3750</a>: [java] Make symbol table support instanceof pattern bindings</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/3752">#3752</a>: [java] Expose annotations in symbol API</li>
|
||
<li><a href="https://github.com/pmd/pmd/pull/4237">#4237</a>: [java] Cleanup handling of Java comments</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/4317">#4317</a>: [java] Some AST nodes should not be TypeNodes</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/4359">#4359</a>: [java] Type resolution fails with NPE when the scope is not a type declaration</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/4367">#4367</a>: [java] Move testrule TypeResTest into internal</li>
|
||
<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] Don’t raise JUnitTestContainsTooManyAsserts on JUnit 5’s 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/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/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 lombok’s @<!-- -->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 shouldn’t report unused variables</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/4512">#4512</a>: [java] MethodArgumentCouldBeFinal shouldn’t 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/4645">#4645</a>: [java] CommentDefaultAccessModifier - False Positive with JUnit5’s 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/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 can’t 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 lombok’s @<!-- -->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/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 lombok’s @<!-- -->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 can’t 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 can’t 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 lombok’s @<!-- -->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>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/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/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/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 TestNG’s @<!-- -->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 -> 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>
|
||
</ul>
|
||
|
||
<h3 id="-stats">📈 Stats</h3>
|
||
<ul>
|
||
<li>5007 commits</li>
|
||
<li>658 closed tickets & 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">
|
||
©2024 PMD Open Source Project. All rights
|
||
reserved. <br />
|
||
Site last generated: Jan 12, 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>
|