<!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" href="css/syntax.css"> <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css"> <!--<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">--> <link rel="stylesheet" href="css/modern-business.css"> <link rel="stylesheet" href="css/lavish-bootstrap.css"> <link rel="stylesheet" href="css/customstyles.css"> <link rel="stylesheet" href="css/theme-blue.css"> <link rel="stylesheet" href="css/pmd-customstyles.css"> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script> <script src="js/jquery.navgoco.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/anchor-js/2.0.0/anchor.min.js"></script> <script src="js/toc.js"></script> <script src="js/customscripts.js"></script> <link rel="shortcut icon" href="images/favicon.ico" type="image/x-icon"> <link rel="icon" href="images/favicon.ico" type="image/x-icon"> <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> <!--[if lt IE 9]> <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> <![endif]--> <link rel="alternate" type="application/rss+xml" title="" href="https://pmd.github.io/pmd/feed.xml"> <script> $(document).ready(function() { // Initialize navgoco with default options $("#mysidebar").navgoco({ caretHtml: '', accordion: true, openClass: 'active', // open save: false, // leave false or nav highlighting doesn't work right cookie: { name: 'navgoco', expires: false, path: '/' }, slide: { duration: 400, easing: 'swing' } }); $("#collapseAll").click(function(e) { e.preventDefault(); $("#mysidebar").navgoco('toggle', false); }); $("#expandAll").click(function(e) { e.preventDefault(); $("#mysidebar").navgoco('toggle', true); }); }); </script> <script> $(function () { $('[data-toggle="tooltip"]').tooltip() }) </script> <script> $(document).ready(function() { $("#tg-sb-link").click(function() { $("#tg-sb-sidebar").toggle(); $("#tg-sb-content").toggleClass('col-md-9'); $("#tg-sb-content").toggleClass('col-md-12'); $("#tg-sb-icon").toggleClass('fa-toggle-on'); $("#tg-sb-icon").toggleClass('fa-toggle-off'); }); }); </script> </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-inverse navbar-fixed-top"> <div class="container topnavlinks"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="fa fa-home fa-lg navbar-brand" href="index.html"> <span class="projectTitle"> PMD Source Code Analyzer Project</span></a> </div> <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> <ul class="nav navbar-nav navbar-right"> <!-- toggle sidebar button --> <li><a id="tg-sb-link" href="#"><i id="tg-sb-icon" class="fa fa-toggle-on"></i> Nav</a></li> <!-- entries without drop-downs appear here --> <li><a href="https://github.com/pmd/pmd/releases/latest" target="_blank">Download</a></li> <li><a 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.--> <!--comment out this block if you want to hide search--> <li> <!--start search--> <div id="search-demo-container"> <input type="text" id="search-input" placeholder="search..."> <ul id="results-container"></ul> </div> <script src="js/jekyll-search.js" type="text/javascript"></script> <script type="text/javascript"> SimpleJekyllSearch.init({ searchInput: document.getElementById('search-input'), resultsContainer: document.getElementById('results-container'), dataSource: 'search.json', searchResultTemplate: '<li><a href="{url}" title="PMD Release Notes">{title}</a></li>', noResultsText: 'No results found.', limit: 10, fuzzy: true, }) </script> <!--end search--> </li> </ul> </div> </div> <!-- /.container --> </nav> <!-- Page Content --> <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 6.35.0</li> <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_next_major_development.html">PMD 7.0.0 development</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 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_metrics_howto.html">Using and defining code metrics</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="#">Ecmascript 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="#">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="#">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="#">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="#">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_jsp.html">JSP Support</a></li> <li><a href="pmd_java_metrics_index.html">Java code metrics</a></li> <li><a href="pmd_apex_metrics_index.html">Apex code metrics</a></li> <li><a href="pmd_languages_plsql.html">PLSQL</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_adding_new_language.html">Adding a new language</a></li> <li><a href="pmd_devdocs_major_adding_new_cpd_language.html">Adding a new CPD language</a></li> <li><a href="pmd_devdocs_major_adding_new_metrics_framework.html">Adding metrics support to a 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_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 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> <!-- if you aren't using the accordion, uncomment this block: <p class="external"> <a href="#" id="collapseAll">Collapse All</a> | <a href="#" id="expandAll">Expand All</a> </p> --> </ul> <!-- this highlights the active parent class in the navgoco sidebar. this is critical so that the parent expands when you're viewing a page. This must appear below the sidebar code above. Otherwise, if placed inside customscripts.js, the script runs before the sidebar code runs and the class never gets inserted.--> <script>$("li.active").parents('li').toggleClass("active");</script> </div> <!-- Content Column --> <div class="col-md-9" id="tg-sb-content"> <div class="post-header"> <h1 class="post-title-main">PMD Release Notes</h1> </div> <div class="post-content"> <!-- this handles the automatic toc. use ## for subheads to auto-generate the on-page minitoc. if you use html tags, you must supply an ID for the heading element in order for it to appear in the minitoc. --> <script> $( document ).ready(function() { // Handler for .ready() called. $('#toc').toc({ minimumHeaders: 0, listType: 'ul', showSpeed: 0, headers: 'h2,h3,h4' }); }); </script> <div id="toc"></div> <a target="_blank" href="https://github.com/pmd/pmd/blob/master/docs/pages/release_notes.md" class="btn btn-default githubEditButton" role="button"><i class="fa fa-github fa-lg"></i> Edit me</a> <h2 id="29-may-2021---6350">29-May-2021 - 6.35.0</h2> <p>The PMD team is pleased to announce PMD 6.35.0.</p> <p>This is a minor release.</p> <h3 id="new-and-noteworthy">New and noteworthy</h3> <h4 id="javascript-module-now-requires-at-least-java-8">Javascript module now requires at least Java 8</h4> <p>The latest version of <a href="https://github.com/mozilla/rhino">Rhino</a>, the implementation of JavaScript we use for parsing JavaScript code, requires at least Java 8. Therefore we decided to upgrade the pmd-javascript module to Java 8 as well. This means that from now on, a Java 8 or later runtime is required in order to analyze JavaScript code. Note that PMD core still only requires Java 7.</p> <h4 id="new-rules">New rules</h4> <p>This release ships with 3 new Java rules.</p> <ul> <li><a href="pmd_rules_java_bestpractices.html#junit5testshouldbepackageprivate"><code class="language-plaintext highlighter-rouge">JUnit5TestShouldBePackagePrivate</code></a> enforces the convention that JUnit 5 tests should have minimal visibility. You can try out this rule like so: <div class="language-xml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt"><rule</span> <span class="na">ref=</span><span class="s">"category/java/bestpractices.xml/JUnit5TestShouldBePackagePrivate"</span> <span class="nt">/></span> </code></pre></div> </div> </li> <li><a href="pmd_rules_java_design.html#cognitivecomplexity"><code class="language-plaintext highlighter-rouge">CognitiveComplexity</code></a> uses the cognitive complexity metric to find overly complex code. This metric improves on the similar cyclomatic complexity in several ways, for instance, it incentivizes using clearly readable shorthands and idioms. See the rule documentation for more details. You can try out this rule like so: <div class="language-xml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt"><rule</span> <span class="na">ref=</span><span class="s">"category/java/design.xml/CognitiveComplexity"</span> <span class="nt">/></span> </code></pre></div> </div> </li> <li><a href="pmd_rules_java_design.html#mutablestaticstate"><code class="language-plaintext highlighter-rouge">MutableStaticState</code></a> finds non-private static fields that are not final. These fields break encapsulation since these fields can be modified from anywhere within the program. You can try out this rule like so: <div class="language-xml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt"><rule</span> <span class="na">ref=</span><span class="s">"category/java/design.xml/MutableStaticState"</span> <span class="nt">/></span> </code></pre></div> </div> </li> </ul> <h4 id="modified-rules">Modified rules</h4> <ul> <li>The Java rule <a href="pmd_rules_java_errorprone.html#compareobjectswithequals"><code class="language-plaintext highlighter-rouge">CompareObjectsWithEquals</code></a> has now a new property <code class="language-plaintext highlighter-rouge">typesThatCompareByReference</code>. With that property, you can configure types, that should be whitelisted for comparison by reference. By default, <code class="language-plaintext highlighter-rouge">java.lang.Enum</code> and <code class="language-plaintext highlighter-rouge">java.lang.Class</code> are allowed, but you could add custom types here. Additionally comparisons against constants are allowed now. This makes the rule less noisy when two constants are compared. Constants are identified by looking for an all-caps identifier.</li> </ul> <h4 id="deprecated-rules">Deprecated rules</h4> <ul> <li> <p>The java rule <a href="pmd_rules_java_codestyle.html#defaultpackage"><code class="language-plaintext highlighter-rouge">DefaultPackage</code></a> has been deprecated in favor of <a href="pmd_rules_java_codestyle.html#commentdefaultaccessmodifier"><code class="language-plaintext highlighter-rouge">CommentDefaultAccessModifier</code></a>.</p> <p>The rule “DefaultPackage” assumes that any usage of package-access is accidental, and by doing so, prohibits using a really fundamental and useful feature of the language.</p> <p>To satisfy the rule, you have to make the member public even if it doesn’t need to, or make it protected, which muddies your intent even more if you don’t intend the class to be extended, and may be at odds with other rules like <a href="pmd_rules_java_codestyle.html#avoidprotectedfieldinfinalclass"><code class="language-plaintext highlighter-rouge">AvoidProtectedFieldInFinalClass</code></a>.</p> <p>The rule <a href="pmd_rules_java_codestyle.html#commentdefaultaccessmodifier"><code class="language-plaintext highlighter-rouge">CommentDefaultAccessModifier</code></a> should be used instead. It flags the same thing, but has an escape hatch.</p> </li> <li> <p>The Java rule <a href="pmd_rules_java_errorprone.html#clonethrowsclonenotsupportedexception"><code class="language-plaintext highlighter-rouge">CloneThrowsCloneNotSupportedException</code></a> has been deprecated without replacement.</p> <p>The rule has no real value as <code class="language-plaintext highlighter-rouge">CloneNotSupportedException</code> is a checked exception and therefore you need to deal with it while implementing the <code class="language-plaintext highlighter-rouge">clone()</code> method. You either need to declare the exception or catch it. If you catch it, then subclasses can’t throw it themselves explicitly. However, <code class="language-plaintext highlighter-rouge">Object.clone()</code> will still throw this exception if the <code class="language-plaintext highlighter-rouge">Cloneable</code> interface is not implemented.</p> <p>Note, this rule has also been removed from the Quickstart Ruleset (<code class="language-plaintext highlighter-rouge">rulesets/java/quickstart.xml</code>).</p> </li> </ul> <h3 id="fixed-issues">Fixed Issues</h3> <ul> <li>apex <ul> <li><a href="https://github.com/pmd/pmd/issues/3183">#3183</a>: [apex] ApexUnitTestMethodShouldHaveIsTestAnnotation false positive with helper method</li> <li><a href="https://github.com/pmd/pmd/pull/3243">#3243</a>: [apex] Correct findBoundary when traversing AST</li> </ul> </li> <li>core <ul> <li><a href="https://github.com/pmd/pmd/issues/2639">#2639</a>: [core] PMD CLI output file is not created if directory or directories in path don’t exist</li> <li><a href="https://github.com/pmd/pmd/issues/3196">#3196</a>: [core] Deprecate ThreadSafeReportListener</li> </ul> </li> <li>doc <ul> <li><a href="https://github.com/pmd/pmd/issues/3230">#3230</a>: [doc] Remove “Edit me” button for language index pages</li> </ul> </li> <li>dist <ul> <li><a href="https://github.com/pmd/pmd/issues/2466">#2466</a>: [dist] Distribution archive doesn’t include all batch scripts</li> </ul> </li> <li>java <ul> <li><a href="https://github.com/pmd/pmd/pull/3269">#3269</a>: [java] Fix NPE in MethodTypeResolution</li> </ul> </li> <li>java-bestpractices <ul> <li><a href="https://github.com/pmd/pmd/issues/1175">#1175</a>: [java] UnusedPrivateMethod FP with Junit 5 @MethodSource</li> <li><a href="https://github.com/pmd/pmd/issues/2219">#2219</a>: [java] Document Reasons to Avoid Reassigning Parameters</li> <li><a href="https://github.com/pmd/pmd/issues/2737">#2737</a>: [java] Fix misleading rule message on rule SwitchStmtsShouldHaveDefault with non-exhaustive enum switch</li> <li><a href="https://github.com/pmd/pmd/issues/3236">#3236</a>: [java] LiteralsFirstInComparisons should consider constant fields (cont’d)</li> <li><a href="https://github.com/pmd/pmd/issues/3239">#3239</a>: [java] PMD could enforce non-public methods for Junit5 / Jupiter test methods</li> <li><a href="https://github.com/pmd/pmd/issues/3254">#3254</a>: [java] AvoidReassigningParameters reports violations on wrong line numbers</li> </ul> </li> <li>java-codestyle <ul> <li><a href="https://github.com/pmd/pmd/issues/2655">#2655</a>: [java] UnnecessaryImport false positive for on-demand imports</li> <li><a href="https://github.com/pmd/pmd/issues/3206">#3206</a>: [java] Deprecate rule DefaultPackage</li> <li><a href="https://github.com/pmd/pmd/pull/3262">#3262</a>: [java] FieldDeclarationsShouldBeAtStartOfClass: false negative with anon classes</li> <li><a href="https://github.com/pmd/pmd/pull/3265">#3265</a>: [java] MethodArgumentCouldBeFinal: false negatives with interfaces and inner classes</li> <li><a href="https://github.com/pmd/pmd/pull/3266">#3266</a>: [java] LocalVariableCouldBeFinal: false negatives with interfaces, anon classes</li> <li><a href="https://github.com/pmd/pmd/pull/3274">#3274</a>: [java] OnlyOneReturn: false negative with anonymous class</li> <li><a href="https://github.com/pmd/pmd/pull/3275">#3275</a>: [java] UnnecessaryLocalBeforeReturn: false negatives with lambda and anon class</li> </ul> </li> <li>java-design <ul> <li><a href="https://github.com/pmd/pmd/issues/2780">#2780</a>: [java] DataClass example from documentation results in false-negative</li> <li><a href="https://github.com/pmd/pmd/issues/2987">#2987</a>: [java] New Rule: Public and protected static fields must be final</li> <li><a href="https://github.com/pmd/pmd/issues/2329">#2329</a>: [java] Cognitive complexity rule for Java</li> </ul> </li> <li>java-errorprone <ul> <li><a href="https://github.com/pmd/pmd/issues/3110">#3110</a>: [java] Enhance CompareObjectsWithEquals with list of exceptions</li> <li><a href="https://github.com/pmd/pmd/issues/3112">#3112</a>: [java] Deprecate rule CloneThrowsCloneNotSupportedException</li> <li><a href="https://github.com/pmd/pmd/issues/3205">#3205</a>: [java] Make CompareObjectWithEquals allow comparing against constants</li> <li><a href="https://github.com/pmd/pmd/issues/3248">#3248</a>: [java] Documentation is wrong for SingletonClassReturningNewInstance rule</li> <li><a href="https://github.com/pmd/pmd/pull/3249">#3249</a>: [java] AvoidFieldNameMatchingTypeName: False negative with interfaces</li> <li><a href="https://github.com/pmd/pmd/pull/3268">#3268</a>: [java] ConstructorCallsOverridableMethod: IndexOutOfBoundsException with annotations</li> </ul> </li> <li>java-performance <ul> <li><a href="https://github.com/pmd/pmd/issues/1438">#1438</a>: [java] InsufficientStringBufferDeclaration false positive for initial calculated StringBuilder size</li> </ul> </li> <li>javascript <ul> <li><a href="https://github.com/pmd/pmd/issues/699">#699</a>: [javascript] Update Rhino library to 1.7.13</li> <li><a href="https://github.com/pmd/pmd/issues/2081">#2081</a>: [javascript] Failing with OutOfMemoryError parsing a Javascript file</li> </ul> </li> </ul> <h3 id="api-changes">API Changes</h3> <h4 id="deprecated-api">Deprecated API</h4> <ul> <li><a href="https://docs.pmd-code.org/apidocs/pmd-core/6.35.0/net/sourceforge/pmd/PMD.html#doPMD(net.sourceforge.pmd.PMDConfiguration)"><code>PMD#doPMD</code></a> is deprecated. Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/6.35.0/net/sourceforge/pmd/PMD.html#runPMD(net.sourceforge.pmd.PMDConfiguration)"><code>PMD#runPMD</code></a> instead.</li> <li><a href="https://docs.pmd-code.org/apidocs/pmd-core/6.35.0/net/sourceforge/pmd/PMD.html#run(java.lang.String[])"><code>PMD#run</code></a> is deprecated. Use <a href="https://docs.pmd-code.org/apidocs/pmd-core/6.35.0/net/sourceforge/pmd/PMD.html#runPMD(java.lang.String...)"><code>PMD#runPMD</code></a> instead.</li> <li><a href="https://docs.pmd-code.org/apidocs/pmd-core/6.35.0/net/sourceforge/pmd/ThreadSafeReportListener.html#"><code>ThreadSafeReportListener</code></a> and the methods to use them in <a href="https://docs.pmd-code.org/apidocs/pmd-core/6.35.0/net/sourceforge/pmd/Report.html#"><code>Report</code></a> (<a href="https://docs.pmd-code.org/apidocs/pmd-core/6.35.0/net/sourceforge/pmd/Report.html#addListener(net.sourceforge.pmd.ThreadSafeReportListener)"><code>addListener</code></a>, <a href="https://docs.pmd-code.org/apidocs/pmd-core/6.35.0/net/sourceforge/pmd/Report.html#getListeners()"><code>getListeners</code></a>, <a href="https://docs.pmd-code.org/apidocs/pmd-core/6.35.0/net/sourceforge/pmd/Report.html#addListeners(java.util.List)"><code>addListeners</code></a>) are deprecated. This functionality will be replaced by another TBD mechanism in PMD 7.</li> </ul> <h3 id="external-contributions">External Contributions</h3> <ul> <li><a href="https://github.com/pmd/pmd/pull/3272">#3272</a>: [apex] correction for ApexUnitTestMethodShouldHaveIsTestAnnotation false positives - <a href="https://github.com/YodaDaCoda">William Brockhus</a></li> <li><a href="https://github.com/pmd/pmd/pull/3246">#3246</a>: [java] New Rule: MutableStaticState - <a href="https://github.com/vszholobov">Vsevolod Zholobov</a></li> <li><a href="https://github.com/pmd/pmd/pull/3247">#3247</a>: [java] New rule: JUnit5TestShouldBePackagePrivate - <a href="https://github.com/ajeans">Arnaud Jeansen</a></li> <li><a href="https://github.com/pmd/pmd/pull/3293">#3293</a>: [java] Cognitive Complexity Metric - <a href="https://github.com/borovikovd">Denis Borovikov</a></li> <li><a href="https://github.com/pmd/pmd.github.io/pull/12">pmd.github.io#12</a>: Update quickstart.html - <a href="https://github.com/devigo">Igor Lyadov</a></li> </ul> <h3 id="stats">Stats</h3> <ul> <li>143 commits</li> <li>53 closed tickets & PRs</li> <li>Days since last release: 34</li> </ul> <div class="tags"> </div> </div> <hr class="shaded"/> <footer> <div class="row"> <div class="col-lg-12 footer"> ©2021 PMD Open Source Project. All rights reserved. <br /> Site last generated: May 29, 2021 <br /> <p><img src="images/pmd-logo-small.png" alt="Company logo"/></p> </div> </div> </footer> </div> <!-- /.row --> </div> <!-- /.container --> </div> </div> </body> </html>