Merge branch 'master' of github.com:pmd/pmd into lua-types
This commit is contained in:
commit
ba77fa19e5
52 files changed
+340
-163
No files matched your search
+10
@@ -0,0 +1,10 @@
|
||||
# PMD's sponsors
|
||||
|
||||
Many thanks to all our sponsors:
|
||||
|
||||
* [Matt Hargett](https://github.com/matthargett) (@matthargett)
|
||||
|
||||
If you also want to sponsor PMD, you have two options:
|
||||
|
||||
* [Sponsor @pmd on GitHub Sponsors](https://github.com/sponsors/pmd)
|
||||
* [PMD - Open Collective](https://opencollective.com/pmd)
|
||||
+3
-3
@@ -1,9 +1,9 @@
|
||||
repository: pmd/pmd
|
||||
|
||||
pmd:
|
||||
version: 6.48.0-SNAPSHOT
|
||||
previous_version: 6.47.0
|
||||
date: 30-July-2022
|
||||
version: 6.49.0-SNAPSHOT
|
||||
previous_version: 6.48.0
|
||||
date: 31-August-2022
|
||||
release_type: minor
|
||||
|
||||
# release types: major, minor, bugfix
|
||||
|
||||
@@ -125,6 +125,59 @@ 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.48.0
|
||||
|
||||
##### CPD CLI
|
||||
|
||||
* CPD has a new CLI option `--debug`. This option has the same behavior as in PMD. It enables more verbose
|
||||
logging output.
|
||||
|
||||
##### Rule Test Framework
|
||||
|
||||
* The module "pmd-test", which contains support classes to write rule tests, now **requires Java 8**. If you depend on
|
||||
this module for testing your own custom rules, you'll need to make sure to use at least Java 8.
|
||||
* The new module "pmd-test-schema" contains now the XSD schema and the code to parse the rule test XML files. The
|
||||
schema has been extracted in order to easily share it with other tools like the Rule Designer or IDE plugins.
|
||||
* Test schema changes:
|
||||
* The attribute `isRegressionTest` of `test-code` is deprecated. The new
|
||||
attribute `disabled` should be used instead for defining whether a rule test should be skipped or not.
|
||||
* The attributes `reinitializeRule` and `useAuxClasspath` of `test-code` are deprecated and assumed true.
|
||||
They will not be replaced.
|
||||
* The new attribute `focused` of `test-code` allows disabling all tests except the focused one temporarily.
|
||||
* More information about the rule test framework can be found in the documentation:
|
||||
[Testing your rules](pmd_userdocs_extending_testing.html)
|
||||
|
||||
##### Deprecated API
|
||||
|
||||
* The experimental Java AST class {% jdoc java::lang.java.ast.ASTGuardedPattern %} has been deprecated and
|
||||
will be removed. It was introduced for Java 17 and Java 18 Preview as part of pattern matching for switch,
|
||||
but it is no longer supported with Java 19 Preview.
|
||||
* The interface {% jdoc core::cpd.renderer.CPDRenderer %} is deprecated. For custom CPD renderers
|
||||
the new interface {% jdoc core::cpd.renderer.CPDReportRenderer %} should be used.
|
||||
* The class {% jdoc test::testframework.TestDescriptor %} is deprecated, replaced with {% jdoc test-schema::test.schema.RuleTestDescriptor %}.
|
||||
* Many methods of {% jdoc test::testframework.RuleTst %} have been deprecated as internal API.
|
||||
|
||||
##### Experimental APIs
|
||||
|
||||
* To support the Java preview language features "Pattern Matching for Switch" and "Record Patterns", the following
|
||||
AST nodes have been introduced as experimental:
|
||||
* {% jdoc java::lang.java.ast.ASTSwitchGuard %}
|
||||
* {% jdoc java::lang.java.ast.ASTRecordPattern %}
|
||||
* {% jdoc java::lang.java.ast.ASTComponentPatternList %}
|
||||
|
||||
##### 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 !!core::cpd.CPDConfiguration#setRenderer(net.sourceforge.pmd.cpd.Renderer) %}
|
||||
* {%jdoc !!core::cpd.CPDConfiguration#setCPDRenderer(net.sourceforge.pmd.cpd.renderer.CPDRenderer) %}
|
||||
* {%jdoc !!core::cpd.CPDConfiguration#getRenderer() %}
|
||||
* {%jdoc !!core::cpd.CPDConfiguration#getCPDRenderer() %}
|
||||
* {%jdoc !!core::cpd.CPDConfiguration#getRendererFromString(java.lang.String,java.lang.String) %}
|
||||
* {%jdoc !!core::cpd.CPDConfiguration#getCPDRendererFromString(java.lang.String,java.lang.String) %}
|
||||
* {%jdoc core::cpd.renderer.CPDRendererAdapter %}
|
||||
|
||||
#### 6.47.0
|
||||
|
||||
No changes.
|
||||
|
||||
@@ -73,6 +73,9 @@ Novice as much as advanced readers may want to [read on on Refactoring Guru](htt
|
||||
description="Sources code language."
|
||||
default="java"
|
||||
%}
|
||||
{% include custom/cli_option_row.html options="--debug,--verbose"
|
||||
description="Debug mode. Prints more log output."
|
||||
%}
|
||||
{% include custom/cli_option_row.html options="--encoding"
|
||||
description="Character encoding to use when processing files. If not specified, CPD uses the system default encoding."
|
||||
%}
|
||||
|
||||
@@ -14,112 +14,11 @@ This is a {{ site.pmd.release_type }} release.
|
||||
|
||||
### New and noteworthy
|
||||
|
||||
#### Java 19 Support
|
||||
|
||||
This release of PMD brings support for Java 19. There are no new standard language features.
|
||||
|
||||
PMD supports [JEP 427: Pattern Matching for switch (Third Preview)](https://openjdk.org/jeps/427) and
|
||||
[JEP 405: Record Patterns (Preview)](https://openjdk.org/jeps/405) as preview language features.
|
||||
|
||||
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 `19-preview`:
|
||||
|
||||
export PMD_JAVA_OPTS=--enable-preview
|
||||
./run.sh pmd -language java -version 19-preview ...
|
||||
|
||||
Note: Support for Java 17 preview language features have been removed. The version "17-preview" is no longer available.
|
||||
|
||||
#### Gherkin support
|
||||
Thanks to the contribution from [Anne Brouwers](https://github.com/ASBrouwers) PMD now has CPD support
|
||||
for the [Gherkin](https://cucumber.io/docs/gherkin/) language. It is used to defined test cases for the
|
||||
[Cucumber](https://cucumber.io/) testing tool for behavior-driven development.
|
||||
|
||||
Being based on a proper Antlr grammar, CPD can:
|
||||
|
||||
* ignore comments
|
||||
* honor [comment-based suppressions](pmd_userdocs_cpd.html#suppression)
|
||||
|
||||
### Fixed Issues
|
||||
* apex
|
||||
* [#4056](https://github.com/pmd/pmd/pull/4056): \[apex] ApexSOQLInjection: Add support count query
|
||||
* core
|
||||
* [#4021](https://github.com/pmd/pmd/pull/4021): \[core] CPD: Add total number of tokens to XML reports
|
||||
* [#4031](https://github.com/pmd/pmd/issues/4031): \[core] If report is written to stdout, stdout should not be closed
|
||||
* [#4053](https://github.com/pmd/pmd/pull/4053): \[core] Allow building PMD under Java 18+
|
||||
* java
|
||||
* [#4015](https://github.com/pmd/pmd/issues/4015): \[java] Support JDK 19
|
||||
* java-bestpractices
|
||||
* [#3455](https://github.com/pmd/pmd/issues/3455): \[java] WhileLoopWithLiteralBoolean - false negative with complex expressions
|
||||
* java-design
|
||||
* [#3729](https://github.com/pmd/pmd/issues/3729): \[java] TooManyMethods ignores "real" methods which are named like getters or setters
|
||||
* [#3949](https://github.com/pmd/pmd/issues/3949): \[java] FinalFieldCouldBeStatic - false negative with unnecessary parenthesis
|
||||
* java-performance
|
||||
* [#3625](https://github.com/pmd/pmd/issues/3625): \[java] AddEmptyString - false negative with empty var
|
||||
* lua
|
||||
* [#4061](https://github.com/pmd/pmd/pull/4061): \[lua] Fix several related Lua parsing issues found when using CPD
|
||||
* test
|
||||
* [#3302](https://github.com/pmd/pmd/pull/3302): \[test] Improve xml test schema
|
||||
* [#3758](https://github.com/pmd/pmd/issues/3758): \[test] Move pmd-test to java 8
|
||||
* [#3976](https://github.com/pmd/pmd/pull/3976): \[test] Extract xml schema module
|
||||
|
||||
### API Changes
|
||||
|
||||
#### Rule Test Framework
|
||||
|
||||
* The module "pmd-test", which contains support classes to write rule tests, now **requires Java 8**. If you depend on
|
||||
this module for testing your own custom rules, you'll need to make sure to use at least Java 8.
|
||||
* The new module "pmd-test-schema" contains now the XSD schema and the code to parse the rule test XML files. The
|
||||
schema has been extracted in order to easily share it with other tools like the Rule Designer or IDE plugins.
|
||||
* Test schema changes:
|
||||
* The attribute `isRegressionTest` of `test-code` is deprecated. The new
|
||||
attribute `disabled` should be used instead for defining whether a rule test should be skipped or not.
|
||||
* The attributes `reinitializeRule` and `useAuxClasspath` of `test-code` are deprecated and assumed true.
|
||||
They will not be replaced.
|
||||
* The new attribute `focused` of `test-code` allows disabling all tests except the focused one temporarily.
|
||||
* More information about the rule test framework can be found in the documentation:
|
||||
[Testing your rules](pmd_userdocs_extending_testing.html)
|
||||
|
||||
#### Deprecated API
|
||||
|
||||
* The experimental Java AST class {% jdoc java::lang.java.ast.ASTGuardedPattern %} has been deprecated and
|
||||
will be removed. It was introduced for Java 17 and Java 18 Preview as part of pattern matching for switch,
|
||||
but it is no longer supported with Java 19 Preview.
|
||||
* The interface {% jdoc core::cpd.renderer.CPDRenderer %} is deprecated. For custom CPD renderers
|
||||
the new interface {% jdoc core::cpd.renderer.CPDReportRenderer %} should be used.
|
||||
* The class {% jdoc test::testframework.TestDescriptor %} is deprecated, replaced with {% jdoc test-schema::testframework.RuleTestDescriptor %}.
|
||||
* Many methods of {% jdoc test::testframework.RuleTst %} have been deprecated as internal API.
|
||||
|
||||
#### Experimental APIs
|
||||
|
||||
* To support the Java preview language features "Pattern Matching for Switch" and "Record Patterns", the following
|
||||
AST nodes have been introduced as experimental:
|
||||
* {% jdoc java::lang.java.ast.ASTSwitchGuard %}
|
||||
* {% jdoc java::lang.java.ast.ASTRecordPattern %}
|
||||
* {% jdoc java::lang.java.ast.ASTComponentPatternList %}
|
||||
|
||||
#### 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 !!core::cpd.CPDConfiguration#setRenderer(net.sourceforge.pmd.cpd.Renderer) %}
|
||||
* {%jdoc !!core::cpd.CPDConfiguration#setCPDRenderer(net.sourceforge.pmd.cpd.renderer.CPDRenderer) %}
|
||||
* {%jdoc !!core::cpd.CPDConfiguration#getRenderer() %}
|
||||
* {%jdoc !!core::cpd.CPDConfiguration#getCPDRenderer() %}
|
||||
* {%jdoc !!core::cpd.CPDConfiguration#getRendererFromString(java.lang.String,java.lang.String) %}
|
||||
* {%jdoc !!core::cpd.CPDConfiguration#getCPDRendererFromString(java.lang.String,java.lang.String) %}
|
||||
* {%jdoc core::cpd.renderer.CPDRendererAdapter %}
|
||||
|
||||
### External Contributions
|
||||
* [#3984](https://github.com/pmd/pmd/pull/3984): \[java] Fix AddEmptyString false-negative issue - [@LiGaOg](https://github.com/LiGaOg)
|
||||
* [#3988](https://github.com/pmd/pmd/pull/3988): \[java] Modify WhileLoopWithLiteralBoolean to meet the missing case #3455 - [@VoidxHoshi](https://github.com/VoidxHoshi)
|
||||
* [#3992](https://github.com/pmd/pmd/pull/3992): \[java] FinalFieldCouldBeStatic - fix false negative with unnecessary parenthesis - [@dalizi007](https://github.com/dalizi007)
|
||||
* [#3994](https://github.com/pmd/pmd/pull/3994): \[java] TooManyMethods - improve getter/setter detection (#3729) - [@341816041](https://github.com/341816041)
|
||||
* [#4017](https://github.com/pmd/pmd/pull/4017): Add Gherkin support to CPD - [@ASBrouwers](https://github.com/ASBrouwers)
|
||||
* [#4021](https://github.com/pmd/pmd/pull/4021): \[core] CPD: Add total number of tokens to XML reports - [@maikelsteneker](https://github.com/maikelsteneker)
|
||||
* [#4056](https://github.com/pmd/pmd/pull/4056): \[apex] ApexSOQLInjection: Add support count query - [@gwilymatgearset](https://github.com/gwilymatgearset)
|
||||
* [#4061](https://github.com/pmd/pmd/pull/4061): \[lua] Fix several related Lua parsing issues found when using CPD - [@matthargett](https://github.com/matthargett)
|
||||
|
||||
{% endtocmaker %}
|
||||
|
||||
@@ -5,6 +5,155 @@ permalink: pmd_release_notes_old.html
|
||||
|
||||
Previous versions of PMD can be downloaded here: https://github.com/pmd/pmd/releases
|
||||
|
||||
## 30-July-2022 - 6.48.0
|
||||
|
||||
The PMD team is pleased to announce PMD 6.48.0.
|
||||
|
||||
This is a minor release.
|
||||
|
||||
### Table Of Contents
|
||||
|
||||
* [New and noteworthy](#new-and-noteworthy)
|
||||
* [Java 19 Support](#java-19-support)
|
||||
* [Gherkin support](#gherkin-support)
|
||||
* [Fixed Issues](#fixed-issues)
|
||||
* [API Changes](#api-changes)
|
||||
* [CPD CLI](#cpd-cli)
|
||||
* [Rule Test Framework](#rule-test-framework)
|
||||
* [Deprecated API](#deprecated-api)
|
||||
* [Experimental APIs](#experimental-apis)
|
||||
* [Internal API](#internal-api)
|
||||
* [Financial Contributions](#financial-contributions)
|
||||
* [External Contributions](#external-contributions)
|
||||
* [Stats](#stats)
|
||||
|
||||
### New and noteworthy
|
||||
|
||||
#### Java 19 Support
|
||||
|
||||
This release of PMD brings support for Java 19. There are no new standard language features.
|
||||
|
||||
PMD supports [JEP 427: Pattern Matching for switch (Third Preview)](https://openjdk.org/jeps/427) and
|
||||
[JEP 405: Record Patterns (Preview)](https://openjdk.org/jeps/405) as preview language features.
|
||||
|
||||
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 `19-preview`:
|
||||
|
||||
export PMD_JAVA_OPTS=--enable-preview
|
||||
./run.sh pmd -language java -version 19-preview ...
|
||||
|
||||
Note: Support for Java 17 preview language features have been removed. The version "17-preview" is no longer available.
|
||||
|
||||
#### Gherkin support
|
||||
Thanks to the contribution from [Anne Brouwers](https://github.com/ASBrouwers) PMD now has CPD support
|
||||
for the [Gherkin](https://cucumber.io/docs/gherkin/) language. It is used to defined test cases for the
|
||||
[Cucumber](https://cucumber.io/) testing tool for behavior-driven development.
|
||||
|
||||
Being based on a proper Antlr grammar, CPD can:
|
||||
|
||||
* ignore comments
|
||||
* honor [comment-based suppressions](pmd_userdocs_cpd.html#suppression)
|
||||
|
||||
### Fixed Issues
|
||||
* apex
|
||||
* [#4056](https://github.com/pmd/pmd/pull/4056): \[apex] ApexSOQLInjection: Add support count query
|
||||
* core
|
||||
* [#3796](https://github.com/pmd/pmd/issues/3796): \[core] CPD should also provide a `--debug` flag
|
||||
* [#4021](https://github.com/pmd/pmd/pull/4021): \[core] CPD: Add total number of tokens to XML reports
|
||||
* [#4031](https://github.com/pmd/pmd/issues/4031): \[core] If report is written to stdout, stdout should not be closed
|
||||
* [#4051](https://github.com/pmd/pmd/issues/4051): \[doc] Additional rulesets are not listed in documentation
|
||||
* [#4053](https://github.com/pmd/pmd/pull/4053): \[core] Allow building PMD under Java 18+
|
||||
* java
|
||||
* [#4015](https://github.com/pmd/pmd/issues/4015): \[java] Support JDK 19
|
||||
* java-bestpractices
|
||||
* [#3455](https://github.com/pmd/pmd/issues/3455): \[java] WhileLoopWithLiteralBoolean - false negative with complex expressions
|
||||
* java-design
|
||||
* [#3729](https://github.com/pmd/pmd/issues/3729): \[java] TooManyMethods ignores "real" methods which are named like getters or setters
|
||||
* [#3949](https://github.com/pmd/pmd/issues/3949): \[java] FinalFieldCouldBeStatic - false negative with unnecessary parenthesis
|
||||
* java-performance
|
||||
* [#3625](https://github.com/pmd/pmd/issues/3625): \[java] AddEmptyString - false negative with empty var
|
||||
* lua
|
||||
* [#4061](https://github.com/pmd/pmd/pull/4061): \[lua] Fix several related Lua parsing issues found when using CPD
|
||||
* test
|
||||
* [#3302](https://github.com/pmd/pmd/pull/3302): \[test] Improve xml test schema
|
||||
* [#3758](https://github.com/pmd/pmd/issues/3758): \[test] Move pmd-test to java 8
|
||||
* [#3976](https://github.com/pmd/pmd/pull/3976): \[test] Extract xml schema module
|
||||
|
||||
### API Changes
|
||||
|
||||
#### CPD CLI
|
||||
|
||||
* CPD has a new CLI option `--debug`. This option has the same behavior as in PMD. It enables more verbose
|
||||
logging output.
|
||||
|
||||
#### Rule Test Framework
|
||||
|
||||
* The module "pmd-test", which contains support classes to write rule tests, now **requires Java 8**. If you depend on
|
||||
this module for testing your own custom rules, you'll need to make sure to use at least Java 8.
|
||||
* The new module "pmd-test-schema" contains now the XSD schema and the code to parse the rule test XML files. The
|
||||
schema has been extracted in order to easily share it with other tools like the Rule Designer or IDE plugins.
|
||||
* Test schema changes:
|
||||
* The attribute `isRegressionTest` of `test-code` is deprecated. The new
|
||||
attribute `disabled` should be used instead for defining whether a rule test should be skipped or not.
|
||||
* The attributes `reinitializeRule` and `useAuxClasspath` of `test-code` are deprecated and assumed true.
|
||||
They will not be replaced.
|
||||
* The new attribute `focused` of `test-code` allows disabling all tests except the focused one temporarily.
|
||||
* More information about the rule test framework can be found in the documentation:
|
||||
[Testing your rules](pmd_userdocs_extending_testing.html)
|
||||
|
||||
#### Deprecated API
|
||||
|
||||
* The experimental Java AST class <a href="https://docs.pmd-code.org/apidocs/pmd-java/6.48.0/net/sourceforge/pmd/lang/java/ast/ASTGuardedPattern.html#"><code>ASTGuardedPattern</code></a> has been deprecated and
|
||||
will be removed. It was introduced for Java 17 and Java 18 Preview as part of pattern matching for switch,
|
||||
but it is no longer supported with Java 19 Preview.
|
||||
* The interface <a href="https://docs.pmd-code.org/apidocs/pmd-core/6.48.0/net/sourceforge/pmd/cpd/renderer/CPDRenderer.html#"><code>CPDRenderer</code></a> is deprecated. For custom CPD renderers
|
||||
the new interface <a href="https://docs.pmd-code.org/apidocs/pmd-core/6.48.0/net/sourceforge/pmd/cpd/renderer/CPDReportRenderer.html#"><code>CPDReportRenderer</code></a> should be used.
|
||||
* The class <a href="https://docs.pmd-code.org/apidocs/pmd-test/6.48.0/net/sourceforge/pmd/testframework/TestDescriptor.html#"><code>TestDescriptor</code></a> is deprecated, replaced with <a href="https://docs.pmd-code.org/apidocs/pmd-test-schema/6.48.0/net/sourceforge/pmd/test/schema/RuleTestDescriptor.html#"><code>RuleTestDescriptor</code></a>.
|
||||
* Many methods of <a href="https://docs.pmd-code.org/apidocs/pmd-test/6.48.0/net/sourceforge/pmd/testframework/RuleTst.html#"><code>RuleTst</code></a> have been deprecated as internal API.
|
||||
|
||||
#### Experimental APIs
|
||||
|
||||
* To support the Java preview language features "Pattern Matching for Switch" and "Record Patterns", the following
|
||||
AST nodes have been introduced as experimental:
|
||||
* <a href="https://docs.pmd-code.org/apidocs/pmd-java/6.48.0/net/sourceforge/pmd/lang/java/ast/ASTSwitchGuard.html#"><code>ASTSwitchGuard</code></a>
|
||||
* <a href="https://docs.pmd-code.org/apidocs/pmd-java/6.48.0/net/sourceforge/pmd/lang/java/ast/ASTRecordPattern.html#"><code>ASTRecordPattern</code></a>
|
||||
* <a href="https://docs.pmd-code.org/apidocs/pmd-java/6.48.0/net/sourceforge/pmd/lang/java/ast/ASTComponentPatternList.html#"><code>ASTComponentPatternList</code></a>
|
||||
|
||||
#### 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.
|
||||
|
||||
* <a href="https://docs.pmd-code.org/apidocs/pmd-core/6.48.0/net/sourceforge/pmd/cpd/CPDConfiguration.html#setRenderer(net.sourceforge.pmd.cpd.Renderer)"><code>CPDConfiguration#setRenderer</code></a>
|
||||
* <a href="https://docs.pmd-code.org/apidocs/pmd-core/6.48.0/net/sourceforge/pmd/cpd/CPDConfiguration.html#setCPDRenderer(net.sourceforge.pmd.cpd.renderer.CPDRenderer)"><code>CPDConfiguration#setCPDRenderer</code></a>
|
||||
* <a href="https://docs.pmd-code.org/apidocs/pmd-core/6.48.0/net/sourceforge/pmd/cpd/CPDConfiguration.html#getRenderer()"><code>CPDConfiguration#getRenderer</code></a>
|
||||
* <a href="https://docs.pmd-code.org/apidocs/pmd-core/6.48.0/net/sourceforge/pmd/cpd/CPDConfiguration.html#getCPDRenderer()"><code>CPDConfiguration#getCPDRenderer</code></a>
|
||||
* <a href="https://docs.pmd-code.org/apidocs/pmd-core/6.48.0/net/sourceforge/pmd/cpd/CPDConfiguration.html#getRendererFromString(java.lang.String,java.lang.String)"><code>CPDConfiguration#getRendererFromString</code></a>
|
||||
* <a href="https://docs.pmd-code.org/apidocs/pmd-core/6.48.0/net/sourceforge/pmd/cpd/CPDConfiguration.html#getCPDRendererFromString(java.lang.String,java.lang.String)"><code>CPDConfiguration#getCPDRendererFromString</code></a>
|
||||
* <a href="https://docs.pmd-code.org/apidocs/pmd-core/6.48.0/net/sourceforge/pmd/cpd/renderer/CPDRendererAdapter.html#"><code>CPDRendererAdapter</code></a>
|
||||
|
||||
### Financial Contributions
|
||||
|
||||
Many thanks to our sponsors:
|
||||
|
||||
* [Matt Hargett](https://github.com/matthargett) (@matthargett)
|
||||
|
||||
### External Contributions
|
||||
* [#3984](https://github.com/pmd/pmd/pull/3984): \[java] Fix AddEmptyString false-negative issue - [@LiGaOg](https://github.com/LiGaOg)
|
||||
* [#3988](https://github.com/pmd/pmd/pull/3988): \[java] Modify WhileLoopWithLiteralBoolean to meet the missing case #3455 - [@VoidxHoshi](https://github.com/VoidxHoshi)
|
||||
* [#3992](https://github.com/pmd/pmd/pull/3992): \[java] FinalFieldCouldBeStatic - fix false negative with unnecessary parenthesis - [@dalizi007](https://github.com/dalizi007)
|
||||
* [#3994](https://github.com/pmd/pmd/pull/3994): \[java] TooManyMethods - improve getter/setter detection (#3729) - [@341816041](https://github.com/341816041)
|
||||
* [#4017](https://github.com/pmd/pmd/pull/4017): Add Gherkin support to CPD - [@ASBrouwers](https://github.com/ASBrouwers)
|
||||
* [#4021](https://github.com/pmd/pmd/pull/4021): \[core] CPD: Add total number of tokens to XML reports - [@maikelsteneker](https://github.com/maikelsteneker)
|
||||
* [#4056](https://github.com/pmd/pmd/pull/4056): \[apex] ApexSOQLInjection: Add support count query - [@gwilymatgearset](https://github.com/gwilymatgearset)
|
||||
* [#4061](https://github.com/pmd/pmd/pull/4061): \[lua] Fix several related Lua parsing issues found when using CPD - [@matthargett](https://github.com/matthargett)
|
||||
|
||||
### Stats
|
||||
* 102 commits
|
||||
* 26 closed tickets & PRs
|
||||
* Days since last release: 35
|
||||
|
||||
## 25-June-2022 - 6.47.0
|
||||
|
||||
The PMD team is pleased to announce PMD 6.47.0.
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<parent>
|
||||
<groupId>net.sourceforge.pmd</groupId>
|
||||
<artifactId>pmd</artifactId>
|
||||
<version>6.48.0-SNAPSHOT</version>
|
||||
<version>6.49.0-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>net.sourceforge.pmd</groupId>
|
||||
<artifactId>pmd</artifactId>
|
||||
<version>6.48.0-SNAPSHOT</version>
|
||||
<version>6.49.0-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>net.sourceforge.pmd</groupId>
|
||||
<artifactId>pmd</artifactId>
|
||||
<version>6.48.0-SNAPSHOT</version>
|
||||
<version>6.49.0-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.TreeMap;
|
||||
import java.util.logging.ConsoleHandler;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -28,6 +29,7 @@ import net.sourceforge.pmd.util.IOUtil;
|
||||
import net.sourceforge.pmd.util.database.DBMSMetadata;
|
||||
import net.sourceforge.pmd.util.database.DBURI;
|
||||
import net.sourceforge.pmd.util.database.SourceObject;
|
||||
import net.sourceforge.pmd.util.log.ScopedLogHandlersManager;
|
||||
|
||||
public class CPD {
|
||||
private static final Logger LOGGER = Logger.getLogger(CPD.class.getName());
|
||||
@@ -54,8 +56,10 @@ public class CPD {
|
||||
}
|
||||
|
||||
public void go() {
|
||||
LOGGER.fine("Running match algorithm on " + source.size() + " files...");
|
||||
matchAlgorithm = new MatchAlgorithm(source, tokens, configuration.getMinimumTileSize(), listener);
|
||||
matchAlgorithm.findMatches();
|
||||
LOGGER.fine("Finished: " + matchAlgorithm.getMatches().size() + " duplicates found");
|
||||
}
|
||||
|
||||
public Iterator<Match> getMatches() {
|
||||
@@ -80,6 +84,7 @@ public class CPD {
|
||||
if (!dir.exists()) {
|
||||
throw new FileNotFoundException("Couldn't find directory " + dir);
|
||||
}
|
||||
LOGGER.fine("Searching directory " + dir + " for files");
|
||||
FileFinder finder = new FileFinder();
|
||||
// TODO - could use SourceFileSelector here
|
||||
add(finder.findFilesFrom(dir, configuration.filenameFilter(), recurse));
|
||||
@@ -145,6 +150,7 @@ public class CPD {
|
||||
}
|
||||
|
||||
private void addAndThrowLexicalError(SourceCode sourceCode) throws IOException {
|
||||
LOGGER.fine("Tokenizing " + sourceCode.getFileName());
|
||||
configuration.tokenizer().tokenize(sourceCode, tokens);
|
||||
listener.addedFile(1, new File(sourceCode.getFileName()));
|
||||
source.put(sourceCode.getFileName(), sourceCode);
|
||||
@@ -206,6 +212,13 @@ public class CPD {
|
||||
return statusCode;
|
||||
}
|
||||
|
||||
final Level logLevel = arguments.isDebug() ? Level.FINER : Level.INFO;
|
||||
final ScopedLogHandlersManager logHandlerManager = new ScopedLogHandlersManager(logLevel, new ConsoleHandler());
|
||||
final Level oldLogLevel = LOGGER.getLevel();
|
||||
// Need to do this, since the static logger has already been initialized
|
||||
// at this point
|
||||
LOGGER.setLevel(logLevel);
|
||||
|
||||
CPD cpd = new CPD(arguments);
|
||||
|
||||
try {
|
||||
@@ -233,6 +246,9 @@ public class CPD {
|
||||
e.printStackTrace();
|
||||
LOGGER.severe(CliMessages.errorDetectedMessage(1, CPDCommandLineInterface.PROGRAM_NAME));
|
||||
statusCode = StatusCode.ERROR;
|
||||
} finally {
|
||||
logHandlerManager.close();
|
||||
LOGGER.setLevel(oldLogLevel);
|
||||
}
|
||||
return statusCode;
|
||||
}
|
||||
|
||||
@@ -141,6 +141,9 @@ public class CPDConfiguration extends AbstractConfiguration {
|
||||
description = "By default CPD exits with status 4 if code duplications are found. Disable this option with '-failOnViolation false' to exit with 0 instead and just write the report.")
|
||||
private boolean failOnViolation = true;
|
||||
|
||||
@Parameter(names = { "--debug", "--verbose" }, description = "Debug mode.")
|
||||
private boolean debug = false;
|
||||
|
||||
// this has to be a public static class, so that JCommander can use it!
|
||||
public static class LanguageConverter implements IStringConverter<Language> {
|
||||
|
||||
@@ -540,4 +543,14 @@ public class CPDConfiguration extends AbstractConfiguration {
|
||||
public void setFailOnViolation(boolean failOnViolation) {
|
||||
this.failOnViolation = failOnViolation;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDebug() {
|
||||
return debug;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDebug(boolean debug) {
|
||||
this.debug = debug;
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,10 @@
|
||||
|
||||
package net.sourceforge.pmd.cpd;
|
||||
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static org.hamcrest.Matchers.containsString;
|
||||
import static org.hamcrest.Matchers.not;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
@@ -17,9 +21,9 @@ import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.contrib.java.lang.system.SystemErrRule;
|
||||
import org.junit.contrib.java.lang.system.SystemOutRule;
|
||||
import org.junit.rules.TemporaryFolder;
|
||||
|
||||
@@ -39,6 +43,10 @@ public class CPDCommandLineInterfaceTest {
|
||||
|
||||
@Rule
|
||||
public final SystemOutRule log = new SystemOutRule().enableLog().muteForSuccessfulTests();
|
||||
|
||||
@Rule
|
||||
public final SystemErrRule errLog = new SystemErrRule().enableLog().muteForSuccessfulTests();
|
||||
|
||||
@Rule
|
||||
public final JavaUtilLoggingRule loggingRule = new JavaUtilLoggingRule(PMD.class.getPackage().getName()).mute();
|
||||
@Rule
|
||||
@@ -65,8 +73,8 @@ public class CPDCommandLineInterfaceTest {
|
||||
CPD.StatusCode statusCode = CPD.runCpd("--minimum-tokens", "340", "--language", "java", "--files",
|
||||
SRC_DIR, "--format", "xml");
|
||||
final String expectedFilesXml = getExpectedFileEntriesXml(NUMBER_OF_TOKENS.keySet());
|
||||
Assert.assertEquals(CPD.StatusCode.OK, statusCode);
|
||||
Assert.assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "\n" + "<pmd-cpd>" + "\n" + expectedFilesXml + "</pmd-cpd>", log.getLog());
|
||||
assertEquals(CPD.StatusCode.OK, statusCode);
|
||||
assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "\n" + "<pmd-cpd>" + "\n" + expectedFilesXml + "</pmd-cpd>", log.getLog());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -80,12 +88,29 @@ public class CPDCommandLineInterfaceTest {
|
||||
|
||||
CPD.StatusCode statusCode = CPD.runCpd("--minimum-tokens", "340", "--language", "java", "--filelist",
|
||||
filelist.toAbsolutePath().toString(), "--format", "xml", "-failOnViolation", "true");
|
||||
Assert.assertEquals(CPD.StatusCode.OK, statusCode);
|
||||
Assert.assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "\n" + "<pmd-cpd>" + "\n" + expectedFilesXml + "</pmd-cpd>", log.getLog());
|
||||
assertEquals(CPD.StatusCode.OK, statusCode);
|
||||
assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "\n" + "<pmd-cpd>" + "\n" + expectedFilesXml + "</pmd-cpd>", log.getLog());
|
||||
assertTrue(loggingRule.getLog().contains("Some deprecated options were used on the command-line, including -failOnViolation"));
|
||||
assertTrue(loggingRule.getLog().contains("Consider replacing it with --fail-on-violation"));
|
||||
// only one parameter is logged
|
||||
assertFalse(loggingRule.getLog().contains("Some deprecated options were used on the command-line, including --filelist"));
|
||||
assertFalse(loggingRule.getLog().contains("Consider replacing it with --file-list"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDebugLogging() {
|
||||
CPD.StatusCode statusCode = CPD.runCpd("--minimum-tokens", "340", "--language", "java", "--files",
|
||||
SRC_DIR, "--debug");
|
||||
assertEquals(CPD.StatusCode.OK, statusCode);
|
||||
assertThat(errLog.getLog(), containsString("Tokenizing ")); // this is a debug logging
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNormalLogging() {
|
||||
loggingRule.clear();
|
||||
CPD.StatusCode statusCode = CPD.runCpd("--minimum-tokens", "340", "--language", "java", "--files",
|
||||
SRC_DIR);
|
||||
assertEquals(CPD.StatusCode.OK, statusCode);
|
||||
assertThat(errLog.getLog(), not(containsString("Tokenizing "))); // this is a debug logging
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>net.sourceforge.pmd</groupId>
|
||||
<artifactId>pmd</artifactId>
|
||||
<version>6.48.0-SNAPSHOT</version>
|
||||
<version>6.49.0-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>net.sourceforge.pmd</groupId>
|
||||
<artifactId>pmd</artifactId>
|
||||
<version>6.48.0-SNAPSHOT</version>
|
||||
<version>6.49.0-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>net.sourceforge.pmd</groupId>
|
||||
<artifactId>pmd</artifactId>
|
||||
<version>6.48.0-SNAPSHOT</version>
|
||||
<version>6.49.0-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@
|
||||
<parent>
|
||||
<groupId>net.sourceforge.pmd</groupId>
|
||||
<artifactId>pmd</artifactId>
|
||||
<version>6.48.0-SNAPSHOT</version>
|
||||
<version>6.49.0-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
+1
-1
@@ -8,7 +8,7 @@
|
||||
<parent>
|
||||
<groupId>net.sourceforge.pmd</groupId>
|
||||
<artifactId>pmd</artifactId>
|
||||
<version>6.48.0-SNAPSHOT</version>
|
||||
<version>6.49.0-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@@ -47,16 +47,17 @@ public final class GenerateRuleDocsCmd {
|
||||
System.out.println("Generated docs in " + (System.currentTimeMillis() - start) + " ms");
|
||||
}
|
||||
|
||||
static final Pattern ADDITIONAL_RULESET_PATTERN = Pattern.compile("^.+" + Pattern.quote(File.separator) + "pmd-\\w+"
|
||||
+ Pattern.quote(IOUtil.normalizePath(File.separator + Paths.get("src", "main", "resources", "rulesets").toString()) + File.separator)
|
||||
+ "\\w+" + Pattern.quote(File.separator) + "\\w+.xml$");
|
||||
|
||||
public static List<String> findAdditionalRulesets(Path basePath) {
|
||||
try {
|
||||
List<String> additionalRulesets = new ArrayList<>();
|
||||
Pattern rulesetPattern = Pattern.compile("^.+" + Pattern.quote(File.separator) + "pmd-\\w+"
|
||||
+ Pattern.quote(IOUtil.normalizePath(File.separator + Paths.get("src", "main", "resources", "rulesets").toString() + File.separator))
|
||||
+ "\\w+" + Pattern.quote(File.separator) + "\\w+.xml$");
|
||||
Files.walkFileTree(basePath, new SimpleFileVisitor<Path>() {
|
||||
@Override
|
||||
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
|
||||
if (rulesetPattern.matcher(file.toString()).matches()) {
|
||||
if (ADDITIONAL_RULESET_PATTERN.matcher(file.toString()).matches()) {
|
||||
additionalRulesets.add(file.toString());
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
|
||||
package net.sourceforge.pmd.docs;
|
||||
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
import java.nio.file.FileSystems;
|
||||
@@ -34,6 +36,8 @@ public class RuleSetResolverTest {
|
||||
|
||||
filterRuleSets(additionalRulesets);
|
||||
|
||||
assertFalse(additionalRulesets.isEmpty());
|
||||
|
||||
RuleSetFactory ruleSetFactory = RulesetsFactoryUtils.defaultFactory();
|
||||
for (String filename : additionalRulesets) {
|
||||
try {
|
||||
@@ -44,6 +48,12 @@ public class RuleSetResolverTest {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAdditionalRulesetPattern() {
|
||||
String filePath = IOUtil.normalizePath("/home/foo/pmd/pmd-java/src/main/resources/rulesets/java/quickstart.xml");
|
||||
assertTrue(GenerateRuleDocsCmd.ADDITIONAL_RULESET_PATTERN.matcher(filePath).matches());
|
||||
}
|
||||
|
||||
private void filterRuleSets(List<String> additionalRulesets) {
|
||||
Iterator<String> it = additionalRulesets.iterator();
|
||||
while (it.hasNext()) {
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>net.sourceforge.pmd</groupId>
|
||||
<artifactId>pmd</artifactId>
|
||||
<version>6.48.0-SNAPSHOT</version>
|
||||
<version>6.49.0-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>net.sourceforge.pmd</groupId>
|
||||
<artifactId>pmd</artifactId>
|
||||
<version>6.48.0-SNAPSHOT</version>
|
||||
<version>6.49.0-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>net.sourceforge.pmd</groupId>
|
||||
<artifactId>pmd</artifactId>
|
||||
<version>6.48.0-SNAPSHOT</version>
|
||||
<version>6.49.0-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>net.sourceforge.pmd</groupId>
|
||||
<artifactId>pmd</artifactId>
|
||||
<version>6.48.0-SNAPSHOT</version>
|
||||
<version>6.49.0-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>net.sourceforge.pmd</groupId>
|
||||
<artifactId>pmd</artifactId>
|
||||
<version>6.48.0-SNAPSHOT</version>
|
||||
<version>6.49.0-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>net.sourceforge.pmd</groupId>
|
||||
<artifactId>pmd</artifactId>
|
||||
<version>6.48.0-SNAPSHOT</version>
|
||||
<version>6.49.0-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>net.sourceforge.pmd</groupId>
|
||||
<artifactId>pmd</artifactId>
|
||||
<version>6.48.0-SNAPSHOT</version>
|
||||
<version>6.49.0-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>net.sourceforge.pmd</groupId>
|
||||
<artifactId>pmd</artifactId>
|
||||
<version>6.48.0-SNAPSHOT</version>
|
||||
<version>6.49.0-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>net.sourceforge.pmd</groupId>
|
||||
<artifactId>pmd</artifactId>
|
||||
<version>6.48.0-SNAPSHOT</version>
|
||||
<version>6.49.0-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@
|
||||
<parent>
|
||||
<groupId>net.sourceforge.pmd</groupId>
|
||||
<artifactId>pmd</artifactId>
|
||||
<version>6.48.0-SNAPSHOT</version>
|
||||
<version>6.49.0-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<parent>
|
||||
<groupId>net.sourceforge.pmd</groupId>
|
||||
<artifactId>pmd</artifactId>
|
||||
<version>6.48.0-SNAPSHOT</version>
|
||||
<version>6.49.0-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
|
||||
Loaded 30 of 52 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user