pmd/pmd_release_notes.html
Travis CI (pmd-bot) 5d9d30bf21 Update documentation
TRAVIS_JOB_NUMBER=3352.2
TRAVIS_COMMIT_RANGE=d68b579d79d6...21d683743cd0
2019-01-26 22:29:17 +00:00

1471 lines
44 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

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

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

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="keywords" content=" changelog, release notes">
<title>PMD Release Notes | PMD Source Code Analyzer</title>
<link rel="stylesheet" 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">&nbsp;<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">&nbsp;</div>
<!-- Content Row -->
<div class="row">
<!-- Sidebar Column -->
<div class="col-md-3" id="tg-sb-sidebar">
<ul id="mysidebar" class="nav">
<li class="sidebarTitle">PMD 6.11.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 class="subfolders">
<a href="#">Extending PMD</a>
<ul>
<li><a href="pmd_userdocs_extending_writing_pmd_rules.html">Writing a rule</a></li>
<li><a href="pmd_userdocs_extending_writing_xpath_rules.html">Writing XPath rules</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><a href="pmd_userdocs_cpd.html">Copy-paste detection</a></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_ant.html">Ant</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="#">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>
</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 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>
</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_releasing.html">Release process</a></li>
<li><a href="pmd_projectdocs_committers_merging_pull_requests.html">Merging pull requests</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="-january-2019---6110">??-January-2019 - 6.11.0</h2>
<p>The PMD team is pleased to announce PMD 6.11.0.</p>
<p>This is a minor release.</p>
<h3 id="new-and-noteworthy">New and noteworthy</h3>
<p>### Updated Apex Support</p>
<ul>
<li>The Apex language support has been bumped to version 45 (Spring 19). All new language features are now properly
parsed and processed.</li>
<li>Many nodes now expose more informations, such as the operator for BooleanExpressions. This makes these operators
consumable by XPath rules, e.g. <code class="highlighter-rouge">//BooleanExpression[@Operator='&amp;&amp;']</code>.</li>
</ul>
<h4 id="new-rules">New Rules</h4>
<ul>
<li>
<p>The new Java rule <a href="pmd_rules_java_multithreading.html#unsynchronizedstaticformatter"><code class="highlighter-rouge">UnsynchronizedStaticFormatter</code></a> (<code class="highlighter-rouge">java-multithreading</code>) detects
unsynchronized usages of static <code class="highlighter-rouge">java.text.Format</code> instances. This rule is a more generic replacement of the
rule <a href="pmd_rules_java_multithreading.html#unsynchronizedstaticdateformatter"><code class="highlighter-rouge">UnsynchronizedStaticDateFormatter</code></a> which focused just on <code class="highlighter-rouge">DateFormat</code>.</p>
</li>
<li>
<p>The new Java rule <a href="pmd_rules_java_bestpractices.html#forloopvariablecount"><code class="highlighter-rouge">ForLoopVariableCount</code></a> (<code class="highlighter-rouge">java-bestpractices</code>) checks for
the number of control variables in a for-loop. Having a lot of control variables makes it harder to understand
what the loop does. The maximum allowed number of variables is by default 1 and can be configured by a
property.</p>
</li>
<li>
<p>The new Java rule <a href="pmd_rules_java_bestpractices.html#avoidreassigningloopvariables"><code class="highlighter-rouge">AvoidReassigningLoopVariables</code></a> (<code class="highlighter-rouge">java-bestpractices</code>) searches
for loop variables that are reassigned. Changing the loop variables additionally to the loop itself can lead to
hard-to-find bugs.</p>
</li>
<li>
<p>The new Java rule <a href="pmd_rules_java_codestyle.html#usediamondoperator"><code class="highlighter-rouge">UseDiamondOperator</code></a> (<code class="highlighter-rouge">java-codestyle</code>) looks for constructor
calls with explicit type parameters. Since Java 1.7, these type parameters are not necessary anymore, as they
can be inferred now.</p>
</li>
</ul>
<h4 id="modified-rules">Modified Rules</h4>
<ul>
<li>The Java rule <a href="pmd_rules_java_codestyle.html#localvariablecouldbefinal"><code class="highlighter-rouge">LocalVariableCouldBeFinal</code></a> (<code class="highlighter-rouge">java-codestyle</code>) has a new
property <code class="highlighter-rouge">ignoreForEachDecl</code>, which is by default disabled. The new property allows for ignoring
non-final loop variables in a for-each statement.</li>
</ul>
<h4 id="deprecated-rules">Deprecated Rules</h4>
<ul>
<li>The Java rule <a href="pmd_rules_java_multithreading.html#unsynchronizedstaticdateformatter"><code class="highlighter-rouge">UnsynchronizedStaticDateFormatter</code></a> has been deprecated and
will be removed with PMD 7.0.0. The rule is replaced by the more general
<a href="pmd_rules_java_multithreading.html#unsynchronizedstaticformatter"><code class="highlighter-rouge">UnsynchronizedStaticFormatter</code></a>.</li>
</ul>
<h3 id="fixed-issues">Fixed Issues</h3>
<ul>
<li>core
<ul>
<li><a href="https://github.com/pmd/pmd/issues/1196">#1196</a>: [core] CPD results not consistent between runs</li>
<li><a href="https://github.com/pmd/pmd/issues/1496">#1496</a> [core] Refactor metrics to be dealt with generically from pmd-core</li>
</ul>
</li>
<li>apex
<ul>
<li><a href="https://github.com/pmd/pmd/pull/1542">#1542</a>: [apex] Include the documentation category</li>
<li><a href="https://github.com/pmd/pmd/issues/1546">#1546</a>: [apex] PMD parsing exception for Apex classes using inherited sharing keyword</li>
<li><a href="https://github.com/pmd/pmd/pull/1568">#1568</a>: [apex] AST node attribute @Image not usable / always null in XPath rule / Designer</li>
</ul>
</li>
<li>java
<ul>
<li><a href="https://github.com/pmd/pmd/issues/1556">#1556</a>: [java] Default methods should not be considered abstract</li>
<li><a href="https://github.com/pmd/pmd/issues/1578">#1578</a>: [java] Private field is detected as public inside nested classes in interfaces</li>
</ul>
</li>
<li>java-bestpractices
<ul>
<li><a href="https://github.com/pmd/pmd/issues/658">#658</a>: [java] OneDeclarationPerLine: False positive for loops</li>
<li><a href="https://github.com/pmd/pmd/issues/1518">#1518</a>: [java] New rule: AvoidReassigningLoopVariable</li>
<li><a href="https://github.com/pmd/pmd/issues/1519">#1519</a>: [java] New rule: ForLoopVariableCount</li>
</ul>
</li>
<li>java-codestyle
<ul>
<li><a href="https://github.com/pmd/pmd/issues/1513">#1513</a>: [java] LocalVariableCouldBeFinal: allow excluding the variable in a for-each loop</li>
<li><a href="https://github.com/pmd/pmd/issues/1517">#1517</a>: [java] New Rule: UseDiamondOperator</li>
</ul>
</li>
<li>java-errorprone
<ul>
<li><a href="https://github.com/pmd/pmd/issues/1035">#1035</a>: [java] ReturnFromFinallyBlock: False positive on lambda expression in finally block</li>
<li><a href="https://github.com/pmd/pmd/issues/1549">#1549</a>: [java] NPE in PMD 6.8.0 InvalidSlf4jMessageFormat</li>
</ul>
</li>
<li>java-multithreading
<ul>
<li><a href="https://github.com/pmd/pmd/issues/1533">#1533</a>: [java] New rule: UnsynchronizedStaticFormatter</li>
</ul>
</li>
<li>plsql
<ul>
<li>
<table>
<tbody>
<tr>
<td><a href="https://github.com/pmd/pmd/issues/1507">#1507</a>: [plsql] Parse Exception when using </td>
<td> </td>
<td> operator in where clause</td>
</tr>
</tbody>
</table>
</li>
<li><a href="https://github.com/pmd/pmd/issues/1508">#1508</a>: [plsql] Parse Exception when using SELECT COUNT(*)</li>
<li><a href="https://github.com/pmd/pmd/issues/1509">#1509</a>: [plsql] Parse Exception with OUTER/INNER Joins</li>
<li><a href="https://github.com/pmd/pmd/issues/1511">#1511</a>: [plsql] Parse Exception with IS NOT NULL</li>
<li><a href="https://github.com/pmd/pmd/issues/1583">#1583</a>: [plsql] Update Set Clause should allow multiple columns</li>
<li><a href="https://github.com/pmd/pmd/issues/1586">#1586</a>: [plsql] Parse Exception when functions are used with LIKE</li>
<li><a href="https://github.com/pmd/pmd/issues/1588">#1588</a>: [plsql] Parse Exception with function calls in WHERE clause</li>
</ul>
</li>
</ul>
<h3 id="api-changes">API Changes</h3>
<ul>
<li><a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-core/6.11.0/net/sourceforge/pmd/lang/rule/stat/StatisticalRule.html#"><code class="highlighter-rouge">StatisticalRule</code></a> and the related helper classes and base rule classes
are deprecated for removal in 7.0.0. This includes all of <a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-core/6.11.0/net/sourceforge/pmd/stat/package-summary.html#"><code class="highlighter-rouge">net.sourceforge.pmd.stat</code></a> and <a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-core/6.11.0/net/sourceforge/pmd/lang/rule/stat/package-summary.html#"><code class="highlighter-rouge">net.sourceforge.pmd.lang.rule.stat</code></a>,
and also <a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-java/6.11.0/net/sourceforge/pmd/lang/java/rule/AbstractStatisticalJavaRule.html#"><code class="highlighter-rouge">AbstractStatisticalJavaRule</code></a>, <a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-apex/6.11.0/net/sourceforge/pmd/lang/apex/rule/AbstractStatisticalApexRule.html#"><code class="highlighter-rouge">AbstractStatisticalApexRule</code></a> and the like.
The methods <a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-core/6.11.0/net/sourceforge/pmd/Report.html#addMetric(net.sourceforge.pmd.stat.Metric)"><code class="highlighter-rouge">Report#addMetric</code></a> and <a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-core/6.11.0/net/sourceforge/pmd/ThreadSafeReportListener.html#metricAdded(net.sourceforge.pmd.stat.Metric)"><code class="highlighter-rouge">metricAdded</code></a>
will also be removed.</li>
<li><a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-core/6.11.0/net/sourceforge/pmd/properties/PropertySource.html#setProperty(net.sourceforge.pmd.properties.MultiValuePropertyDescriptor,Object[])"><code class="highlighter-rouge">setProperty</code></a> is deprecated,
because <a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-core/6.11.0/net/sourceforge/pmd/properties/MultiValuePropertyDescriptor.html#"><code class="highlighter-rouge">MultiValuePropertyDescriptor</code></a> is deprecated as well</li>
</ul>
<h3 id="external-contributions">External Contributions</h3>
<ul>
<li><a href="https://github.com/pmd/pmd/pull/1503">#1503</a>: [java] Fix for ReturnFromFinallyBlock false-positives - <a href="https://github.com/rishabhdeepsingh">RishabhDeep Singh</a></li>
<li><a href="https://github.com/pmd/pmd/pull/1514">#1514</a>: [java] LocalVariableCouldBeFinal: allow excluding the variable in a for-each loop - <a href="https://github.com/kris-scheibe">Kris Scheibe</a></li>
<li><a href="https://github.com/pmd/pmd/pull/1516">#1516</a>: [java] OneDeclarationPerLine: Dont report multiple variables in a for statement. - <a href="https://github.com/kris-scheibe">Kris Scheibe</a></li>
<li><a href="https://github.com/pmd/pmd/pull/1520">#1520</a>: [java] New rule: ForLoopVariableCount: check the number of control variables in a for loop - <a href="https://github.com/kris-scheibe">Kris Scheibe</a></li>
<li><a href="https://github.com/pmd/pmd/pull/1521">#1521</a>: [java] Upgrade to ASM7 for JDK 11 support - <a href="https://github.com/markpritchard">Mark Pritchard</a></li>
<li><a href="https://github.com/pmd/pmd/pull/1530">#1530</a>: [java] New rule: AvoidReassigningLoopVariables - <a href="https://github.com/kris-scheibe">Kris Scheibe</a></li>
<li><a href="https://github.com/pmd/pmd/pull/1534">#1534</a>: [java] This is the change regarding the usediamondoperator #1517 - <a href="https://github.com/hemanshu070">hemanshu070</a></li>
<li><a href="https://github.com/pmd/pmd/pull/1545">#1545</a>: [doc] fixing dead links + tool to check for dead links automatically - <a href="https://github.com/kris-scheibe">Kris Scheibe</a></li>
<li><a href="https://github.com/pmd/pmd/pull/1551">#1551</a>: [java] InvalidSlf4jMessageFormatRule should not throw NPE for enums - <a href="https://github.com/rmartinus">Robbie Martinus</a></li>
<li><a href="https://github.com/pmd/pmd/pull/1552">#1552</a>: [core] Upgrading Google Gson from 2.5 to 2.8.5 - <a href="https://github.com/Thunderforge">Thunderforge</a></li>
<li><a href="https://github.com/pmd/pmd/pull/1553">#1553</a>: [core] Upgrading System Rules dependency from 1.8.0 to 1.19.0 - <a href="https://github.com/Thunderforge">Thunderforge</a></li>
<li><a href="https://github.com/pmd/pmd/pull/1554">#1554</a>: [plsql] updates should allow for multiple statements - <a href="https://github.com/tashiscool">tashiscool</a></li>
<li><a href="https://github.com/pmd/pmd/pull/1584">#1584</a>: [core] Fixes 1196: inconsistencies of clones returned by different CPD executions for the same files - <a href="https://github.com/bmbferreira">Bruno Ferreira</a></li>
</ul>
<div class="tags">
</div>
</div>
<hr class="shaded"/>
<footer>
<div class="row">
<div class="col-lg-12 footer">
&copy;2019 PMD Open Source Project. All rights reserved. <br />
Site last generated: Jan 26, 2019 <br />
<p><img src="images/pmd-logo-small.png" alt="Company logo"/></p>
</div>
</div>
</footer>
</div>
<!-- /.row -->
</div>
<!-- /.container -->
</div>
</div>
</body>
</html>