diff --git a/docs/_config.yml b/docs/_config.yml index 41f2ede58c..0fc7e8505d 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -1,9 +1,9 @@ repository: pmd/pmd pmd: - version: 6.27.0 - previous_version: 6.26.0 - date: 31-August-2020 + version: 6.28.0-SNAPSHOT + previous_version: 6.27.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 c44e3b8364..b8f8783555 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -14,195 +14,11 @@ This is a {{ site.pmd.release_type }} release. ### New and noteworthy -#### Java 15 Support - -This release of PMD brings support for Java 15. PMD can parse [Text Blocks](https://openjdk.java.net/jeps/378) -which have been promoted to be a standard language feature of Java. - -PMD also supports [Pattern Matching for instanceof](https://openjdk.java.net/jeps/375), -[Records](https://openjdk.java.net/jeps/384), and [Sealed Classes](https://openjdk.java.net/jeps/360). - -Note: The Pattern Matching for instanceof, Records, and Sealed Classes are all preview language features of OpenJDK 15 -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 `15-preview`: - - export PMD_JAVA_OPTS=--enable-preview - ./run.sh pmd -language java -version 15-preview ... - -Note: Support for Java 13 preview language features have been removed. The version "13-preview" is no longer available. - -#### Changes in how tab characters are handled - -In the past, tab characters in source files has been handled differently in different languages by PMD. -For instance in Java, tab characters had a width of 8 columns, while C# used only 1 column. Visualforce instead -used 4 columns. - -This has been unified now so that tab characters are consistently now always 1 column wide. - -This however might be a **incompatible** change, if you're using the properties "BeginColumn" or "EndColumn" -additionally to "BeginLine" and "EndLine" of a Token/AST node in order to highlight -where a rule violation occurred in the source file. If you have logic there that deals with tab characters, -you most likely can remove this logic now, since tab characters are now just "normal" characters -in terms of string processing. - -See also [[all] Ensure PMD/CPD uses tab width of 1 for tabs consistently #2656](https://github.com/pmd/pmd/pull/2656). - -#### 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.27.0). - -#### New Rules - -* The new Java rule {% rule "java/bestpractices/AvoidReassigningCatchVariables" %} (`java-bestpractices`) finds - cases where the variable of the caught exception is reassigned. This practice is surprising and prevents - further evolution of the code like multi-catch. - -#### Modified Rules - -* The Java rule {% rule "java/errorprone/CloseResource" %} (`java-errorprone`) has a new property - `closeNotInFinally`. With this property set to `true` the rule will also find calls to close a - resource, which are not in a finally-block of a try-statement. If a resource is not closed within a - finally block, it might not be closed at all in case of exceptions. - - As this new detection would yield many new violations, it is disabled by default. It might be - enabled in a later version of PMD. - -#### Deprecated Rules - -* The Java rule {% rule "java/errorprone/DataflowAnomalyAnalysis" %} (`java-errorprone`) - is deprecated in favour of {% rule "java/bestpractices/UnusedAssignment" %} (`java-bestpractices`), - which was introduced in PMD 6.26.0. - ### Fixed Issues -* core - * [#724](https://github.com/pmd/pmd/issues/724): \[core] Avoid parsing rulesets multiple times - * [#1962](https://github.com/pmd/pmd/issues/1962): \[core] Simplify Report API - * [#2653](https://github.com/pmd/pmd/issues/2653): \[lang-test] Upgrade kotlintest to Kotest - * [#2656](https://github.com/pmd/pmd/pull/2656): \[all] Ensure PMD/CPD uses tab width of 1 for tabs consistently - * [#2690](https://github.com/pmd/pmd/pull/2690): \[core] Fix java7 compatibility -* java - * [#2646](https://github.com/pmd/pmd/issues/2646): \[java] Support JDK 15 -* java-bestpractices - * [#2471](https://github.com/pmd/pmd/issues/2471): \[java] New Rule: AvoidReassigningCatchVariables - * [#2663](https://github.com/pmd/pmd/issues/2663): \[java] NoClassDefFoundError on upgrade from 6.25.0 to 6.26.0 - * [#2668](https://github.com/pmd/pmd/issues/2668): \[java] UnusedAssignment false positives - * [#2673](https://github.com/pmd/pmd/issues/2673): \[java] UnusedPrivateField and SingularField false positive with lombok annotation EqualsAndHashCode - * [#2684](https://github.com/pmd/pmd/issues/2684): \[java] UnusedAssignment FP in try/catch - * [#2686](https://github.com/pmd/pmd/issues/2686): \[java] UnusedAssignment must not flag abstract method parameters in interfaces and abstract classes -* java-design - * [#2108](https://github.com/pmd/pmd/issues/2108): \[java] \[doc] ImmutableField rule: Description should clarify shallow immutability - * [#2461](https://github.com/pmd/pmd/issues/2461): \[java] ExcessiveParameterListRule must ignore a private constructor -* java-errorprone - * [#2264](https://github.com/pmd/pmd/issues/2264): \[java] SuspiciousEqualsMethodName: Improve description about error-prone overloading of equals() - * [#2410](https://github.com/pmd/pmd/issues/2410): \[java] ProperCloneImplementation not valid for final class - * [#2431](https://github.com/pmd/pmd/issues/2431): \[java] InvalidLogMessageFormatRule throws IndexOutOfBoundsException when only logging exception message - * [#2439](https://github.com/pmd/pmd/issues/2439): \[java] AvoidCatchingThrowable can not detect the case: catch (java.lang.Throwable t) - * [#2470](https://github.com/pmd/pmd/issues/2470): \[java] CloseResource false positive when resource included in return value - * [#2531](https://github.com/pmd/pmd/issues/2531): \[java] UnnecessaryCaseChange can not detect the case like: foo.equals(bar.toLowerCase()) - * [#2647](https://github.com/pmd/pmd/issues/2647): \[java] Deprecate rule DataFlowAnomalyAnalysis -* java-performance - * [#1868](https://github.com/pmd/pmd/issues/1868): \[java] false-positive for SimplifyStartsWith if string is empty - * [#2441](https://github.com/pmd/pmd/issues/2441): \[java] RedundantFieldInitializer can not detect a special case for char initialize: `char foo = '\0';` - * [#2530](https://github.com/pmd/pmd/issues/2530): \[java] StringToString can not detect the case: getStringMethod().toString() -* dart - * [#2750](https://github.com/pmd/pmd/pull/2750): \[dart] \[cpd] Cpd Dart escaped dollar - - ### API Changes -* XML rule definition in rulesets: In PMD 7, the `language` attribute will be required on all `rule` - elements that declare a new rule. Some base rule classes set the language implicitly in their - constructor, and so this is not required in all cases for the rule to work. But this - behavior will be discontinued in PMD 7, so missing `language` attributes are now - reported as a forward compatibility warning. - -#### Deprecated API - -##### For removal - -* {% jdoc !!core::Rule#getParserOptions() %} -* {% jdoc !!core::lang.Parser#getParserOptions() %} -* {% jdoc core::lang.AbstractParser %} -* {% jdoc !!core::RuleContext#removeAttribute(java.lang.String) %} -* {% jdoc !!core::RuleContext#getAttribute(java.lang.String) %} -* {% jdoc !!core::RuleContext#setAttribute(java.lang.String, java.lang.Object) %} -* {% jdoc apex::lang.apex.ApexParserOptions %} -* {% jdoc !!java::lang.java.ast.ASTThrowStatement#getFirstClassOrInterfaceTypeImage() %} -* {% jdoc javascript::lang.ecmascript.EcmascriptParserOptions %} -* {% jdoc javascript::lang.ecmascript.rule.EcmascriptXPathRule %} -* {% jdoc xml::lang.xml.XmlParserOptions %} -* {% jdoc xml::lang.xml.rule.XmlXPathRule %} -* Properties of {% jdoc xml::lang.xml.rule.AbstractXmlRule %} - -* {% jdoc !!core::Report.ReadableDuration %} -* Many methods of {% jdoc !!core::Report %}. They are replaced by accessors - that produce a List. For example, {% jdoc !a!core::Report#iterator() %} - (and implementing Iterable) and {% jdoc !a!core::Report#isEmpty() %} are both - replaced by {% jdoc !a!core::Report#getViolations() %}. - -* The dataflow codebase is deprecated for removal in PMD 7. This - includes all code in the following packages, and their subpackages: - * {% jdoc_package plsql::lang.plsql.dfa %} - * {% jdoc_package java::lang.java.dfa %} - * {% jdoc_package core::lang.dfa %} - * and the class {% jdoc plsql::lang.plsql.PLSQLDataFlowHandler %} - -* {% jdoc visualforce::lang.vf.VfSimpleCharStream %} - -* {% jdoc jsp::lang.jsp.ast.ASTJspDeclarations %} -* {% jdoc jsp::lang.jsp.ast.ASTJspDocument %} -* {% jdoc !!scala::lang.scala.ast.ScalaParserVisitorAdapter#zero() %} -* {% jdoc !!scala::lang.scala.ast.ScalaParserVisitorAdapter#combine(Object, Object) %} -* {% jdoc apex::lang.apex.ast.ApexParserVisitorReducedAdapter %} -* {% jdoc java::lang.java.ast.JavaParserVisitorReducedAdapter %} - -* {% jdoc java::lang.java.typeresolution.TypeHelper %} is deprecated in - favor of {% jdoc java::lang.java.types.TypeTestUtil %}, which has the -same functionality, but a slightly changed API. -* Many of the classes in {% jdoc_package java::lang.java.symboltable %} -are deprecated as internal API. - - ### External Contributions -* [#2656](https://github.com/pmd/pmd/pull/2656): \[all] Ensure PMD/CPD uses tab width of 1 for tabs consistently - [Maikel Steneker](https://github.com/maikelsteneker) -* [#2659](https://github.com/pmd/pmd/pull/2659): \[java] StringToString can not detect the case: getStringMethod().toString() - [Mykhailo Palahuta](https://github.com/Drofff) -* [#2662](https://github.com/pmd/pmd/pull/2662): \[java] UnnecessaryCaseChange can not detect the case like: foo.equals(bar.toLowerCase()) - [Mykhailo Palahuta](https://github.com/Drofff) -* [#2671](https://github.com/pmd/pmd/pull/2671): \[java] CloseResource false positive when resource included in return value - [Mykhailo Palahuta](https://github.com/Drofff) -* [#2674](https://github.com/pmd/pmd/pull/2674): \[java] add lombok.EqualsAndHashCode in AbstractLombokAwareRule - [berkam](https://github.com/berkam) -* [#2677](https://github.com/pmd/pmd/pull/2677): \[java] RedundantFieldInitializer can not detect a special case for char initialize: `char foo = '\0';` - [Mykhailo Palahuta](https://github.com/Drofff) -* [#2678](https://github.com/pmd/pmd/pull/2678): \[java] AvoidCatchingThrowable can not detect the case: catch (java.lang.Throwable t) - [Mykhailo Palahuta](https://github.com/Drofff) -* [#2679](https://github.com/pmd/pmd/pull/2679): \[java] InvalidLogMessageFormatRule throws IndexOutOfBoundsException when only logging exception message - [Mykhailo Palahuta](https://github.com/Drofff) -* [#2682](https://github.com/pmd/pmd/pull/2682): \[java] New Rule: AvoidReassigningCatchVariables - [Mykhailo Palahuta](https://github.com/Drofff) -* [#2697](https://github.com/pmd/pmd/pull/2697): \[java] ExcessiveParameterListRule must ignore a private constructor - [Mykhailo Palahuta](https://github.com/Drofff) -* [#2699](https://github.com/pmd/pmd/pull/2699): \[java] ProperCloneImplementation not valid for final class - [Mykhailo Palahuta](https://github.com/Drofff) -* [#2700](https://github.com/pmd/pmd/pull/2700): \[java] Fix OnlyOneReturn code example - [Jan-Lukas Else](https://github.com/jlelse) -* [#2722](https://github.com/pmd/pmd/pull/2722): \[doc] \[java] ImmutableField: extend description, fixes #2108 - [Mateusz Stefanski](https://github.com/mateusz-stefanski) -* [#2723](https://github.com/pmd/pmd/pull/2723): \[doc] \[java] SimplifyStartsWith: update description and example, fixes #1868 - [Mateusz Stefanski](https://github.com/mateusz-stefanski) -* [#2724](https://github.com/pmd/pmd/pull/2724): \[doc] [java] SuspiciousEqualsMethodName: update description, fixes #2264 - [Mateusz Stefanski](https://github.com/mateusz-stefanski) -* [#2725](https://github.com/pmd/pmd/pull/2725): Cleanup: change valueOf to parse when we need primitive return value. - [XenoAmess](https://github.com/XenoAmess) -* [#2726](https://github.com/pmd/pmd/pull/2726): Cleanup: replace StringBuffer with StringBuilder - [XenoAmess](https://github.com/XenoAmess) -* [#2727](https://github.com/pmd/pmd/pull/2727): Cleanup: replace indexOf() < 0 with contains - [XenoAmess](https://github.com/XenoAmess) -* [#2728](https://github.com/pmd/pmd/pull/2728): Cleanup: javadoc issues - [XenoAmess](https://github.com/XenoAmess) -* [#2729](https://github.com/pmd/pmd/pull/2729): Cleanup: use print instead of printf if no format exists - [XenoAmess](https://github.com/XenoAmess) -* [#2730](https://github.com/pmd/pmd/pull/2730): Cleanup: StringBuilder issues - [XenoAmess](https://github.com/XenoAmess) -* [#2731](https://github.com/pmd/pmd/pull/2731): Cleanup: avoid compiling Patterns repeatedly - [XenoAmess](https://github.com/XenoAmess) -* [#2732](https://github.com/pmd/pmd/pull/2732): Cleanup: use StandardCharsets instead of Charset.forName - [XenoAmess](https://github.com/XenoAmess) -* [#2733](https://github.com/pmd/pmd/pull/2733): Cleanup: Collection::addAll issues - [XenoAmess](https://github.com/XenoAmess) -* [#2734](https://github.com/pmd/pmd/pull/2734): Cleanup: use try with resources - [XenoAmess](https://github.com/XenoAmess) -* [#2744](https://github.com/pmd/pmd/pull/2744): Cleanup: fix typos - [XenoAmess](https://github.com/XenoAmess) -* [#2745](https://github.com/pmd/pmd/pull/2745): \[core] Fix a NPE in buildUsageText - [XenoAmess](https://github.com/XenoAmess) -* [#2749](https://github.com/pmd/pmd/pull/2749): \[dart] \[cpd] Improvements for Dart interpolated strings - [Maikel Steneker](https://github.com/maikelsteneker) -* [#2750](https://github.com/pmd/pmd/pull/2750): \[dart] \[cpd] Cpd Dart escaped dollar - [Maikel Steneker](https://github.com/maikelsteneker) - - -### Stats -* 189 commits -* 68 closed tickets & PRs -* Days since last release: 37 - {% endtocmaker %} diff --git a/docs/pages/release_notes_old.md b/docs/pages/release_notes_old.md index 2a82305ca9..701786589c 100644 --- a/docs/pages/release_notes_old.md +++ b/docs/pages/release_notes_old.md @@ -5,6 +5,220 @@ permalink: pmd_release_notes_old.html Previous versions of PMD can be downloaded here: https://github.com/pmd/pmd/releases +## 31-August-2020 - 6.27.0 + +The PMD team is pleased to announce PMD 6.27.0. + +This is a minor release. + +### Table Of Contents + +* [New and noteworthy](#new-and-noteworthy) + * [Java 15 Support](#java-15-support) + * [Changes in how tab characters are handled](#changes-in-how-tab-characters-are-handled) + * [Updated PMD Designer](#updated-pmd-designer) + * [New Rules](#new-rules) + * [Modified Rules](#modified-rules) + * [Deprecated Rules](#deprecated-rules) +* [Fixed Issues](#fixed-issues) +* [API Changes](#api-changes) + * [Deprecated API](#deprecated-api) + * [For removal](#for-removal) +* [External Contributions](#external-contributions) +* [Stats](#stats) + +### New and noteworthy + +#### Java 15 Support + +This release of PMD brings support for Java 15. PMD can parse [Text Blocks](https://openjdk.java.net/jeps/378) +which have been promoted to be a standard language feature of Java. + +PMD also supports [Pattern Matching for instanceof](https://openjdk.java.net/jeps/375), +[Records](https://openjdk.java.net/jeps/384), and [Sealed Classes](https://openjdk.java.net/jeps/360). + +Note: The Pattern Matching for instanceof, Records, and Sealed Classes are all preview language features of OpenJDK 15 +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 `15-preview`: + + export PMD_JAVA_OPTS=--enable-preview + ./run.sh pmd -language java -version 15-preview ... + +Note: Support for Java 13 preview language features have been removed. The version "13-preview" is no longer available. + +#### Changes in how tab characters are handled + +In the past, tab characters in source files has been handled differently in different languages by PMD. +For instance in Java, tab characters had a width of 8 columns, while C# used only 1 column. Visualforce instead +used 4 columns. + +This has been unified now so that tab characters are consistently now always 1 column wide. + +This however might be a **incompatible** change, if you're using the properties "BeginColumn" or "EndColumn" +additionally to "BeginLine" and "EndLine" of a Token/AST node in order to highlight +where a rule violation occurred in the source file. If you have logic there that deals with tab characters, +you most likely can remove this logic now, since tab characters are now just "normal" characters +in terms of string processing. + +See also [[all] Ensure PMD/CPD uses tab width of 1 for tabs consistently #2656](https://github.com/pmd/pmd/pull/2656). + +#### 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.27.0). + +#### New Rules + +* The new Java rule [`AvoidReassigningCatchVariables`](https://pmd.github.io/pmd-6.27.0/pmd_rules_java_bestpractices.html#avoidreassigningcatchvariables) (`java-bestpractices`) finds + cases where the variable of the caught exception is reassigned. This practice is surprising and prevents + further evolution of the code like multi-catch. + +#### Modified Rules + +* The Java rule [`CloseResource`](https://pmd.github.io/pmd-6.27.0/pmd_rules_java_errorprone.html#closeresource) (`java-errorprone`) has a new property + `closeNotInFinally`. With this property set to `true` the rule will also find calls to close a + resource, which are not in a finally-block of a try-statement. If a resource is not closed within a + finally block, it might not be closed at all in case of exceptions. + + As this new detection would yield many new violations, it is disabled by default. It might be + enabled in a later version of PMD. + +#### Deprecated Rules + +* The Java rule [`DataflowAnomalyAnalysis`](https://pmd.github.io/pmd-6.27.0/pmd_rules_java_errorprone.html#dataflowanomalyanalysis) (`java-errorprone`) + is deprecated in favour of [`UnusedAssignment`](https://pmd.github.io/pmd-6.27.0/pmd_rules_java_bestpractices.html#unusedassignment) (`java-bestpractices`), + which was introduced in PMD 6.26.0. + +### Fixed Issues + +* core + * [#724](https://github.com/pmd/pmd/issues/724): \[core] Avoid parsing rulesets multiple times + * [#1962](https://github.com/pmd/pmd/issues/1962): \[core] Simplify Report API + * [#2653](https://github.com/pmd/pmd/issues/2653): \[lang-test] Upgrade kotlintest to Kotest + * [#2656](https://github.com/pmd/pmd/pull/2656): \[all] Ensure PMD/CPD uses tab width of 1 for tabs consistently + * [#2690](https://github.com/pmd/pmd/pull/2690): \[core] Fix java7 compatibility +* java + * [#2646](https://github.com/pmd/pmd/issues/2646): \[java] Support JDK 15 +* java-bestpractices + * [#2471](https://github.com/pmd/pmd/issues/2471): \[java] New Rule: AvoidReassigningCatchVariables + * [#2663](https://github.com/pmd/pmd/issues/2663): \[java] NoClassDefFoundError on upgrade from 6.25.0 to 6.26.0 + * [#2668](https://github.com/pmd/pmd/issues/2668): \[java] UnusedAssignment false positives + * [#2673](https://github.com/pmd/pmd/issues/2673): \[java] UnusedPrivateField and SingularField false positive with lombok annotation EqualsAndHashCode + * [#2684](https://github.com/pmd/pmd/issues/2684): \[java] UnusedAssignment FP in try/catch + * [#2686](https://github.com/pmd/pmd/issues/2686): \[java] UnusedAssignment must not flag abstract method parameters in interfaces and abstract classes +* java-design + * [#2108](https://github.com/pmd/pmd/issues/2108): \[java] \[doc] ImmutableField rule: Description should clarify shallow immutability + * [#2461](https://github.com/pmd/pmd/issues/2461): \[java] ExcessiveParameterListRule must ignore a private constructor +* java-errorprone + * [#2264](https://github.com/pmd/pmd/issues/2264): \[java] SuspiciousEqualsMethodName: Improve description about error-prone overloading of equals() + * [#2410](https://github.com/pmd/pmd/issues/2410): \[java] ProperCloneImplementation not valid for final class + * [#2431](https://github.com/pmd/pmd/issues/2431): \[java] InvalidLogMessageFormatRule throws IndexOutOfBoundsException when only logging exception message + * [#2439](https://github.com/pmd/pmd/issues/2439): \[java] AvoidCatchingThrowable can not detect the case: catch (java.lang.Throwable t) + * [#2470](https://github.com/pmd/pmd/issues/2470): \[java] CloseResource false positive when resource included in return value + * [#2531](https://github.com/pmd/pmd/issues/2531): \[java] UnnecessaryCaseChange can not detect the case like: foo.equals(bar.toLowerCase()) + * [#2647](https://github.com/pmd/pmd/issues/2647): \[java] Deprecate rule DataFlowAnomalyAnalysis +* java-performance + * [#1868](https://github.com/pmd/pmd/issues/1868): \[java] false-positive for SimplifyStartsWith if string is empty + * [#2441](https://github.com/pmd/pmd/issues/2441): \[java] RedundantFieldInitializer can not detect a special case for char initialize: `char foo = '\0';` + * [#2530](https://github.com/pmd/pmd/issues/2530): \[java] StringToString can not detect the case: getStringMethod().toString() +* dart + * [#2750](https://github.com/pmd/pmd/pull/2750): \[dart] \[cpd] Cpd Dart escaped dollar + + +### API Changes + +* XML rule definition in rulesets: In PMD 7, the `language` attribute will be required on all `rule` + elements that declare a new rule. Some base rule classes set the language implicitly in their + constructor, and so this is not required in all cases for the rule to work. But this + behavior will be discontinued in PMD 7, so missing `language` attributes are now + reported as a forward compatibility warning. + +#### Deprecated API + +##### For removal + +* Rule#getParserOptions +* Parser#getParserOptions +* AbstractParser +* RuleContext#removeAttribute +* RuleContext#getAttribute +* RuleContext#setAttribute +* ApexParserOptions +* ASTThrowStatement#getFirstClassOrInterfaceTypeImage +* EcmascriptParserOptions +* EcmascriptXPathRule +* XmlParserOptions +* XmlXPathRule +* Properties of AbstractXmlRule + +* net.sourceforge.pmd.Report.ReadableDuration +* Many methods of net.sourceforge.pmd.Report. They are replaced by accessors + that produce a List. For example, iterator() + (and implementing Iterable) and isEmpty() are both + replaced by getViolations(). + +* The dataflow codebase is deprecated for removal in PMD 7. This + includes all code in the following packages, and their subpackages: + * net.sourceforge.pmd.lang.plsql.dfa + * net.sourceforge.pmd.lang.java.dfa + * net.sourceforge.pmd.lang.dfa + * and the class PLSQLDataFlowHandler + +* VfSimpleCharStream + +* ASTJspDeclarations +* ASTJspDocument +* ScalaParserVisitorAdapter#zero +* ScalaParserVisitorAdapter#combine +* ApexParserVisitorReducedAdapter +* JavaParserVisitorReducedAdapter + +* TypeHelper is deprecated in + favor of TypeTestUtil, which has the +same functionality, but a slightly changed API. +* Many of the classes in net.sourceforge.pmd.lang.java.symboltable +are deprecated as internal API. + + +### External Contributions + +* [#2656](https://github.com/pmd/pmd/pull/2656): \[all] Ensure PMD/CPD uses tab width of 1 for tabs consistently - [Maikel Steneker](https://github.com/maikelsteneker) +* [#2659](https://github.com/pmd/pmd/pull/2659): \[java] StringToString can not detect the case: getStringMethod().toString() - [Mykhailo Palahuta](https://github.com/Drofff) +* [#2662](https://github.com/pmd/pmd/pull/2662): \[java] UnnecessaryCaseChange can not detect the case like: foo.equals(bar.toLowerCase()) - [Mykhailo Palahuta](https://github.com/Drofff) +* [#2671](https://github.com/pmd/pmd/pull/2671): \[java] CloseResource false positive when resource included in return value - [Mykhailo Palahuta](https://github.com/Drofff) +* [#2674](https://github.com/pmd/pmd/pull/2674): \[java] add lombok.EqualsAndHashCode in AbstractLombokAwareRule - [berkam](https://github.com/berkam) +* [#2677](https://github.com/pmd/pmd/pull/2677): \[java] RedundantFieldInitializer can not detect a special case for char initialize: `char foo = '\0';` - [Mykhailo Palahuta](https://github.com/Drofff) +* [#2678](https://github.com/pmd/pmd/pull/2678): \[java] AvoidCatchingThrowable can not detect the case: catch (java.lang.Throwable t) - [Mykhailo Palahuta](https://github.com/Drofff) +* [#2679](https://github.com/pmd/pmd/pull/2679): \[java] InvalidLogMessageFormatRule throws IndexOutOfBoundsException when only logging exception message - [Mykhailo Palahuta](https://github.com/Drofff) +* [#2682](https://github.com/pmd/pmd/pull/2682): \[java] New Rule: AvoidReassigningCatchVariables - [Mykhailo Palahuta](https://github.com/Drofff) +* [#2697](https://github.com/pmd/pmd/pull/2697): \[java] ExcessiveParameterListRule must ignore a private constructor - [Mykhailo Palahuta](https://github.com/Drofff) +* [#2699](https://github.com/pmd/pmd/pull/2699): \[java] ProperCloneImplementation not valid for final class - [Mykhailo Palahuta](https://github.com/Drofff) +* [#2700](https://github.com/pmd/pmd/pull/2700): \[java] Fix OnlyOneReturn code example - [Jan-Lukas Else](https://github.com/jlelse) +* [#2722](https://github.com/pmd/pmd/pull/2722): \[doc] \[java] ImmutableField: extend description, fixes #2108 - [Mateusz Stefanski](https://github.com/mateusz-stefanski) +* [#2723](https://github.com/pmd/pmd/pull/2723): \[doc] \[java] SimplifyStartsWith: update description and example, fixes #1868 - [Mateusz Stefanski](https://github.com/mateusz-stefanski) +* [#2724](https://github.com/pmd/pmd/pull/2724): \[doc] [java] SuspiciousEqualsMethodName: update description, fixes #2264 - [Mateusz Stefanski](https://github.com/mateusz-stefanski) +* [#2725](https://github.com/pmd/pmd/pull/2725): Cleanup: change valueOf to parse when we need primitive return value. - [XenoAmess](https://github.com/XenoAmess) +* [#2726](https://github.com/pmd/pmd/pull/2726): Cleanup: replace StringBuffer with StringBuilder - [XenoAmess](https://github.com/XenoAmess) +* [#2727](https://github.com/pmd/pmd/pull/2727): Cleanup: replace indexOf() < 0 with contains - [XenoAmess](https://github.com/XenoAmess) +* [#2728](https://github.com/pmd/pmd/pull/2728): Cleanup: javadoc issues - [XenoAmess](https://github.com/XenoAmess) +* [#2729](https://github.com/pmd/pmd/pull/2729): Cleanup: use print instead of printf if no format exists - [XenoAmess](https://github.com/XenoAmess) +* [#2730](https://github.com/pmd/pmd/pull/2730): Cleanup: StringBuilder issues - [XenoAmess](https://github.com/XenoAmess) +* [#2731](https://github.com/pmd/pmd/pull/2731): Cleanup: avoid compiling Patterns repeatedly - [XenoAmess](https://github.com/XenoAmess) +* [#2732](https://github.com/pmd/pmd/pull/2732): Cleanup: use StandardCharsets instead of Charset.forName - [XenoAmess](https://github.com/XenoAmess) +* [#2733](https://github.com/pmd/pmd/pull/2733): Cleanup: Collection::addAll issues - [XenoAmess](https://github.com/XenoAmess) +* [#2734](https://github.com/pmd/pmd/pull/2734): Cleanup: use try with resources - [XenoAmess](https://github.com/XenoAmess) +* [#2744](https://github.com/pmd/pmd/pull/2744): Cleanup: fix typos - [XenoAmess](https://github.com/XenoAmess) +* [#2745](https://github.com/pmd/pmd/pull/2745): \[core] Fix a NPE in buildUsageText - [XenoAmess](https://github.com/XenoAmess) +* [#2749](https://github.com/pmd/pmd/pull/2749): \[dart] \[cpd] Improvements for Dart interpolated strings - [Maikel Steneker](https://github.com/maikelsteneker) +* [#2750](https://github.com/pmd/pmd/pull/2750): \[dart] \[cpd] Cpd Dart escaped dollar - [Maikel Steneker](https://github.com/maikelsteneker) + + +### Stats +* 189 commits +* 68 closed tickets & PRs +* Days since last release: 37 + ## 25-July-2020 - 6.26.0 The PMD team is pleased to announce PMD 6.26.0.