diff --git a/docs/_config.yml b/docs/_config.yml
index b79bed4de0..6096f80ba3 100644
--- a/docs/_config.yml
+++ b/docs/_config.yml
@@ -1,9 +1,9 @@
repository: pmd/pmd
pmd:
- version: 6.22.0
- previous_version: 6.21.0
- date: 12-March-2020
+ version: 6.23.0
+ previous_version: 6.22.0
+ date: ??-??-2020
release_type: minor
# release types: major, minor, bugfix
diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md
index 6d58cbd04a..b8f8783555 100644
--- a/docs/pages/release_notes.md
+++ b/docs/pages/release_notes.md
@@ -14,252 +14,11 @@ This is a {{ site.pmd.release_type }} release.
### New and noteworthy
-#### Java 14 Support
-
-This release of PMD brings support for Java 14. PMD can parse [Switch Expressions](https://openjdk.java.net/jeps/361),
-which have been promoted to be a standard language feature of Java.
-
-PMD also parses [Text Blocks](https://openjdk.java.net/jeps/368) as String literals, which is still a preview
-language feature in Java 14.
-
-The new [Pattern Matching for instanceof](https://openjdk.java.net/jeps/305) can be used as well as
-[Records](https://openjdk.java.net/jeps/359).
-
-Note: The Text Blocks, Pattern Matching for instanceof and Records are all preview language features of OpenJDK 14
-and are not enabled by default. In order to
-analyze a project with PMD that uses these language features, you'll need to enable it via the environment
-variable `PMD_JAVA_OPTS` and select the new language version `14-preview`:
-
- export PMD_JAVA_OPTS=--enable-preview
- ./run.sh pmd -language java -version 14-preview ...
-
-Note: Support for the extended break statement introduced in Java 12 as a preview language feature
-has been removed from PMD with this version. The version "12-preview" is no longer available.
-
-
-#### Updated PMD Designer
-
-This PMD release ships a new version of the pmd-designer.
-For the changes, see [PMD Designer Changelog](https://github.com/pmd/pmd-designer/releases/tag/6.21.0).
-
-#### Apex Suppressions
-
-In addition to suppressing violation with the `@SuppressWarnings` annotation, Apex now also supports
-the suppressions with a `NOPMD` comment. See [Suppressing warnings](pmd_userdocs_suppressing_warnings.html).
-
-#### Improved CPD support for C#
-
-The C# tokenizer is now based on an antlr grammar instead of a manual written tokenizer. This
-should give more accurate results and especially fixes the problems with the using statement syntax
-(see [#2139](https://github.com/pmd/pmd/issues/2139)).
-
-#### XPath Rules
-
-See the new documentation about [Writing XPath Rules](pmd_userdocs_extending_writing_xpath_rules.html).
-
-*Note:* As of PMD version 6.22.0, XPath versions 1.0 and the 1.0 compatibility mode are **deprecated**.
-XPath 2.0 is superior in many ways, for example for its support for type checking, sequence values,
-or quantified expressions. For a detailed but approachable review of the features of XPath 2.0 and above,
-see the [Saxon documentation](https://www.saxonica.com/documentation/index.html#!expressions).
-
-#### New Rules
-
-* The Rule {% rule "apex/design/CognitiveComplexity" %} (`apex-design`) finds methods and classes
- that are highly complex and therefore difficult to read and more costly to maintain. In contrast
- to cyclomatic complexity, this rule uses "Cognitive Complexity", which is a measure of how
- difficult it is for humans to read and understand a method.
-
-* The Rule {% rule "apex/errorprone/TestMethodsMustBeInTestClasses" %} (`apex-errorprone`) finds test methods
- that are not residing in a test class. The test methods should be moved to a proper test class.
- Support for tests inside functional classes was removed in Spring-13 (API Version 27.0), making classes
- that violate this rule fail compile-time. This rule is however useful when dealing with legacy code.
-
### Fixed Issues
-* apex
- * [#1087](https://github.com/pmd/pmd/issues/1087): \[apex] Support suppression via //NOPMD
- * [#2306](https://github.com/pmd/pmd/issues/2306): \[apex] Switch statements are not parsed/supported
-* apex-design
- * [#2162](https://github.com/pmd/pmd/issues/2162): \[apex] Cognitive Complexity rule
-* apex-errorprone
- * [#639](https://github.com/pmd/pmd/issues/639): \[apex] Test methods should not be in classes other than test classes
-* cs
- * [#2139](https://github.com/pmd/pmd/issues/2139): \[cs] CPD doesn't understand alternate using statement syntax with C# 8.0
-* doc
- * [#2274](https://github.com/pmd/pmd/issues/2274): \[doc] Java API documentation for PMD
-* java
- * [#2159](https://github.com/pmd/pmd/issues/2159): \[java] Prepare for JDK 14
- * [#2268](https://github.com/pmd/pmd/issues/2268): \[java] Improve TypeHelper resilience
-* java-bestpractices
- * [#2277](https://github.com/pmd/pmd/issues/2277): \[java] FP in UnusedImports for ambiguous static on-demand imports
-* java-design
- * [#911](https://github.com/pmd/pmd/issues/911): \[java] UselessOverridingMethod false positive when elevating access modifier
-* java-errorprone
- * [#2242](https://github.com/pmd/pmd/issues/2242): \[java] False-positive MisplacedNullCheck reported
- * [#2250](https://github.com/pmd/pmd/issues/2250): \[java] InvalidLogMessageFormat flags logging calls using a slf4j-Marker
- * [#2255](https://github.com/pmd/pmd/issues/2255): \[java] InvalidLogMessageFormat false-positive for a lambda argument
-* java-performance
- * [#2275](https://github.com/pmd/pmd/issues/2275): \[java] AppendCharacterWithChar flags literals in an expression
-* plsql
- * [#2325](https://github.com/pmd/pmd/issues/2325): \[plsql] NullPointerException while running parsing test for CREATE TRIGGER
- * [#2327](https://github.com/pmd/pmd/pull/2327): \[plsql] Parsing of WHERE CURRENT OF
- * [#2328](https://github.com/pmd/pmd/issues/2328): \[plsql] Support XMLROOT
- * [#2331](https://github.com/pmd/pmd/pull/2331): \[plsql] Fix in Comment statement
- * [#2332](https://github.com/pmd/pmd/pull/2332): \[plsql] Fixed Execute Immediate statement parsing
- * [#2340](https://github.com/pmd/pmd/pull/2340): \[plsql] Fixed parsing / as divide or execute
-
### API Changes
-#### Deprecated APIs
-
-##### Internal API
-
-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 `@InternalApi` annotation. You'll also get a deprecation warning.
-
-* {% jdoc java::lang.java.JavaLanguageHandler %}
-* {% jdoc java::lang.java.JavaLanguageParser %}
-* {% jdoc java::lang.java.JavaDataFlowHandler %}
-* Implementations of {% jdoc core::lang.rule.RuleViolationFactory %} in each
- language module, eg {% jdoc java::lang.java.rule.JavaRuleViolationFactory %}.
- See javadoc of {% jdoc core::lang.rule.RuleViolationFactory %}.
-* Implementations of {% jdoc core::RuleViolation %} in each language module,
- eg {% jdoc java::lang.java.rule.JavaRuleViolation %}. See javadoc of
- {% jdoc core::RuleViolation %}.
-
-* {% jdoc core::rules.RuleFactory %}
-* {% jdoc core::rules.RuleBuilder %}
-* Constructors of {% jdoc core::RuleSetFactory %}, use factory methods from {% jdoc core::RulesetsFactoryUtils %} instead
-* {% jdoc core::RulesetsFactoryUtils#getRulesetFactory(core::PMDConfiguration, core::util.ResourceLoader) %}
-
-* {% jdoc apex::lang.apex.ast.AbstractApexNode %}
-* {% jdoc apex::lang.apex.ast.AbstractApexNodeBase %}, and the related `visit`
-methods on {% jdoc apex::lang.apex.ast.ApexParserVisitor %} and its implementations.
- Use {% jdoc apex::lang.apex.ast.ApexNode %} instead, now considers comments too.
-
-##### For removal
-
-* pmd-core
- * {% jdoc core::lang.dfa.DFAGraphRule %} and its implementations
- * {% jdoc core::lang.dfa.DFAGraphMethod %}
- * Many methods on the {% jdoc core::lang.ast.Node %} interface
- and {% jdoc core::lang.ast.AbstractNode %} base class. See their javadoc for details.
- * {% jdoc !!core::lang.ast.Node#isFindBoundary() %} is deprecated for XPath queries.
- * Many APIs of {% jdoc_package core::lang.metrics %}, though most of them were internal and
- probably not used directly outside of PMD. Use {% jdoc core::lang.metrics.MetricsUtil %} as
- a replacement for the language-specific façades too.
- * {% jdoc core::lang.ast.QualifiableNode %}, {% jdoc core::lang.ast.QualifiedName %}
-* pmd-java
- * {% jdoc java::lang.java.AbstractJavaParser %}
- * {% jdoc java::lang.java.AbstractJavaHandler %}
- * [`ASTAnyTypeDeclaration.TypeKind`](https://javadoc.io/page/net.sourceforge.pmd/pmd-java/6.21.0/net/sourceforge/pmd/lang/java/ast/ASTAnyTypeDeclaration.TypeKind.html)
- * {% jdoc !!java::lang.java.ast.ASTAnyTypeDeclaration#getKind() %}
- * {% jdoc java::lang.java.ast.JavaQualifiedName %}
- * {% jdoc !!java::lang.java.ast.ASTCatchStatement#getBlock() %}
- * {% jdoc !!java::lang.java.ast.ASTCompilationUnit#declarationsAreInDefaultPackage() %}
- * {% jdoc java::lang.java.ast.JavaQualifiableNode %}
- * {% jdoc !!java::lang.java.ast.ASTAnyTypeDeclaration#getQualifiedName() %}
- * {% jdoc !!java::lang.java.ast.ASTMethodOrConstructorDeclaration#getQualifiedName() %}
- * {% jdoc !!java::lang.java.ast.ASTLambdaExpression#getQualifiedName() %}
- * {% jdoc_package java::lang.java.qname %} and its contents
- * {% jdoc java::lang.java.ast.MethodLikeNode %}
- * Its methods will also be removed from its implementations,
- {% jdoc java::lang.java.ast.ASTMethodOrConstructorDeclaration %},
- {% jdoc java::lang.java.ast.ASTLambdaExpression %}.
- * {% jdoc !!java::lang.java.ast.ASTAnyTypeDeclaration#getImage() %} will be removed. Please use `getSimpleName()`
- instead. This affects {% jdoc !!java::lang.java.ast.ASTAnnotationTypeDeclaration#getImage() %},
- {% jdoc !!java::lang.java.ast.ASTClassOrInterfaceDeclaration#getImage() %}, and
- {% jdoc !!java::lang.java.ast.ASTEnumDeclaration#getImage() %}.
- * Several methods of {% jdoc java::lang.java.ast.ASTTryStatement %}, replacements with other names
- have been added. This includes the XPath attribute `@Finally`, replace it with a test for `child::FinallyStatement`.
- * Several methods named `getGuardExpressionNode` are replaced with `getCondition`. This affects the
- following nodes: WhileStatement, DoStatement, ForStatement, IfStatement, AssertStatement, ConditionalExpression.
- * {% jdoc java::lang.java.ast.ASTYieldStatement %} will not implement {% jdoc java::lang.java.ast.TypeNode %}
- anymore come 7.0.0. Test the type of the expression nested within it.
- * {% jdoc java::lang.java.metrics.JavaMetrics %}, {% jdoc java::lang.java.metrics.JavaMetricsComputer %}
- * {% jdoc !!java::lang.java.ast.ASTArguments#getArgumentCount() %}.
- Use {% jdoc java::lang.java.ast.ASTArguments#size() %} instead.
- * {% jdoc !!java::lang.java.ast.ASTFormalParameters#getParameterCount() %}.
- Use {% jdoc java::lang.java.ast.ASTFormalParameters#size() %} instead.
-* pmd-apex
- * {% jdoc apex::lang.apex.metrics.ApexMetrics %}, {% jdoc apex::lang.apex.metrics.ApexMetricsComputer %}
-
-##### In ASTs (JSP)
-
-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 JSP AST** (with other languages to come):
-
-* Manual instantiation of nodes. **Constructors of node classes are deprecated** and
- marked {% jdoc core::annotation.InternalApi %}. 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.
-* **Subclassing of abstract node classes, or usage of their type**. The base classes are internal API
- and will be hidden in version 7.0.0. You should not couple your code to them.
- * In the meantime you should use interfaces like {% jdoc jsp::lang.jsp.ast.JspNode %} or
- {% jdoc core::lang.ast.Node %}, or the other published interfaces in this package,
- to refer to nodes generically.
- * Concrete node classes will **be made final** with 7.0.0.
-* Setters found in any node class or interface. **Rules should consider the AST immutable**.
- We will make those setters package private with 7.0.0.
-* The class {% jdoc jsp::lang.jsp.JspParser %} is deprecated and should not be used directly.
- Use {% jdoc !!core::lang.LanguageVersionHandler#getParser(ParserOptions) %} instead.
-
-Please look at {% jdoc_package jsp::lang.jsp.ast %} to find out the full list of deprecations.
-
-##### In ASTs (Velocity)
-
-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 VM AST** (with other languages to come):
-
-* Manual instantiation of nodes. **Constructors of node classes are deprecated** and
- marked {% jdoc core::annotation.InternalApi %}. 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.
-* **Subclassing of abstract node classes, or usage of their type**. The base classes are internal API
- and will be hidden in version 7.0.0. You should not couple your code to them.
- * In the meantime you should use interfaces like {% jdoc vm::lang.vm.ast.VmNode %} or
- {% jdoc core::lang.ast.Node %}, or the other published interfaces in this package,
- to refer to nodes generically.
- * Concrete node classes will **be made final** with 7.0.0.
-* Setters found in any node class or interface. **Rules should consider the AST immutable**.
- We will make those setters package private with 7.0.0.
-* The package {% jdoc_package vm::lang.vm.directive %} as well as the classes
- {% jdoc vm::lang.vm.util.DirectiveMapper %} and {% jdoc vm::lang.vm.util.LogUtil %} are deprecated
- for removal. They were only used internally during parsing.
-* The class {% jdoc vm::lang.vm.VmParser %} is deprecated and should not be used directly.
- Use {% jdoc !!core::lang.LanguageVersionHandler#getParser(ParserOptions) %} instead.
-
-Please look at {% jdoc_package vm::lang.vm.ast %} to find out the full list of deprecations.
-
-#### PLSQL AST
-
-The production and node `ASTCursorBody` was unnecessary, not used and has been removed. Cursors have been already
-parsed as `ASTCursorSpecification`.
-
### External Contributions
-* [#2251](https://github.com/pmd/pmd/pull/2251): \[java] FP for InvalidLogMessageFormat when using slf4j-Markers - [Kris Scheibe](https://github.com/kris-scheibe)
-* [#2253](https://github.com/pmd/pmd/pull/2253): \[modelica] Remove duplicated dependencies - [Piotrek Żygieło](https://github.com/pzygielo)
-* [#2256](https://github.com/pmd/pmd/pull/2256): \[doc] Corrected XML attributes in release notes - [Maikel Steneker](https://github.com/maikelsteneker)
-* [#2276](https://github.com/pmd/pmd/pull/2276): \[java] AppendCharacterWithCharRule ignore literals in expressions - [Kris Scheibe](https://github.com/kris-scheibe)
-* [#2278](https://github.com/pmd/pmd/pull/2278): \[java] fix UnusedImports rule for ambiguous static on-demand imports - [Kris Scheibe](https://github.com/kris-scheibe)
-* [#2279](https://github.com/pmd/pmd/pull/2279): \[apex] Add support for suppressing violations using the // NOPMD comment - [Gwilym Kuiper](https://github.com/gwilymatgearset)
-* [#2280](https://github.com/pmd/pmd/pull/2280): \[cs] CPD: Replace C# tokenizer by an Antlr-based one - [Maikel Steneker](https://github.com/maikelsteneker)
-* [#2297](https://github.com/pmd/pmd/pull/2297): \[apex] Cognitive complexity metrics - [Gwilym Kuiper](https://github.com/gwilymatgearset)
-* [#2317](https://github.com/pmd/pmd/pull/2317): \[apex] New Rule - Test Methods Must Be In Test Classes - [Brian Nørremark](https://github.com/noerremark)
-* [#2321](https://github.com/pmd/pmd/pull/2321): \[apex] Support switch statements correctly in Cognitive Complexity - [Gwilym Kuiper](https://github.com/gwilymatgearset)
-* [#2326](https://github.com/pmd/pmd/pull/2326): \[plsql] Added XML functions to parser: extract(xml), xml_root and fixed xml_forest - [Piotr Szymanski](https://github.com/szyman23)
-* [#2327](https://github.com/pmd/pmd/pull/2327): \[plsql] Parsing of WHERE CURRENT OF added - [Piotr Szymanski](https://github.com/szyman23)
-* [#2331](https://github.com/pmd/pmd/pull/2331): \[plsql] Fix in Comment statement - [Piotr Szymanski](https://github.com/szyman23)
-* [#2332](https://github.com/pmd/pmd/pull/2332): \[plsql] Fixed Execute Immediate statement parsing - [Piotr Szymanski](https://github.com/szyman23)
-* [#2338](https://github.com/pmd/pmd/pull/2338): \[cs] CPD: fixes in filtering of using directives - [Maikel Steneker](https://github.com/maikelsteneker)
-* [#2339](https://github.com/pmd/pmd/pull/2339): \[cs] CPD: Fixed CPD --ignore-usings option - [Maikel Steneker](https://github.com/maikelsteneker)
-* [#2340](https://github.com/pmd/pmd/pull/2340): \[plsql] fix for parsing / as divide or execute - [Piotr Szymanski](https://github.com/szyman23)
-* [#2342](https://github.com/pmd/pmd/pull/2342): \[xml] Update property used in example - [Piotrek Żygieło](https://github.com/pzygielo)
-* [#2344](https://github.com/pmd/pmd/pull/2344): \[doc] Update ruleset examples for ant - [Piotrek Żygieło](https://github.com/pzygielo)
-* [#2343](https://github.com/pmd/pmd/pull/2343): \[ci] Disable checking for snapshots in jcenter - [Piotrek Żygieło](https://github.com/pzygielo)
-
{% endtocmaker %}
diff --git a/docs/pages/release_notes_old.md b/docs/pages/release_notes_old.md
index 8fc42da0fd..6efcfa4c6e 100644
--- a/docs/pages/release_notes_old.md
+++ b/docs/pages/release_notes_old.md
@@ -5,6 +5,280 @@ permalink: pmd_release_notes_old.html
Previous versions of PMD can be downloaded here: https://github.com/pmd/pmd/releases
+## 12-March-2020 - 6.22.0
+
+The PMD team is pleased to announce PMD 6.22.0.
+
+This is a minor release.
+
+### Table Of Contents
+
+* [New and noteworthy](#new-and-noteworthy)
+ * [Java 14 Support](#java-14-support)
+ * [Updated PMD Designer](#updated-pmd-designer)
+ * [Apex Suppressions](#apex-suppressions)
+ * [Improved CPD support for C#](#improved-cpd-support-for-c#)
+ * [XPath Rules](#xpath-rules)
+ * [New Rules](#new-rules)
+* [Fixed Issues](#fixed-issues)
+* [API Changes](#api-changes)
+ * [Deprecated APIs](#deprecated-apis)
+ * [Internal API](#internal-api)
+ * [For removal](#for-removal)
+ * [In ASTs (JSP)](#in-asts-(jsp))
+ * [In ASTs (Velocity)](#in-asts-(velocity))
+ * [PLSQL AST](#plsql-ast)
+* [External Contributions](#external-contributions)
+
+### New and noteworthy
+
+#### Java 14 Support
+
+This release of PMD brings support for Java 14. PMD can parse [Switch Expressions](https://openjdk.java.net/jeps/361),
+which have been promoted to be a standard language feature of Java.
+
+PMD also parses [Text Blocks](https://openjdk.java.net/jeps/368) as String literals, which is still a preview
+language feature in Java 14.
+
+The new [Pattern Matching for instanceof](https://openjdk.java.net/jeps/305) can be used as well as
+[Records](https://openjdk.java.net/jeps/359).
+
+Note: The Text Blocks, Pattern Matching for instanceof and Records are all preview language features of OpenJDK 14
+and are not enabled by default. In order to
+analyze a project with PMD that uses these language features, you'll need to enable it via the environment
+variable `PMD_JAVA_OPTS` and select the new language version `14-preview`:
+
+ export PMD_JAVA_OPTS=--enable-preview
+ ./run.sh pmd -language java -version 14-preview ...
+
+Note: Support for the extended break statement introduced in Java 12 as a preview language feature
+has been removed from PMD with this version. The version "12-preview" is no longer available.
+
+
+#### Updated PMD Designer
+
+This PMD release ships a new version of the pmd-designer.
+For the changes, see [PMD Designer Changelog](https://github.com/pmd/pmd-designer/releases/tag/6.21.0).
+
+#### Apex Suppressions
+
+In addition to suppressing violation with the `@SuppressWarnings` annotation, Apex now also supports
+the suppressions with a `NOPMD` comment. See [Suppressing warnings](pmd_userdocs_suppressing_warnings.html).
+
+#### Improved CPD support for C#
+
+The C# tokenizer is now based on an antlr grammar instead of a manual written tokenizer. This
+should give more accurate results and especially fixes the problems with the using statement syntax
+(see [#2139](https://github.com/pmd/pmd/issues/2139)).
+
+#### XPath Rules
+
+See the new documentation about [Writing XPath Rules](pmd_userdocs_extending_writing_xpath_rules.html).
+
+*Note:* As of PMD version 6.22.0, XPath versions 1.0 and the 1.0 compatibility mode are **deprecated**.
+XPath 2.0 is superior in many ways, for example for its support for type checking, sequence values,
+or quantified expressions. For a detailed but approachable review of the features of XPath 2.0 and above,
+see the [Saxon documentation](https://www.saxonica.com/documentation/index.html#!expressions).
+
+#### New Rules
+
+* The Rule [`CognitiveComplexity`](https://pmd.github.io/pmd-6.22.0/pmd_rules_apex_design.html#cognitivecomplexity) (`apex-design`) finds methods and classes
+ that are highly complex and therefore difficult to read and more costly to maintain. In contrast
+ to cyclomatic complexity, this rule uses "Cognitive Complexity", which is a measure of how
+ difficult it is for humans to read and understand a method.
+
+* The Rule [`TestMethodsMustBeInTestClasses`](https://pmd.github.io/pmd-6.22.0/pmd_rules_apex_errorprone.html#testmethodsmustbeintestclasses) (`apex-errorprone`) finds test methods
+ that are not residing in a test class. The test methods should be moved to a proper test class.
+ Support for tests inside functional classes was removed in Spring-13 (API Version 27.0), making classes
+ that violate this rule fail compile-time. This rule is however useful when dealing with legacy code.
+
+### Fixed Issues
+
+* apex
+ * [#1087](https://github.com/pmd/pmd/issues/1087): \[apex] Support suppression via //NOPMD
+ * [#2306](https://github.com/pmd/pmd/issues/2306): \[apex] Switch statements are not parsed/supported
+* apex-design
+ * [#2162](https://github.com/pmd/pmd/issues/2162): \[apex] Cognitive Complexity rule
+* apex-errorprone
+ * [#639](https://github.com/pmd/pmd/issues/639): \[apex] Test methods should not be in classes other than test classes
+* cs
+ * [#2139](https://github.com/pmd/pmd/issues/2139): \[cs] CPD doesn't understand alternate using statement syntax with C# 8.0
+* doc
+ * [#2274](https://github.com/pmd/pmd/issues/2274): \[doc] Java API documentation for PMD
+* java
+ * [#2159](https://github.com/pmd/pmd/issues/2159): \[java] Prepare for JDK 14
+ * [#2268](https://github.com/pmd/pmd/issues/2268): \[java] Improve TypeHelper resilience
+* java-bestpractices
+ * [#2277](https://github.com/pmd/pmd/issues/2277): \[java] FP in UnusedImports for ambiguous static on-demand imports
+* java-design
+ * [#911](https://github.com/pmd/pmd/issues/911): \[java] UselessOverridingMethod false positive when elevating access modifier
+* java-errorprone
+ * [#2242](https://github.com/pmd/pmd/issues/2242): \[java] False-positive MisplacedNullCheck reported
+ * [#2250](https://github.com/pmd/pmd/issues/2250): \[java] InvalidLogMessageFormat flags logging calls using a slf4j-Marker
+ * [#2255](https://github.com/pmd/pmd/issues/2255): \[java] InvalidLogMessageFormat false-positive for a lambda argument
+* java-performance
+ * [#2275](https://github.com/pmd/pmd/issues/2275): \[java] AppendCharacterWithChar flags literals in an expression
+* plsql
+ * [#2325](https://github.com/pmd/pmd/issues/2325): \[plsql] NullPointerException while running parsing test for CREATE TRIGGER
+ * [#2327](https://github.com/pmd/pmd/pull/2327): \[plsql] Parsing of WHERE CURRENT OF
+ * [#2328](https://github.com/pmd/pmd/issues/2328): \[plsql] Support XMLROOT
+ * [#2331](https://github.com/pmd/pmd/pull/2331): \[plsql] Fix in Comment statement
+ * [#2332](https://github.com/pmd/pmd/pull/2332): \[plsql] Fixed Execute Immediate statement parsing
+ * [#2340](https://github.com/pmd/pmd/pull/2340): \[plsql] Fixed parsing / as divide or execute
+
+### API Changes
+
+#### Deprecated APIs
+
+##### Internal API
+
+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 `@InternalApi` annotation. You'll also get a deprecation warning.
+
+* JavaLanguageHandler
+* JavaLanguageParser
+* JavaDataFlowHandler
+* Implementations of RuleViolationFactory in each
+ language module, eg JavaRuleViolationFactory.
+ See javadoc of RuleViolationFactory.
+* Implementations of RuleViolation in each language module,
+ eg JavaRuleViolation. See javadoc of
+ RuleViolation.
+
+* RuleFactory
+* RuleBuilder
+* Constructors of RuleSetFactory, use factory methods from RulesetsFactoryUtils instead
+* getRulesetFactory
+
+* AbstractApexNode
+* AbstractApexNodeBase, and the related `visit`
+methods on ApexParserVisitor and its implementations.
+ Use ApexNode instead, now considers comments too.
+
+##### For removal
+
+* pmd-core
+ * DFAGraphRule and its implementations
+ * DFAGraphMethod
+ * Many methods on the Node interface
+ and AbstractNode base class. See their javadoc for details.
+ * Node#isFindBoundary is deprecated for XPath queries.
+ * Many APIs of net.sourceforge.pmd.lang.metrics, though most of them were internal and
+ probably not used directly outside of PMD. Use MetricsUtil as
+ a replacement for the language-specific façades too.
+ * QualifiableNode, QualifiedName
+* pmd-java
+ * AbstractJavaParser
+ * AbstractJavaHandler
+ * [`ASTAnyTypeDeclaration.TypeKind`](https://javadoc.io/page/net.sourceforge.pmd/pmd-java/6.21.0/net/sourceforge/pmd/lang/java/ast/ASTAnyTypeDeclaration.TypeKind.html)
+ * ASTAnyTypeDeclaration#getKind
+ * JavaQualifiedName
+ * ASTCatchStatement#getBlock
+ * ASTCompilationUnit#declarationsAreInDefaultPackage
+ * JavaQualifiableNode
+ * ASTAnyTypeDeclaration#getQualifiedName
+ * ASTMethodOrConstructorDeclaration#getQualifiedName
+ * ASTLambdaExpression#getQualifiedName
+ * net.sourceforge.pmd.lang.java.qname and its contents
+ * MethodLikeNode
+ * Its methods will also be removed from its implementations,
+ ASTMethodOrConstructorDeclaration,
+ ASTLambdaExpression.
+ * ASTAnyTypeDeclaration#getImage will be removed. Please use `getSimpleName()`
+ instead. This affects ASTAnnotationTypeDeclaration#getImage,
+ ASTClassOrInterfaceDeclaration#getImage, and
+ ASTEnumDeclaration#getImage.
+ * Several methods of ASTTryStatement, replacements with other names
+ have been added. This includes the XPath attribute `@Finally`, replace it with a test for `child::FinallyStatement`.
+ * Several methods named `getGuardExpressionNode` are replaced with `getCondition`. This affects the
+ following nodes: WhileStatement, DoStatement, ForStatement, IfStatement, AssertStatement, ConditionalExpression.
+ * ASTYieldStatement will not implement TypeNode
+ anymore come 7.0.0. Test the type of the expression nested within it.
+ * JavaMetrics, JavaMetricsComputer
+ * ASTArguments#getArgumentCount.
+ Use size instead.
+ * ASTFormalParameters#getParameterCount.
+ Use size instead.
+* pmd-apex
+ * ApexMetrics, ApexMetricsComputer
+
+##### In ASTs (JSP)
+
+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 JSP AST** (with other languages to come):
+
+* Manual instantiation of nodes. **Constructors of node classes are deprecated** and
+ marked InternalApi. 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.
+* **Subclassing of abstract node classes, or usage of their type**. The base classes are internal API
+ and will be hidden in version 7.0.0. You should not couple your code to them.
+ * In the meantime you should use interfaces like JspNode or
+ Node, or the other published interfaces in this package,
+ to refer to nodes generically.
+ * Concrete node classes will **be made final** with 7.0.0.
+* Setters found in any node class or interface. **Rules should consider the AST immutable**.
+ We will make those setters package private with 7.0.0.
+* The class JspParser is deprecated and should not be used directly.
+ Use LanguageVersionHandler#getParser instead.
+
+Please look at net.sourceforge.pmd.lang.jsp.ast to find out the full list of deprecations.
+
+##### In ASTs (Velocity)
+
+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 VM AST** (with other languages to come):
+
+* Manual instantiation of nodes. **Constructors of node classes are deprecated** and
+ marked InternalApi. 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.
+* **Subclassing of abstract node classes, or usage of their type**. The base classes are internal API
+ and will be hidden in version 7.0.0. You should not couple your code to them.
+ * In the meantime you should use interfaces like VmNode or
+ Node, or the other published interfaces in this package,
+ to refer to nodes generically.
+ * Concrete node classes will **be made final** with 7.0.0.
+* Setters found in any node class or interface. **Rules should consider the AST immutable**.
+ We will make those setters package private with 7.0.0.
+* The package net.sourceforge.pmd.lang.vm.directive as well as the classes
+ DirectiveMapper and LogUtil are deprecated
+ for removal. They were only used internally during parsing.
+* The class VmParser is deprecated and should not be used directly.
+ Use LanguageVersionHandler#getParser instead.
+
+Please look at net.sourceforge.pmd.lang.vm.ast to find out the full list of deprecations.
+
+#### PLSQL AST
+
+The production and node `ASTCursorBody` was unnecessary, not used and has been removed. Cursors have been already
+parsed as `ASTCursorSpecification`.
+
+### External Contributions
+
+* [#2251](https://github.com/pmd/pmd/pull/2251): \[java] FP for InvalidLogMessageFormat when using slf4j-Markers - [Kris Scheibe](https://github.com/kris-scheibe)
+* [#2253](https://github.com/pmd/pmd/pull/2253): \[modelica] Remove duplicated dependencies - [Piotrek Żygieło](https://github.com/pzygielo)
+* [#2256](https://github.com/pmd/pmd/pull/2256): \[doc] Corrected XML attributes in release notes - [Maikel Steneker](https://github.com/maikelsteneker)
+* [#2276](https://github.com/pmd/pmd/pull/2276): \[java] AppendCharacterWithCharRule ignore literals in expressions - [Kris Scheibe](https://github.com/kris-scheibe)
+* [#2278](https://github.com/pmd/pmd/pull/2278): \[java] fix UnusedImports rule for ambiguous static on-demand imports - [Kris Scheibe](https://github.com/kris-scheibe)
+* [#2279](https://github.com/pmd/pmd/pull/2279): \[apex] Add support for suppressing violations using the // NOPMD comment - [Gwilym Kuiper](https://github.com/gwilymatgearset)
+* [#2280](https://github.com/pmd/pmd/pull/2280): \[cs] CPD: Replace C# tokenizer by an Antlr-based one - [Maikel Steneker](https://github.com/maikelsteneker)
+* [#2297](https://github.com/pmd/pmd/pull/2297): \[apex] Cognitive complexity metrics - [Gwilym Kuiper](https://github.com/gwilymatgearset)
+* [#2317](https://github.com/pmd/pmd/pull/2317): \[apex] New Rule - Test Methods Must Be In Test Classes - [Brian Nørremark](https://github.com/noerremark)
+* [#2321](https://github.com/pmd/pmd/pull/2321): \[apex] Support switch statements correctly in Cognitive Complexity - [Gwilym Kuiper](https://github.com/gwilymatgearset)
+* [#2326](https://github.com/pmd/pmd/pull/2326): \[plsql] Added XML functions to parser: extract(xml), xml_root and fixed xml_forest - [Piotr Szymanski](https://github.com/szyman23)
+* [#2327](https://github.com/pmd/pmd/pull/2327): \[plsql] Parsing of WHERE CURRENT OF added - [Piotr Szymanski](https://github.com/szyman23)
+* [#2331](https://github.com/pmd/pmd/pull/2331): \[plsql] Fix in Comment statement - [Piotr Szymanski](https://github.com/szyman23)
+* [#2332](https://github.com/pmd/pmd/pull/2332): \[plsql] Fixed Execute Immediate statement parsing - [Piotr Szymanski](https://github.com/szyman23)
+* [#2338](https://github.com/pmd/pmd/pull/2338): \[cs] CPD: fixes in filtering of using directives - [Maikel Steneker](https://github.com/maikelsteneker)
+* [#2339](https://github.com/pmd/pmd/pull/2339): \[cs] CPD: Fixed CPD --ignore-usings option - [Maikel Steneker](https://github.com/maikelsteneker)
+* [#2340](https://github.com/pmd/pmd/pull/2340): \[plsql] fix for parsing / as divide or execute - [Piotr Szymanski](https://github.com/szyman23)
+* [#2342](https://github.com/pmd/pmd/pull/2342): \[xml] Update property used in example - [Piotrek Żygieło](https://github.com/pzygielo)
+* [#2344](https://github.com/pmd/pmd/pull/2344): \[doc] Update ruleset examples for ant - [Piotrek Żygieło](https://github.com/pzygielo)
+* [#2343](https://github.com/pmd/pmd/pull/2343): \[ci] Disable checking for snapshots in jcenter - [Piotrek Żygieło](https://github.com/pzygielo)
+
## 24-January-2020 - 6.21.0
The PMD team is pleased to announce PMD 6.21.0.