<!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.23.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_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><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_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> </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_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="--2020---6230">??-??-2020 - 6.23.0</h2> <p>The PMD team is pleased to announce PMD 6.23.0.</p> <p>This is a minor release.</p> <h3 id="new-and-noteworthy">New and noteworthy</h3> <h4 id="performance-improvements-for-xpath-20-rules">Performance improvements for XPath 2.0 rules</h4> <p>XPath rules written with XPath 2.0 now support conversion to a rulechain rule, which improves their performance. The rulechain is a mechanism that allows several rules to be executed in a single tree traversal. Conversion to the rulechain is possible if your XPath expression looks like <code class="highlighter-rouge">//someNode/... | //someOtherNode/... | ...</code>, that is, a union of one or more path expressions that start with <code class="highlighter-rouge">//</code>. Instead of traversing the whole tree once per path expression (and per rule), a single traversal executes all rules in your ruleset as needed.</p> <p>This conversion is performed automatically and cannot be disabled. <em>The conversion should not change the result of your rules</em>, if it does, please report a bug at https://github.com/pmd/pmd/issues</p> <p>Note that XPath 1.0 support, the default XPath version, is deprecated since PMD 6.22.0. <strong>We highly recommend that you upgrade your rules to XPath 2.0</strong>. Please refer to the <a href="https://pmd.github.io/latest/pmd_userdocs_extending_writing_xpath_rules.html#migrating-from-10-to-20">migration guide</a>.</p> <h3 id="fixed-issues">Fixed Issues</h3> <ul> <li>apex <ul> <li><a href="https://github.com/pmd/pmd/issues/2210">#2210</a>: [apex] ApexCRUDViolation: Support WITH SECURITY_ENFORCED</li> <li><a href="https://github.com/pmd/pmd/issues/2358">#2358</a>: [apex] Invalid Apex in Cognitive Complexity tests</li> </ul> </li> <li>java <ul> <li><a href="https://github.com/pmd/pmd/issues/2378">#2378</a>: [java] AbstractJUnitRule has bad performance on large code bases</li> </ul> </li> <li>java-design <ul> <li><a href="https://github.com/pmd/pmd/issues/2390">#2390</a>: [java] AbstractClassWithoutAnyMethod: missing violation for nested classes</li> </ul> </li> </ul> <h3 id="api-changes">API Changes</h3> <h4 id="deprecated-apis">Deprecated APIs</h4> <h5 id="internal-api">Internal API</h5> <p>Those APIs are not intended to be used by clients, and will be hidden or removed with PMD 7.0.0. You can identify them with the <code class="highlighter-rouge">@InternalApi</code> annotation. You’ll also get a deprecation warning.</p> <h5 id="in-asts">In ASTs</h5> <p>As part of the changes we’d like to do to AST classes for 7.0.0, we would like to hide some methods and constructors that rule writers should not have access to. The following usages are now deprecated in the <strong>Visualforce</strong> and <strong>PLSQL</strong> ASTs:</p> <ul> <li>Manual instantiation of nodes. <strong>Constructors of node classes are deprecated</strong> and marked <a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-core/6.23.0/net/sourceforge/pmd/annotation/InternalApi.html#"><code>InternalApi</code></a>. Nodes should only be obtained from the parser, which for rules, means that they never need to instantiate node themselves. Those constructors will be made package private with 7.0.0.</li> <li><strong>Subclassing of abstract node classes, or usage of their type</strong>. The base classes are internal API and will be hidden in version 7.0.0. You should not couple your code to them. <ul> <li>In the meantime you should use interfaces like <a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-visualforce/6.23.0/net/sourceforge/pmd/lang/vf/ast/VfNode.html#"><code>VfNode</code></a> or <a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-core/6.23.0/net/sourceforge/pmd/lang/ast/Node.html#"><code>Node</code></a>, or the other published interfaces in this package, to refer to nodes generically.</li> <li>Concrete node classes will <strong>be made final</strong> with 7.0.0.</li> </ul> </li> <li>Setters found in any node class or interface. <strong>Rules should consider the AST immutable</strong>. We will make those setters package private with 7.0.0.</li> <li>The implementation classes of <a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-core/6.23.0/net/sourceforge/pmd/lang/Parser.html#"><code>Parser</code></a> (eg <a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-visualforce/6.23.0/net/sourceforge/pmd/lang/vf/VfParser.html#"><code>VfParser</code></a>) are deprecated and should not be used directly. Use <a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-core/6.23.0/net/sourceforge/pmd/lang/LanguageVersionHandler.html#getParser(ParserOptions)"><code>LanguageVersionHandler#getParser</code></a> instead.</li> <li>The implementation classes of <a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-core/6.23.0/net/sourceforge/pmd/lang/TokenManager.html#"><code>TokenManager</code></a> (eg <a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-visualforce/6.23.0/net/sourceforge/pmd/lang/vf/VfTokenManager.html#"><code>VfTokenManager</code></a>) are deprecated and should not be used outside of our implementation. <strong>This also affects CPD-only modules</strong>.</li> </ul> <p>These deprecations are added to the following language modules in this release. Please look at the package documentation to find out the full list of deprecations.</p> <ul> <li>Visualforce: <strong><a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-visualforce/6.23.0/net/sourceforge/pmd/lang/vf/ast/package-summary.html#"><code>net.sourceforge.pmd.lang.vf.ast</code></a></strong></li> <li>PL/SQL: <strong><a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-plsql/6.23.0/net/sourceforge/pmd/lang/plsql/ast/package-summary.html#"><code>net.sourceforge.pmd.lang.plsql.ast</code></a></strong></li> </ul> <p>These deprecations have already been rolled out in a previous version for the following languages:</p> <ul> <li>Java: <a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-java/6.23.0/net/sourceforge/pmd/lang/java/ast/package-summary.html#"><code>net.sourceforge.pmd.lang.java.ast</code></a></li> <li>Java Server Pages: <a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-jsp/6.23.0/net/sourceforge/pmd/lang/jsp/ast/package-summary.html#"><code>net.sourceforge.pmd.lang.jsp.ast</code></a></li> <li>Velocity Template Language: <a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-vm/6.23.0/net/sourceforge/pmd/lang/vm/ast/package-summary.html#"><code>net.sourceforge.pmd.lang.vm.ast</code></a></li> </ul> <p>Outside of these packages, these changes also concern the following TokenManager implementations, and their corresponding Parser if it exists (in the same package):</p> <ul> <li><a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-vm/6.23.0/net/sourceforge/pmd/lang/vm/VmTokenManager.html#"><code>VmTokenManager</code></a></li> <li><a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-java/6.23.0/net/sourceforge/pmd/lang/java/JavaTokenManager.html#"><code>JavaTokenManager</code></a></li> <li><a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-python/6.23.0/net/sourceforge/pmd/lang/python/PythonTokenManager.html#"><code>PythonTokenManager</code></a></li> <li><a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-visualforce/6.23.0/net/sourceforge/pmd/lang/vf/VfTokenManager.html#"><code>VfTokenManager</code></a></li> <li><a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-plsql/6.23.0/net/sourceforge/pmd/lang/plsql/PLSQLTokenManager.html#"><code>PLSQLTokenManager</code></a></li> <li><a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-jsp/6.23.0/net/sourceforge/pmd/lang/jsp/JspTokenManager.html#"><code>JspTokenManager</code></a></li> <li><a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-modelica/6.23.0/net/sourceforge/pmd/lang/modelica/ModelicaTokenManager.html#"><code>ModelicaTokenManager</code></a></li> <li><a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-cpp/6.23.0/net/sourceforge/pmd/lang/cpp/CppTokenManager.html#"><code>CppTokenManager</code></a></li> <li><a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-javascript/6.23.0/net/sourceforge/pmd/lang/ecmascript5/Ecmascript5TokenManager.html#"><code>Ecmascript5TokenManager</code></a></li> <li><a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-matlab/6.23.0/net/sourceforge/pmd/lang/matlab/MatlabTokenManager.html#"><code>MatlabTokenManager</code></a></li> <li><a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-objectivec/6.23.0/net/sourceforge/pmd/lang/objectivec/ObjectiveCTokenManager.html#"><code>ObjectiveCTokenManager</code></a></li> </ul> <h5 id="for-removal">For removal</h5> <ul> <li><a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-core/6.23.0/net/sourceforge/pmd/lang/Parser.html#getTokenManager(java.lang.String,java.io.Reader)"><code>Parser#getTokenManager</code></a></li> <li><a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-core/6.23.0/net/sourceforge/pmd/lang/TokenManager.html#setFileName(java.lang.String)"><code>TokenManager#setFileName</code></a></li> <li><a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-core/6.23.0/net/sourceforge/pmd/lang/ast/AbstractTokenManager.html#setFileName(java.lang.String)"><code>AbstractTokenManager#setFileName</code></a></li> <li><a href="https://javadoc.io/page/net.sourceforge.pmd/pmd-core/6.23.0/net/sourceforge/pmd/lang/ast/AbstractTokenManager.html#getFileName(java.lang.String)"><code>AbstractTokenManager#getFileName</code></a></li> </ul> <h3 id="external-contributions">External Contributions</h3> <ul> <li><a href="https://github.com/pmd/pmd/pull/2312">#2312</a>: [apex] Update ApexCRUDViolation Rule - <a href="https://github.com/jarquile">Joshua S Arquilevich</a></li> <li><a href="https://github.com/pmd/pmd/pull/2314">#2314</a>: [doc] maven integration - Add version to plugin - <a href="https://github.com/gpbp">Pham Hai Trung</a></li> <li><a href="https://github.com/pmd/pmd/pull/2353">#2353</a>: [plsql] xmlforest with optional AS - <a href="https://github.com/szyman23">Piotr Szymanski</a></li> <li><a href="https://github.com/pmd/pmd/pull/2383">#2383</a>: [apex] Fix invalid apex in documentation - <a href="https://github.com/gwilymatgearset">Gwilym Kuiper</a></li> </ul> <div class="tags"> </div> </div> <hr class="shaded"/> <footer> <div class="row"> <div class="col-lg-12 footer"> ©2020 PMD Open Source Project. All rights reserved. <br /> Site last generated: Apr 3, 2020 <br /> <p><img src="images/pmd-logo-small.png" alt="Company logo"/></p> </div> </div> </footer> </div> <!-- /.row --> </div> <!-- /.container --> </div> </div> </body> </html>