diff --git a/docs/_config.yml b/docs/_config.yml index 7c4bbba608..8faa80876b 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -2,7 +2,7 @@ repository: pmd/pmd pmd: version: 7.0.0-SNAPSHOT - previous_version: 6.36.0 + previous_version: 6.37.0 date: ??-?????-2021 release_type: major diff --git a/docs/pages/next_major_development.md b/docs/pages/next_major_development.md index b38e8e6714..a6dc241374 100644 --- a/docs/pages/next_major_development.md +++ b/docs/pages/next_major_development.md @@ -246,6 +246,34 @@ the breaking API changes will be performed in 7.0.0. an API is tagged as `@Deprecated` or not in the latest minor release. During the development of 7.0.0, we may decide to remove some APIs that were not tagged as deprecated, though we'll try to avoid it." %} +#### 6.37.0 + +##### PMD CLI + +* PMD has a new CLI option `-force-language`. With that a language can be forced to be used for all input files, + irrespective of filenames. When using this option, the automatic language selection by extension is disabled + and all files are tried to be parsed with the given language. Parsing errors are ignored and unparsable files + are skipped. + + This option allows to use the xml language for files, that don't use xml as extension. + See also the examples on [PMD CLI reference](pmd_userdocs_cli_reference.html#analyze-other-xml-formats). + +##### Experimental APIs + +* The AST types and APIs around Sealed Classes are not experimental anymore: + * {% jdoc !!java::lang.java.ast.ASTClassOrInterfaceDeclaration#isSealed() %}, + {% jdoc !!java::lang.java.ast.ASTClassOrInterfaceDeclaration#isNonSealed() %}, + {% jdoc !!java::lang.java.ast.ASTClassOrInterfaceDeclaration#getPermittedSubclasses() %} + * {% jdoc java::lang.java.ast.ASTPermitsList %} + +##### 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. + +* The inner class {% jdoc !!core::cpd.TokenEntry.State %} is considered to be internal API. + It will probably be moved away with PMD 7. + #### 6.36.0 No changes. @@ -1330,3 +1358,30 @@ large projects, with many duplications, it was causing `OutOfMemoryError`s (see * The Java rule {% rule "java/errorprone/CloneThrowsCloneNotSupportedException" %} has been deprecated without replacement. +* The following Java rules are deprecated and removed from the quickstart ruleset, + as the new rule {% rule java/bestpractices/SimplifiableTestAssertion %} merges + their functionality: + * {% rule java/bestpractices/UseAssertEqualsInsteadOfAssertTrue %} + * {% rule java/bestpractices/UseAssertNullInsteadOfAssertTrue %} + * {% rule java/bestpractices/UseAssertSameInsteadOfAssertTrue %} + * {% rule java/bestpractices/UseAssertTrueInsteadOfAssertEquals %} + * {% rule java/design/SimplifyBooleanAssertion %} + +* The Java rule {% rule java/errorprone/ReturnEmptyArrayRatherThanNull %} is deprecated and removed from + the quickstart ruleset, as the new rule {% rule java/errorprone/ReturnEmptyCollectionRatherThanNull %} + supersedes it. + +* The following Java rules are deprecated and removed from the quickstart ruleset, + as the new rule {% rule java/bestpractices/PrimitiveWrapperInstantiation %} merges + their functionality: + * {% rule java/performance/BooleanInstantiation %} + * {% rule java/performance/ByteInstantiation %} + * {% rule java/performance/IntegerInstantiation %} + * {% rule java/performance/LongInstantiation %} + * {% rule java/performance/ShortInstantiation %} + +* The Java rule {% rule java/performance/UnnecessaryWrapperObjectCreation %} is deprecated + with no planned replacement before PMD 7. In it's current state, the rule is not useful + as it finds only contrived cases of creating a primitive wrapper and unboxing it explicitly + in the same expression. In PMD 7 this and more cases will be covered by a + new rule `UnnecessaryBoxing`. diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 45cec2aaf1..8abb75f161 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -19,149 +19,11 @@ This is a {{ site.pmd.release_type }} release. ### New and noteworthy -#### Java 17 Support - -This release of PMD brings support for Java 17. PMD supports [JEP 409: Sealed Classes](https://openjdk.java.net/jeps/409) -which has been promoted to be a standard language feature of Java 17. - -PMD also supports [JEP 406: Pattern Matching for switch (Preview)](https://openjdk.java.net/jeps/406) as a preview -language feature. 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 `17-preview`: - - export PMD_JAVA_OPTS=--enable-preview - ./run.sh pmd -language java -version 17-preview ... - -Note: Support for Java 15 preview language features have been removed. The version "15-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.37.0). - -#### New rules - -This release ships with 3 new Java rules. - -* {% rule java/bestpractices/PrimitiveWrapperInstantiation %} reports usages of primitive wrapper - constructors. They are deprecated since Java 9 and should not be used. - -```xml - -``` - - The rule is part of the quickstart.xml ruleset. - -* {% rule java/bestpractices/SimplifiableTestAssertion %} suggests rewriting - some test assertions to be more readable. - -```xml - -``` - - The rule is part of the quickstart.xml ruleset. - -* {% rule java/errorprone/ReturnEmptyCollectionRatherThanNull %} suggests returning empty collections / arrays - instead of null. - -```xml - -``` - - The rule is part of the quickstart.xml ruleset. - -#### Renamed rules - -* The Java rule {% rule java/errorprone/MissingBreakInSwitch %} has been renamed to - {% rule java/errorprone/ImplicitSwitchFallThrough %} (category error prone) to better reflect the rule's - purpose: The rule finds implicit fall-through cases in switch statements, which are most - likely unexpected. The old rule name described only one way how to avoid a fall-through, - namely using `break` but `continue`, `throw` and `return` avoid a fall-through - as well. This enables us to improve this rule in the future. - -#### Deprecated rules - -* The following Java rules are deprecated and removed from the quickstart ruleset, - as the new rule {% rule java/bestpractices/SimplifiableTestAssertion %} merges - their functionality: - * {% rule java/bestpractices/UseAssertEqualsInsteadOfAssertTrue %} - * {% rule java/bestpractices/UseAssertNullInsteadOfAssertTrue %} - * {% rule java/bestpractices/UseAssertSameInsteadOfAssertTrue %} - * {% rule java/bestpractices/UseAssertTrueInsteadOfAssertEquals %} - * {% rule java/design/SimplifyBooleanAssertion %} - -* The Java rule {% rule java/errorprone/ReturnEmptyArrayRatherThanNull %} is deprecated and removed from - the quickstart ruleset, as the new rule {% rule java/errorprone/ReturnEmptyCollectionRatherThanNull %} - supersedes it. - -* The following Java rules are deprecated and removed from the quickstart ruleset, - as the new rule {% rule java/bestpractices/PrimitiveWrapperInstantiation %} merges - their functionality: - * {% rule java/performance/BooleanInstantiation %} - * {% rule java/performance/ByteInstantiation %} - * {% rule java/performance/IntegerInstantiation %} - * {% rule java/performance/LongInstantiation %} - * {% rule java/performance/ShortInstantiation %} - -* The Java rule {% rule java/performance/UnnecessaryWrapperObjectCreation %} is deprecated - with no planned replacement before PMD 7. In it's current state, the rule is not useful - as it finds only contrived cases of creating a primitive wrapper and unboxing it explicitly - in the same expression. In PMD 7 this and more cases will be covered by a - new rule `UnnecessaryBoxing`. - ### Fixed Issues -* apex - * [#3201](https://github.com/pmd/pmd/issues/3201): \[apex] ApexCRUDViolation doesn't report Database class DMLs, inline no-arg object instantiations and inline list initialization - * [#3329](https://github.com/pmd/pmd/issues/3329): \[apex] ApexCRUDViolation doesn't report SOQL for loops -* core - * [#1603](https://github.com/pmd/pmd/issues/1603): \[core] Language version comparison - * [#2133](https://github.com/pmd/pmd/issues/2133): \[xml] Allow to check Salesforce XML Metadata using XPath rules - * [#3377](https://github.com/pmd/pmd/issues/3377): \[core] NPE when specifying report file in current directory in PMD CLI - * [#3387](https://github.com/pmd/pmd/issues/3387): \[core] CPD should avoid unnecessary copies when running with --skip-lexical-errors -* java-bestpractices - * [#2908](https://github.com/pmd/pmd/issues/2908): \[java] Merge Junit assertion simplification rules - * [#3235](https://github.com/pmd/pmd/issues/3235): \[java] UseTryWithResources false positive when closeable is provided as a method argument or class field -* java-errorprone - * [#3361](https://github.com/pmd/pmd/issues/3361): \[java] Rename rule MissingBreakInSwitch to ImplicitSwitchFallThrough - * [#3382](https://github.com/pmd/pmd/pull/3382): \[java] New rule ReturnEmptyCollectionRatherThanNull -* java-performance - * [#3420](https://github.com/pmd/pmd/issues/3420): \[java] NPE in `InefficientStringBuffering` with Records - ### API Changes -#### PMD CLI - -* PMD has a new CLI option `-force-language`. With that a language can be forced to be used for all input files, - irrespective of filenames. When using this option, the automatic language selection by extension is disabled - and all files are tried to be parsed with the given language. Parsing errors are ignored and unparsable files - are skipped. - - This option allows to use the xml language for files, that don't use xml as extension. - See also the examples on [PMD CLI reference](pmd_userdocs_cli_reference.html#analyze-other-xml-formats). - -#### Experimental APIs - -* The AST types and APIs around Sealed Classes are not experimental anymore: - * {% jdoc !!java::lang.java.ast.ASTClassOrInterfaceDeclaration#isSealed() %}, - {% jdoc !!java::lang.java.ast.ASTClassOrInterfaceDeclaration#isNonSealed() %}, - {% jdoc !!java::lang.java.ast.ASTClassOrInterfaceDeclaration#getPermittedSubclasses() %} - * {% jdoc java::lang.java.ast.ASTPermitsList %} - -#### 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. - -* The inner class {% jdoc !!core::cpd.TokenEntry.State %} is considered to be internal API. - It will probably be moved away with PMD 7. - ### External Contributions -* [#3367](https://github.com/pmd/pmd/pull/3367): \[apex] Check SOQL CRUD on for loops - [Jonathan Wiesel](https://github.com/jonathanwiesel) -* [#3373](https://github.com/pmd/pmd/pull/3373): \[apex] Add ApexCRUDViolation support for database class, inline no-arg object construction DML and inline list initialization DML - [Jonathan Wiesel](https://github.com/jonathanwiesel) -* [#3385](https://github.com/pmd/pmd/pull/3385): \[core] CPD: Optimize --skip-lexical-errors option - [Woongsik Choi](https://github.com/woongsikchoi) -* [#3388](https://github.com/pmd/pmd/pull/3388): \[doc] Add Code Inspector in the list of tools - [Julien Delange](https://github.com/juli1) -* [#3417](https://github.com/pmd/pmd/pull/3417): \[core] Support forcing a specific language from the command-line - [Aidan Harding](https://github.com/aidan-harding) - {% endtocmaker %} diff --git a/docs/pages/release_notes_old.md b/docs/pages/release_notes_old.md index 807d854bd1..8f725ea160 100644 --- a/docs/pages/release_notes_old.md +++ b/docs/pages/release_notes_old.md @@ -5,6 +5,179 @@ permalink: pmd_release_notes_old.html Previous versions of PMD can be downloaded here: https://github.com/pmd/pmd/releases +## 28-August-2021 - 6.38.0-SNAPSHOT + +The PMD team is pleased to announce PMD 6.38.0-SNAPSHOT. + +This is a minor release. + +### Table Of Contents + +* [New and noteworthy](#new-and-noteworthy) + * [Java 17 Support](#java-17-support) + * [Updated PMD Designer](#updated-pmd-designer) + * [New rules](#new-rules) + * [Renamed rules](#renamed-rules) + * [Deprecated rules](#deprecated-rules) +* [Fixed Issues](#fixed-issues) +* [API Changes](#api-changes) + * [PMD CLI](#pmd-cli) + * [Experimental APIs](#experimental-apis) + * [Internal API](#internal-api) +* [External Contributions](#external-contributions) +* [Stats](#stats) + +### New and noteworthy + +#### Java 17 Support + +This release of PMD brings support for Java 17. PMD supports [JEP 409: Sealed Classes](https://openjdk.java.net/jeps/409) +which has been promoted to be a standard language feature of Java 17. + +PMD also supports [JEP 406: Pattern Matching for switch (Preview)](https://openjdk.java.net/jeps/406) as a preview +language feature. 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 `17-preview`: + + export PMD_JAVA_OPTS=--enable-preview + ./run.sh pmd -language java -version 17-preview ... + +Note: Support for Java 15 preview language features have been removed. The version "15-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.37.0). + +#### New rules + +This release ships with 3 new Java rules. + +* [`PrimitiveWrapperInstantiation`](https://pmd.github.io/pmd-6.38.0-SNAPSHOT/pmd_rules_java_bestpractices.html#primitivewrapperinstantiation) reports usages of primitive wrapper + constructors. They are deprecated since Java 9 and should not be used. + +```xml + +``` + + The rule is part of the quickstart.xml ruleset. + +* [`SimplifiableTestAssertion`](https://pmd.github.io/pmd-6.38.0-SNAPSHOT/pmd_rules_java_bestpractices.html#simplifiabletestassertion) suggests rewriting + some test assertions to be more readable. + +```xml + +``` + + The rule is part of the quickstart.xml ruleset. + +* [`ReturnEmptyCollectionRatherThanNull`](https://pmd.github.io/pmd-6.38.0-SNAPSHOT/pmd_rules_java_errorprone.html#returnemptycollectionratherthannull) suggests returning empty collections / arrays + instead of null. + +```xml + +``` + + The rule is part of the quickstart.xml ruleset. + +#### Renamed rules + +* The Java rule [`MissingBreakInSwitch`](https://pmd.github.io/pmd-6.38.0-SNAPSHOT/pmd_rules_java_errorprone.html#missingbreakinswitch) has been renamed to + [`ImplicitSwitchFallThrough`](https://pmd.github.io/pmd-6.38.0-SNAPSHOT/pmd_rules_java_errorprone.html#implicitswitchfallthrough) (category error prone) to better reflect the rule's + purpose: The rule finds implicit fall-through cases in switch statements, which are most + likely unexpected. The old rule name described only one way how to avoid a fall-through, + namely using `break` but `continue`, `throw` and `return` avoid a fall-through + as well. This enables us to improve this rule in the future. + +#### Deprecated rules + +* The following Java rules are deprecated and removed from the quickstart ruleset, + as the new rule [`SimplifiableTestAssertion`](https://pmd.github.io/pmd-6.38.0-SNAPSHOT/pmd_rules_java_bestpractices.html#simplifiabletestassertion) merges + their functionality: + * [`UseAssertEqualsInsteadOfAssertTrue`](https://pmd.github.io/pmd-6.38.0-SNAPSHOT/pmd_rules_java_bestpractices.html#useassertequalsinsteadofasserttrue) + * [`UseAssertNullInsteadOfAssertTrue`](https://pmd.github.io/pmd-6.38.0-SNAPSHOT/pmd_rules_java_bestpractices.html#useassertnullinsteadofasserttrue) + * [`UseAssertSameInsteadOfAssertTrue`](https://pmd.github.io/pmd-6.38.0-SNAPSHOT/pmd_rules_java_bestpractices.html#useassertsameinsteadofasserttrue) + * [`UseAssertTrueInsteadOfAssertEquals`](https://pmd.github.io/pmd-6.38.0-SNAPSHOT/pmd_rules_java_bestpractices.html#useasserttrueinsteadofassertequals) + * [`SimplifyBooleanAssertion`](https://pmd.github.io/pmd-6.38.0-SNAPSHOT/pmd_rules_java_design.html#simplifybooleanassertion) + +* The Java rule [`ReturnEmptyArrayRatherThanNull`](https://pmd.github.io/pmd-6.38.0-SNAPSHOT/pmd_rules_java_errorprone.html#returnemptyarrayratherthannull) is deprecated and removed from + the quickstart ruleset, as the new rule [`ReturnEmptyCollectionRatherThanNull`](https://pmd.github.io/pmd-6.38.0-SNAPSHOT/pmd_rules_java_errorprone.html#returnemptycollectionratherthannull) + supersedes it. + +* The following Java rules are deprecated and removed from the quickstart ruleset, + as the new rule [`PrimitiveWrapperInstantiation`](https://pmd.github.io/pmd-6.38.0-SNAPSHOT/pmd_rules_java_bestpractices.html#primitivewrapperinstantiation) merges + their functionality: + * [`BooleanInstantiation`](https://pmd.github.io/pmd-6.38.0-SNAPSHOT/pmd_rules_java_performance.html#booleaninstantiation) + * [`ByteInstantiation`](https://pmd.github.io/pmd-6.38.0-SNAPSHOT/pmd_rules_java_performance.html#byteinstantiation) + * [`IntegerInstantiation`](https://pmd.github.io/pmd-6.38.0-SNAPSHOT/pmd_rules_java_performance.html#integerinstantiation) + * [`LongInstantiation`](https://pmd.github.io/pmd-6.38.0-SNAPSHOT/pmd_rules_java_performance.html#longinstantiation) + * [`ShortInstantiation`](https://pmd.github.io/pmd-6.38.0-SNAPSHOT/pmd_rules_java_performance.html#shortinstantiation) + +* The Java rule [`UnnecessaryWrapperObjectCreation`](https://pmd.github.io/pmd-6.38.0-SNAPSHOT/pmd_rules_java_performance.html#unnecessarywrapperobjectcreation) is deprecated + with no planned replacement before PMD 7. In it's current state, the rule is not useful + as it finds only contrived cases of creating a primitive wrapper and unboxing it explicitly + in the same expression. In PMD 7 this and more cases will be covered by a + new rule `UnnecessaryBoxing`. + +### Fixed Issues + +* apex + * [#3201](https://github.com/pmd/pmd/issues/3201): \[apex] ApexCRUDViolation doesn't report Database class DMLs, inline no-arg object instantiations and inline list initialization + * [#3329](https://github.com/pmd/pmd/issues/3329): \[apex] ApexCRUDViolation doesn't report SOQL for loops +* core + * [#1603](https://github.com/pmd/pmd/issues/1603): \[core] Language version comparison + * [#2133](https://github.com/pmd/pmd/issues/2133): \[xml] Allow to check Salesforce XML Metadata using XPath rules + * [#3377](https://github.com/pmd/pmd/issues/3377): \[core] NPE when specifying report file in current directory in PMD CLI + * [#3387](https://github.com/pmd/pmd/issues/3387): \[core] CPD should avoid unnecessary copies when running with --skip-lexical-errors +* java-bestpractices + * [#2908](https://github.com/pmd/pmd/issues/2908): \[java] Merge Junit assertion simplification rules + * [#3235](https://github.com/pmd/pmd/issues/3235): \[java] UseTryWithResources false positive when closeable is provided as a method argument or class field +* java-errorprone + * [#3361](https://github.com/pmd/pmd/issues/3361): \[java] Rename rule MissingBreakInSwitch to ImplicitSwitchFallThrough + * [#3382](https://github.com/pmd/pmd/pull/3382): \[java] New rule ReturnEmptyCollectionRatherThanNull +* java-performance + * [#3420](https://github.com/pmd/pmd/issues/3420): \[java] NPE in `InefficientStringBuffering` with Records + +### API Changes + +#### PMD CLI + +* PMD has a new CLI option `-force-language`. With that a language can be forced to be used for all input files, + irrespective of filenames. When using this option, the automatic language selection by extension is disabled + and all files are tried to be parsed with the given language. Parsing errors are ignored and unparsable files + are skipped. + + This option allows to use the xml language for files, that don't use xml as extension. + See also the examples on [PMD CLI reference](pmd_userdocs_cli_reference.html#analyze-other-xml-formats). + +#### Experimental APIs + +* The AST types and APIs around Sealed Classes are not experimental anymore: + * ASTClassOrInterfaceDeclaration#isSealed, + ASTClassOrInterfaceDeclaration#isNonSealed, + ASTClassOrInterfaceDeclaration#getPermittedSubclasses + * ASTPermitsList + +#### 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. + +* The inner class net.sourceforge.pmd.cpd.TokenEntry.State is considered to be internal API. + It will probably be moved away with PMD 7. + +### External Contributions + +* [#3367](https://github.com/pmd/pmd/pull/3367): \[apex] Check SOQL CRUD on for loops - [Jonathan Wiesel](https://github.com/jonathanwiesel) +* [#3373](https://github.com/pmd/pmd/pull/3373): \[apex] Add ApexCRUDViolation support for database class, inline no-arg object construction DML and inline list initialization DML - [Jonathan Wiesel](https://github.com/jonathanwiesel) +* [#3385](https://github.com/pmd/pmd/pull/3385): \[core] CPD: Optimize --skip-lexical-errors option - [Woongsik Choi](https://github.com/woongsikchoi) +* [#3388](https://github.com/pmd/pmd/pull/3388): \[doc] Add Code Inspector in the list of tools - [Julien Delange](https://github.com/juli1) +* [#3417](https://github.com/pmd/pmd/pull/3417): \[core] Support forcing a specific language from the command-line - [Aidan Harding](https://github.com/aidan-harding) + +### Stats +* 82 commits +* 29 closed tickets & PRs +* Days since last release: 35 + ## 26-June-2021 - 6.36.0 The PMD team is pleased to announce PMD 6.36.0. diff --git a/pom.xml b/pom.xml index da83839013..234cb91679 100644 --- a/pom.xml +++ b/pom.xml @@ -76,7 +76,7 @@ - 2021-06-26T08:24:14Z + 2021-07-31T17:02:07Z 8