2479 lines
106 KiB
HTML
2479 lines
106 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: 27-May-2023</div>
|
||
|
||
|
||
|
||
|
||
|
||
<li>
|
||
|
||
<a href="#">About</a>
|
||
|
||
<ul>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="index.html">Home</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="active"><a href="pmd_release_notes.html">Release notes</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_release_notes_pmd7.html">Release notes (PMD 7)</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_about_help.html">Getting help</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</li>
|
||
|
||
|
||
|
||
<li>
|
||
|
||
<a href="#">User Documentation</a>
|
||
|
||
<ul>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_userdocs_installation.html">Installation and basic CLI usage</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_userdocs_making_rulesets.html">Making rulesets</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_userdocs_configuring_rules.html">Configuring rules</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_userdocs_best_practices.html">Best practices</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_userdocs_suppressing_warnings.html">Suppressing warnings</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_userdocs_incremental_analysis.html">Incremental analysis</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_userdocs_cli_reference.html">PMD CLI reference</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_userdocs_report_formats.html">PMD Report formats</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_userdocs_3rdpartyrulesets.html">3rd party rulesets</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="subfolders">
|
||
<a href="#">CPD reference</a>
|
||
<ul>
|
||
|
||
|
||
|
||
<li><a href="pmd_userdocs_cpd.html">Copy-paste detection</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_userdocs_cpd_report_formats.html">CPD Report formats</a></li>
|
||
|
||
|
||
|
||
</ul>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="subfolders">
|
||
<a href="#">Extending PMD</a>
|
||
<ul>
|
||
|
||
|
||
|
||
<li><a href="pmd_userdocs_extending_writing_rules_intro.html">Introduction to writing rules</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_userdocs_extending_your_first_rule.html">Your first rule</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_userdocs_extending_writing_xpath_rules.html">XPath rules</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_userdocs_extending_writing_java_rules.html">Java rules</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_userdocs_extending_designer_reference.html">Rule designer reference</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_userdocs_extending_defining_properties.html">Defining rule properties</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_userdocs_extending_rule_guidelines.html">Rule guidelines</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_userdocs_extending_testing.html">Testing your rules</a></li>
|
||
|
||
|
||
|
||
</ul>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="subfolders">
|
||
<a href="#">Tools / Integrations</a>
|
||
<ul>
|
||
|
||
|
||
|
||
<li><a href="pmd_userdocs_tools_maven.html">Maven PMD Plugin</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_userdocs_tools_gradle.html">Gradle</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_userdocs_tools_ant.html">Ant</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_userdocs_tools_java_api.html">PMD Java API</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_userdocs_tools_ci.html">CI integrations</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_userdocs_tools.html">Other Tools / Integrations</a></li>
|
||
|
||
|
||
|
||
</ul>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</li>
|
||
|
||
|
||
|
||
<li>
|
||
|
||
<a href="#">Rule Reference</a>
|
||
|
||
<ul>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="subfolders">
|
||
<a href="#">Apex Rules</a>
|
||
<ul>
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_apex.html">Index</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_apex_bestpractices.html">Best Practices</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_apex_codestyle.html">Code Style</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_apex_design.html">Design</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_apex_documentation.html">Documentation</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_apex_errorprone.html">Error Prone</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_apex_performance.html">Performance</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_apex_security.html">Security</a></li>
|
||
|
||
|
||
|
||
</ul>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="subfolders">
|
||
<a href="#">HTML Rules</a>
|
||
<ul>
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_html.html">Index</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_html_bestpractices.html">Best Practices</a></li>
|
||
|
||
|
||
|
||
</ul>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="subfolders">
|
||
<a href="#">Java Rules</a>
|
||
<ul>
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_java.html">Index</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_java_bestpractices.html">Best Practices</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_java_codestyle.html">Code Style</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_java_design.html">Design</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_java_documentation.html">Documentation</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_java_errorprone.html">Error Prone</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_java_multithreading.html">Multithreading</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_java_performance.html">Performance</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_java_security.html">Security</a></li>
|
||
|
||
|
||
|
||
</ul>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="subfolders">
|
||
<a href="#">Java Server Pages Rules</a>
|
||
<ul>
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_jsp.html">Index</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_jsp_bestpractices.html">Best Practices</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_jsp_codestyle.html">Code Style</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_jsp_design.html">Design</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_jsp_errorprone.html">Error Prone</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_jsp_security.html">Security</a></li>
|
||
|
||
|
||
|
||
</ul>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="subfolders">
|
||
<a href="#">JavaScript Rules</a>
|
||
<ul>
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_ecmascript.html">Index</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_ecmascript_bestpractices.html">Best Practices</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_ecmascript_codestyle.html">Code Style</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_ecmascript_errorprone.html">Error Prone</a></li>
|
||
|
||
|
||
|
||
</ul>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="subfolders">
|
||
<a href="#">Kotlin Rules</a>
|
||
<ul>
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_kotlin.html">Index</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_kotlin_bestpractices.html">Best Practices</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_kotlin_errorprone.html">Error Prone</a></li>
|
||
|
||
|
||
|
||
</ul>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="subfolders">
|
||
<a href="#">Maven POM Rules</a>
|
||
<ul>
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_pom.html">Index</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_pom_errorprone.html">Error Prone</a></li>
|
||
|
||
|
||
|
||
</ul>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="subfolders">
|
||
<a href="#">Modelica Rules</a>
|
||
<ul>
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_modelica.html">Index</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_modelica_bestpractices.html">Best Practices</a></li>
|
||
|
||
|
||
|
||
</ul>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="subfolders">
|
||
<a href="#">PLSQL Rules</a>
|
||
<ul>
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_plsql.html">Index</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_plsql_bestpractices.html">Best Practices</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_plsql_codestyle.html">Code Style</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_plsql_design.html">Design</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_plsql_errorprone.html">Error Prone</a></li>
|
||
|
||
|
||
|
||
</ul>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="subfolders">
|
||
<a href="#">Salesforce VisualForce Rules</a>
|
||
<ul>
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_vf.html">Index</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_vf_security.html">Security</a></li>
|
||
|
||
|
||
|
||
</ul>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="subfolders">
|
||
<a href="#">Scala Rules</a>
|
||
<ul>
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_scala.html">Index</a></li>
|
||
|
||
|
||
|
||
</ul>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="subfolders">
|
||
<a href="#">Swift Rules</a>
|
||
<ul>
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_swift.html">Index</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_swift_bestpractices.html">Best Practices</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_swift_errorprone.html">Error Prone</a></li>
|
||
|
||
|
||
|
||
</ul>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="subfolders">
|
||
<a href="#">VM Rules</a>
|
||
<ul>
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_vm.html">Index</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_vm_bestpractices.html">Best Practices</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_vm_design.html">Design</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_vm_errorprone.html">Error Prone</a></li>
|
||
|
||
|
||
|
||
</ul>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="subfolders">
|
||
<a href="#">WSDL Rules</a>
|
||
<ul>
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_wsdl.html">Index</a></li>
|
||
|
||
|
||
|
||
</ul>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="subfolders">
|
||
<a href="#">XML Rules</a>
|
||
<ul>
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_xml.html">Index</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_xml_errorprone.html">Error Prone</a></li>
|
||
|
||
|
||
|
||
</ul>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="subfolders">
|
||
<a href="#">XSL Rules</a>
|
||
<ul>
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_xsl.html">Index</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_xsl_codestyle.html">Code Style</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_rules_xsl_performance.html">Performance</a></li>
|
||
|
||
|
||
|
||
</ul>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</li>
|
||
|
||
|
||
|
||
<li>
|
||
|
||
<a href="#">Language-Specific Documentation</a>
|
||
|
||
<ul>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_languages_configuration.html">Language configuration</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_languages_apex.html">Apex</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_languages_java.html">Java</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_languages_js_ts.html">JavaScript / TypeScript</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_languages_jsp.html">JSP</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_languages_kotlin.html">Kotlin</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_languages_plsql.html">PLSQL</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_languages_visualforce.html">Visualforce</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_languages_xml.html">XML and XML dialects</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_languages_html.html">HTML</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_languages_gherkin.html">Gherkin</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_languages_julia.html">Julia</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_languages_coco.html">Coco</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</li>
|
||
|
||
|
||
|
||
<li>
|
||
|
||
<a href="#">Developer Documentation</a>
|
||
|
||
<ul>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_devdocs_development.html">Developer resources</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_devdocs_building.html">Building PMD from source</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="https://github.com/pmd/pmd/blob/master/CONTRIBUTING.md" target="_blank">Contributing</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_devdocs_writing_documentation.html">Writing documentation</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_devdocs_roadmap.html">Roadmap</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_devdocs_how_pmd_works.html">How PMD works</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_devdocs_pmdtester.html">Pmdtester</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_devdocs_rule_deprecation_policy.html">Rule Deprecation Policy</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="subfolders">
|
||
<a href="#">Major contributions</a>
|
||
<ul>
|
||
|
||
|
||
|
||
<li><a href="pmd_devdocs_major_rule_guidelines.html">Rule Guidelines</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_devdocs_major_adding_new_language_javacc.html">Adding a new language (JavaCC)</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_devdocs_major_adding_new_language_antlr.html">Adding a new language (ANTLR)</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_devdocs_major_adding_new_cpd_language.html">Adding a new CPD language</a></li>
|
||
|
||
|
||
|
||
</ul>
|
||
</li>
|
||
|
||
|
||
|
||
<li class="subfolders">
|
||
<a href="#">Experimental features</a>
|
||
<ul>
|
||
|
||
|
||
|
||
<li><a href="pmd_devdocs_experimental_ast_dump.html">Creating (XML) dump of the AST</a></li>
|
||
|
||
|
||
|
||
</ul>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</li>
|
||
|
||
|
||
|
||
<li>
|
||
|
||
<a href="#">Project documentation</a>
|
||
|
||
<ul>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="subfolders">
|
||
<a href="#">Trivia about PMD</a>
|
||
<ul>
|
||
|
||
|
||
|
||
<li><a href="pmd_projectdocs_trivia_news.html">PMD in the press</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_projectdocs_trivia_products.html">Products & books related to PMD</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_projectdocs_trivia_similarprojects.html">Similar projects</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_projectdocs_trivia_meaning.html">What does 'PMD' mean?</a></li>
|
||
|
||
|
||
|
||
</ul>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_projectdocs_logo.html">Logo</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_projectdocs_faq.html">FAQ</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="license.html">License</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_projectdocs_credits.html">Credits</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_release_notes_old.html">Old release notes</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_projectdocs_decisions.html">Decisions</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
<li class="subfolders">
|
||
<a href="#">Project management</a>
|
||
<ul>
|
||
|
||
|
||
|
||
<li><a href="pmd_projectdocs_committers_infrastructure.html">Infrastructure</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_projectdocs_committers_releasing.html">Release process</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_projectdocs_committers_merging_pull_requests.html">Merging pull requests</a></li>
|
||
|
||
|
||
|
||
|
||
|
||
<li><a href="pmd_projectdocs_committers_main_landing_page.html">Main Landing page</a></li>
|
||
|
||
|
||
|
||
</ul>
|
||
</li>
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
</ul>
|
||
</li>
|
||
|
||
|
||
|
||
</ul>
|
||
|
||
</div>
|
||
|
||
|
||
|
||
<!-- Content Column -->
|
||
<div class="col-md-9" id="tg-sb-content">
|
||
<header>
|
||
<div class="row">
|
||
<div class="col-lg-12">
|
||
<a href="./" role="button"
|
||
><i class="fa fa-home fa-lg"></i
|
||
></a>
|
||
» PMD Release Notes
|
||
<a
|
||
target="_blank"
|
||
href="https://github.com/pmd/pmd/blob/master/docs/pages/release_notes.md"
|
||
class="float-right"
|
||
role="button"
|
||
><i class="fab fa-github fa-lg"></i> Edit on GitHub</a
|
||
>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<hr />
|
||
</header>
|
||
|
||
|
||
<div class="post-header">
|
||
<h1 class="post-title-main">PMD Release Notes</h1>
|
||
</div>
|
||
|
||
<div class="post-content" data-github-edit-url="https://github.com/pmd/pmd/blob/master/docs/pages/release_notes.md">
|
||
|
||
|
||
<div id="inline-toc"><!-- empty, move TOC here when screen size too small --></div>
|
||
|
||
|
||
<h2 id="27-may-2023---700-snapshot">27-May-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-rc2">Changes since 7.0.0-rc2</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-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>
|
||
|
||
<h4 id="fixed-issues">Fixed issues</h4>
|
||
|
||
<ul>
|
||
<li>miscellaneous
|
||
<ul>
|
||
<li><a href="https://github.com/pmd/pmd/pull/4460">#4460</a>: Fix assembly-plugin warnings</li>
|
||
</ul>
|
||
</li>
|
||
<li>core
|
||
<ul>
|
||
<li><a href="https://github.com/pmd/pmd/issues/4454">#4454</a>: [core] “Unknown option: ‘-min’” but is referenced in documentation</li>
|
||
</ul>
|
||
</li>
|
||
<li>java-bestpractices
|
||
<ul>
|
||
<li><a href="https://github.com/pmd/pmd/issues/4503">#4503</a>: [java] JUnitTestsShouldIncludeAssert: false negative with TestNG</li>
|
||
</ul>
|
||
</li>
|
||
<li>java-codestyle
|
||
<ul>
|
||
<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/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/4557">#4557</a>: [java] UnnecessaryImport FP with static imports of overloaded methods</li>
|
||
</ul>
|
||
</li>
|
||
<li>java-design
|
||
<ul>
|
||
<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/pull/4549">#4549</a>: [java] Make LawOfDemeter results deterministic</li>
|
||
</ul>
|
||
</li>
|
||
<li>java-errorprone
|
||
<ul>
|
||
<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/issues/4457">#4457</a>: [java] OverrideBothEqualsAndHashcode: false negative with anonymous classes</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/4546">#4546</a>: [java] OverrideBothEqualsAndHashCode ignores records</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
|
||
<h4 id="api-changes">API Changes</h4>
|
||
|
||
<ul>
|
||
<li>The following previously deprecated classes have been removed:
|
||
<ul>
|
||
<li>pmd-core
|
||
<ul>
|
||
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.PMD</code></li>
|
||
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.cli.PMDCommandLineInterface</code></li>
|
||
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.cli.PMDParameters</code></li>
|
||
<li><code class="language-plaintext highlighter-rouge">net.sourceforge.pmd.cli.PmdParametersParseResult</code></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li>
|
||
<p>The asset filenames of PMD on <a href="https://github.com/pmd/pmd/releases">GitHub Releases</a> are
|
||
now <code class="language-plaintext highlighter-rouge">pmd-dist-<version>-bin.zip</code>, <code class="language-plaintext highlighter-rouge">pmd-dist-<version>-src.zip</code> and <code class="language-plaintext highlighter-rouge">pmd-dist-<version>-doc.zip</code>.
|
||
Keep that in mind, if you have an automated download script.</p>
|
||
|
||
<p>The structure inside the ZIP files stay the same, e.g. we still provide inside the binary distribution
|
||
ZIP file the base directory <code class="language-plaintext highlighter-rouge">pmd-bin-<version></code>.</p>
|
||
</li>
|
||
<li>The CLI option <code class="language-plaintext highlighter-rouge">--stress</code> (or <code class="language-plaintext highlighter-rouge">-stress</code>) has been removed without replacement.</li>
|
||
<li>The CLI option <code class="language-plaintext highlighter-rouge">--minimum-priority</code> was changed with 7.0.0-rc1 to only take the following values:
|
||
High, Medium High, Medium, Medium Low, Low. With 7.0.0-rc2 compatibility has been restored, so that the equivalent
|
||
integer values (1 to 5) are supported as well.</li>
|
||
</ul>
|
||
|
||
<h4 id="external-contributions">External Contributions</h4>
|
||
|
||
<ul>
|
||
<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/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/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/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/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>
|
||
</ul>
|
||
|
||
<h3 id="-major-features-and-enhancements">🚀 Major Features and Enhancements</h3>
|
||
|
||
<h4 id="new-official-logo">New official logo</h4>
|
||
|
||
<p>The new official logo of PMD:</p>
|
||
|
||
<p><img src="images/logo/pmd-logo-300px.png" alt="New PMD Logo" /></p>
|
||
|
||
<h4 id="revamped-java-module">Revamped Java module</h4>
|
||
|
||
<ul>
|
||
<li>Java grammar substantially refactored - more correct regarding the Java Language Specification (JLS)</li>
|
||
<li>Built-in rules have been upgraded for the changed AST</li>
|
||
<li>Rewritten type resolution framework and symbol table correctly implements the JLS</li>
|
||
<li>AST exposes more semantic information (method calls, field accesses)</li>
|
||
</ul>
|
||
|
||
<p>For more information, see the <a href="pmd_release_notes_pmd7.html">Detailed Release Notes for PMD 7</a>.</p>
|
||
|
||
<p>Contributors: <a href="https://github.com/oowekyala">Clément Fournier</a> (@oowekyala),
|
||
<a href="https://github.com/adangel">Andreas Dangel</a> (@adangel),
|
||
<a href="https://github.com/jsotuyod">Juan Martín Sotuyo Dodero</a> (@jsotuyod)</p>
|
||
|
||
<h4 id="revamped-command-line-interface">Revamped Command Line Interface</h4>
|
||
|
||
<ul>
|
||
<li>unified and consistent Command Line Interface for both Linux/Unix and Windows across our different utilities</li>
|
||
<li>single script <code class="language-plaintext highlighter-rouge">pmd</code> (<code class="language-plaintext highlighter-rouge">pmd.bat</code> for Windows) to launch the different utilities:
|
||
<ul>
|
||
<li><code class="language-plaintext highlighter-rouge">pmd check</code> to run PMD rules and analyze a project</li>
|
||
<li><code class="language-plaintext highlighter-rouge">pmd cpd</code> to run CPD (copy paste detector)</li>
|
||
<li><code class="language-plaintext highlighter-rouge">pmd designer</code> to run the PMD Rule Designer</li>
|
||
</ul>
|
||
</li>
|
||
<li>progress bar support for <code class="language-plaintext highlighter-rouge">pmd check</code></li>
|
||
<li>shell completion</li>
|
||
</ul>
|
||
|
||
<p><img src="images/userdocs/pmd-demo.gif" alt="Demo" /></p>
|
||
|
||
<p>For more information, see the <a href="pmd_release_notes_pmd7.html">Detailed Release Notes for PMD 7</a>.</p>
|
||
|
||
<p>Contributors: <a href="https://github.com/jsotuyod">Juan Martín Sotuyo Dodero</a> (@jsotuyod)</p>
|
||
|
||
<h4 id="full-antlr-support">Full Antlr support</h4>
|
||
|
||
<ul>
|
||
<li><a href="https://www.antlr.org/">Antlr</a> based grammars can now be used to build full-fledged PMD rules.</li>
|
||
<li>Previously, Antlr grammar could only be used for CPD</li>
|
||
<li>New supported languages: Swift and Kotlin</li>
|
||
</ul>
|
||
|
||
<p>For more information, see the <a href="pmd_release_notes_pmd7.html">Detailed Release Notes for PMD 7</a>.</p>
|
||
|
||
<p>Contributors: <a href="https://github.com/lsoncini">Lucas Soncini</a> (@lsoncini),
|
||
<a href="https://github.com/matifraga">Matías Fraga</a> (@matifraga),
|
||
<a href="https://github.com/tomidelucca">Tomás De Lucca</a> (@tomidelucca)</p>
|
||
|
||
<h4 id="updated-pmd-designer">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-1">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>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="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>
|
||
|
||
<h3 id="-new-and-changed-rules">🌟 New and changed rules</h3>
|
||
|
||
<h4 id="new-rules">New Rules</h4>
|
||
|
||
<p><strong>Apex</strong></p>
|
||
<ul>
|
||
<li><a href="pmd_rules_apex_design.html#unusedmethod"><code class="language-plaintext highlighter-rouge">UnusedMethod</code></a> finds unused methods in your code.</li>
|
||
</ul>
|
||
|
||
<p><strong>Java</strong></p>
|
||
<ul>
|
||
<li><a href="pmd_rules_java_codestyle.html#unnecessaryboxing"><code class="language-plaintext highlighter-rouge">UnnecessaryBoxing</code></a> reports boxing and unboxing conversions that may be made implicit.</li>
|
||
</ul>
|
||
|
||
<p><strong>Kotlin</strong></p>
|
||
<ul>
|
||
<li><a href="pmd_rules_kotlin_bestpractices.html#functionnametooshort"><code class="language-plaintext highlighter-rouge">FunctionNameTooShort</code></a></li>
|
||
<li><a href="pmd_rules_kotlin_errorprone.html#overridebothequalsandhashcode"><code class="language-plaintext highlighter-rouge">OverrideBothEqualsAndHashcode</code></a></li>
|
||
</ul>
|
||
|
||
<p><strong>Swift</strong></p>
|
||
<ul>
|
||
<li><a href="pmd_rules_swift_bestpractices.html#prohibitedinterfacebuilder"><code class="language-plaintext highlighter-rouge">ProhibitedInterfaceBuilder</code></a></li>
|
||
<li><a href="pmd_rules_swift_bestpractices.html#unavailablefunction"><code class="language-plaintext highlighter-rouge">UnavailableFunction</code></a></li>
|
||
<li><a href="pmd_rules_swift_errorprone.html#forcecast"><code class="language-plaintext highlighter-rouge">ForceCast</code></a></li>
|
||
<li><a href="pmd_rules_swift_errorprone.html#forcetry"><code class="language-plaintext highlighter-rouge">ForceTry</code></a></li>
|
||
</ul>
|
||
|
||
<h4 id="changed-rules">Changed Rules</h4>
|
||
|
||
<p><strong>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>
|
||
</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>
|
||
</ul>
|
||
|
||
<h3 id="-compatibility-and-migration-notes">💥 Compatibility and migration notes</h3>
|
||
<p>See <a href="pmd_release_notes_pmd7.html">Detailed Release Notes for PMD 7</a>.</p>
|
||
|
||
<h3 id="-fixed-issues">🐛 Fixed Issues</h3>
|
||
|
||
<ul>
|
||
<li>miscellaneous
|
||
<ul>
|
||
<li><a href="https://github.com/pmd/pmd/issues/881">#881</a>: [all] Breaking API changes for 7.0.0</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/896">#896</a>: [all] Use slf4j</li>
|
||
<li><a href="https://github.com/pmd/pmd/pull/1431">#1431</a>: [ui] Remove old GUI applications (designerold, bgastviewer)</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/1451">#1451</a>: [core] RulesetFactoryCompatibility stores the whole ruleset file in memory as a string</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/2496">#2496</a>: Update PMD 7 Logo on landing page</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/2497">#2497</a>: PMD 7 Logo page</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/2498">#2498</a>: Update PMD 7 Logo in documentation</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/3797">#3797</a>: [all] Use JUnit5</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/4462">#4462</a>: Provide Software Bill of Materials (SBOM)</li>
|
||
<li><a href="https://github.com/pmd/pmd/pull/4460">#4460</a>: Fix assembly-plugin warnings</li>
|
||
</ul>
|
||
</li>
|
||
<li>ant
|
||
<ul>
|
||
<li><a href="https://github.com/pmd/pmd/issues/4080">#4080</a>: [ant] Split off Ant integration into a new submodule</li>
|
||
</ul>
|
||
</li>
|
||
<li>core
|
||
<ul>
|
||
<li><a href="https://github.com/pmd/pmd/issues/880">#880</a>: [core] Make visitors generic</li>
|
||
<li><a href="https://github.com/pmd/pmd/pull/1622">#1622</a>: [core] NodeStream API</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/1687">#1687</a>: [core] Deprecate and Remove XPath 1.0 support</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/1785">#1785</a>: [core] Allow abstract node types to be valid rulechain visits</li>
|
||
<li><a href="https://github.com/pmd/pmd/pull/1825">#1825</a>: [core] Support NoAttribute for XPath</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/2038">#2038</a>: [core] Remove DCD</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/2218">#2218</a>: [core] <code class="language-plaintext highlighter-rouge">isFindBoundary</code> should not be an attribute</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/2234">#2234</a>: [core] Consolidate PMD CLI into a single command</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/2239">#2239</a>: [core] Merging Javacc build scripts</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/2500">#2500</a>: [core] Clarify API for ANTLR based languages</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/2518">#2518</a>: [core] Language properties</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/2602">#2602</a>: [core] Remove ParserOptions</li>
|
||
<li><a href="https://github.com/pmd/pmd/pull/2614">#2614</a>: [core] Upgrade Saxon, add XPath 3.1, remove Jaxen</li>
|
||
<li><a href="https://github.com/pmd/pmd/pull/2696">#2696</a>: [core] Remove DFA</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/2821">#2821</a>: [core] Rule processing error filenames are missing paths</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/2873">#2873</a>: [core] Utility classes in pmd 7</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/2885">#2885</a>: [core] Error recovery mode</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/3203">#3203</a>: [core] Replace RuleViolationFactory implementations with ViolationDecorator</li>
|
||
<li><a href="https://github.com/pmd/pmd/pull/3692">#3692</a>: [core] Analysis listeners</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/3782">#3782</a>: [core] Language lifecycle</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/3815">#3815</a>: [core] Update Saxon HE to 10.7</li>
|
||
<li><a href="https://github.com/pmd/pmd/pull/3893">#3893</a>: [core] Text documents</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/3902">#3902</a>: [core] Violation decorators</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/3918">#3918</a>: [core] Make LanguageRegistry non static</li>
|
||
<li><a href="https://github.com/pmd/pmd/pull/3922">#3922</a>: [core] Better error reporting for the ruleset parser</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/4035">#4035</a>: [core] ConcurrentModificationException in DefaultRuleViolationFactory</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/4120">#4120</a>: [core] Explicitly name all language versions</li>
|
||
<li><a href="https://github.com/pmd/pmd/pull/4353">#4353</a>: [core] Micro optimizations for Node API</li>
|
||
<li><a href="https://github.com/pmd/pmd/pull/4365">#4365</a>: [core] Improve benchmarking</li>
|
||
<li><a href="https://github.com/pmd/pmd/pull/4420">#4420</a>: [core] Remove PMD.EOL</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/4454">#4454</a>: [core] “Unknown option: ‘-min’” but is referenced in documentation</li>
|
||
</ul>
|
||
</li>
|
||
<li>cli
|
||
<ul>
|
||
<li><a href="https://github.com/pmd/pmd/issues/2234">#2234</a>: [core] Consolidate PMD CLI into a single command</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/3828">#3828</a>: [core] Progress reporting</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/4079">#4079</a>: [cli] Split off CLI implementation into a pmd-cli submodule</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/4482">#4482</a>: [cli] pmd.bat can only be executed once</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/4484">#4484</a>: [cli] ast-dump with no properties produce an NPE</li>
|
||
</ul>
|
||
</li>
|
||
<li>doc
|
||
<ul>
|
||
<li><a href="https://github.com/pmd/pmd/issues/2501">#2501</a>: [doc] Verify ANTLR Documentation</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/4438">#4438</a>: [doc] Documentation links in VS Code are outdated</li>
|
||
</ul>
|
||
</li>
|
||
<li>testing
|
||
<ul>
|
||
<li><a href="https://github.com/pmd/pmd/issues/2435">#2435</a>: [test] Remove duplicated Dummy language module</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/4234">#4234</a>: [test] Tests that change the logging level do not work</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
|
||
<p>Language specific fixes:</p>
|
||
|
||
<ul>
|
||
<li>apex
|
||
<ul>
|
||
<li><a href="https://github.com/pmd/pmd/issues/1937">#1937</a>: [apex] Apex should only have a single RootNode</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/1648">#1648</a>: [apex,vf] Remove CodeClimate dependency</li>
|
||
<li><a href="https://github.com/pmd/pmd/pull/1750">#1750</a>: [apex] Remove apex statistical rules</li>
|
||
<li><a href="https://github.com/pmd/pmd/pull/2836">#2836</a>: [apex] Remove Apex ProjectMirror</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/4427">#4427</a>: [apex] ApexBadCrypto test failing to detect inline code</li>
|
||
</ul>
|
||
</li>
|
||
<li>apex-design
|
||
<ul>
|
||
<li><a href="https://github.com/pmd/pmd/issues/2667">#2667</a>: [apex] Integrate nawforce/ApexLink to build robust Unused rule</li>
|
||
<li><a href="https://github.com/pmd/pmd/issues/4509">#4509</a>: [apex] ExcessivePublicCount doesn’t consider inner classes correctly</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/4405">#4405</a>: [java] Processing error with ArrayIndexOutOfBoundsException</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/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>
|
||
</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/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>
|
||
</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/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/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>
|
||
</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>
|
||
</ul>
|
||
</li>
|
||
<li>kotlin
|
||
<ul>
|
||
<li><a href="https://github.com/pmd/pmd/issues/419">#419</a>: [kotlin] Add support for Kotlin</li>
|
||
<li><a href="https://github.com/pmd/pmd/pull/4389">#4389</a>: [kotlin] Update grammar to version 1.8</li>
|
||
</ul>
|
||
</li>
|
||
<li>swift
|
||
<ul>
|
||
<li><a href="https://github.com/pmd/pmd/pull/1877">#1877</a>: [swift] Feature/swift rules</li>
|
||
<li><a href="https://github.com/pmd/pmd/pull/1882">#1882</a>: [swift] UnavailableFunction Swift rule</li>
|
||
</ul>
|
||
</li>
|
||
<li>xml
|
||
<ul>
|
||
<li><a href="https://github.com/pmd/pmd/pull/1800">#1800</a>: [xml] Unimplement org.w3c.dom.Node from the XmlNodeWrapper</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
|
||
<h3 id="-external-contributions">✨ External Contributions</h3>
|
||
|
||
<ul>
|
||
<li><a href="https://github.com/pmd/pmd/pull/1658">#1658</a>: [core] Node support for Antlr-based languages - <a href="https://github.com/matifraga">Matías Fraga</a> (@matifraga)</li>
|
||
<li><a href="https://github.com/pmd/pmd/pull/1698">#1698</a>: [core] [swift] Antlr Base Parser adapter and Swift Implementation - <a href="https://github.com/lsoncini">Lucas Soncini</a> (@lsoncini)</li>
|
||
<li><a href="https://github.com/pmd/pmd/pull/1774">#1774</a>: [core] Antlr visitor rules - <a href="https://github.com/lsoncini">Lucas Soncini</a> (@lsoncini)</li>
|
||
<li><a href="https://github.com/pmd/pmd/pull/1877">#1877</a>: [swift] Feature/swift rules - <a href="https://github.com/matifraga">Matías Fraga</a> (@matifraga)</li>
|
||
<li><a href="https://github.com/pmd/pmd/pull/1881">#1881</a>: [doc] Add ANTLR documentation - <a href="https://github.com/matifraga">Matías Fraga</a> (@matifraga)</li>
|
||
<li><a href="https://github.com/pmd/pmd/pull/1882">#1882</a>: [swift] UnavailableFunction Swift rule - <a href="https://github.com/tomidelucca">Tomás de Lucca</a> (@tomidelucca)</li>
|
||
<li><a href="https://github.com/pmd/pmd/pull/2830">#2830</a>: [apex] Apexlink POC - <a href="https://github.com/nawforce">Kevin Jones</a> (@nawforce)</li>
|
||
<li><a href="https://github.com/pmd/pmd/pull/3866">#3866</a>: [core] Add CLI Progress Bar - <a href="https://github.com/JerritEic">@JerritEic</a> (@JerritEic)</li>
|
||
<li><a href="https://github.com/pmd/pmd/pull/4402">#4402</a>: [javascript] CPD: add support for Typescript using antlr4 grammar - <a href="https://github.com/pguyot">Paul Guyot</a> (@pguyot)</li>
|
||
<li><a href="https://github.com/pmd/pmd/pull/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/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>
|
||
</ul>
|
||
|
||
<h3 id="-stats">📈 Stats</h3>
|
||
<ul>
|
||
<li>4557 commits</li>
|
||
<li>572 closed tickets & PRs</li>
|
||
<li>Days since last release: 35</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">
|
||
©2023 PMD Open Source Project. All rights
|
||
reserved. <br />
|
||
Site last generated: May 28, 2023 <br />
|
||
<p>
|
||
<img src="images/logo/pmd-logo-70px.png" alt="PMD
|
||
logo"/>
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</footer>
|
||
|
||
|
||
</div>
|
||
|
||
<!-- /.row -->
|
||
</div>
|
||
<!-- /.container -->
|
||
</div>
|
||
|
||
|
||
<!-- Sticky TOC column -->
|
||
<div class="toc-col">
|
||
<div id="toc"></div>
|
||
</div>
|
||
|
||
<!-- /.toc-container-wrapper -->
|
||
</div>
|
||
</div>
|
||
|
||
<script type="application/javascript" src="assets/jquery-3.5.1/jquery-3.5.1.min.js"></script>
|
||
<script type="application/javascript" src="assets/anchorjs-4.2.2/anchor.min.js"></script>
|
||
<script type="application/javascript" src="assets/navgoco-0.2.1/src/jquery.navgoco.min.js"></script>
|
||
<script type="application/javascript" src="assets/bootstrap-4.5.2-dist/js/bootstrap.bundle.min.js"></script>
|
||
<script type="application/javascript" src="assets/Simple-Jekyll-Search-1.0.8/dest/jekyll-search.js"></script>
|
||
<script type="application/javascript" src="assets/jekyll-table-of-contents/toc.js"></script>
|
||
<script type="application/javascript" src="js/tabstate.js"></script>
|
||
<script type="application/javascript" src="js/customscripts.js"></script>
|
||
|
||
|
||
|
||
</body>
|
||
</html>
|