From ea0e6871403b8997d3c8c85ae48ce4ad7470b84a Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Sat, 28 Jan 2017 12:57:01 +0100 Subject: [PATCH 01/10] Update release script to automatically set the default download for sf --- do-release.sh | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/do-release.sh b/do-release.sh index 229152bec8..b2c19cf97d 100755 --- a/do-release.sh +++ b/do-release.sh @@ -20,6 +20,18 @@ if [ "" = "$PMD_SF_USER" ]; then echo exit 1 fi +if [ "" = "$PMD_SF_APIKEY" ]; then + echo "No env variable PMD_SF_APIKEY specified. This is the release api key," + echo "needed to set the default download file. You can create an api key in" + echo "your user preferences on sourceforge.net" + echo + echo "Please set the variable, e.g. in your ~/.bashrc:" + echo + echo "PMD_SF_APIKEY=abcd-efgh-xxxx" + echo "export PMD_SF_APIKEY" + echo + exit 1 +fi if [ "" = "$PMD_GPG_PROFILE" ]; then echo "No env variable PMD_GPG_PROFILE specified. This is your maven profile, which configures" @@ -204,13 +216,16 @@ if [ ! "" = "$PMD_LOCAL_BINARIES" -a -d $PMD_LOCAL_BINARIES ]; then echo fi +echo "Making the binary the new default file..." +PMD_SF_APIKEY +curl -H "Accept: application/json" -X PUT -d "default=windows&default=mac&default=linux&default=bsd&default=solaris&default=others" \ + -d "api_key=${PMD_SF_APIKEY}" https://sourceforge.net/projects/pmd/files/pmd/${RELEASE_VERSION}/pmd-bin-${RELEASE_VERSION}.zip +echo echo echo "Verify the md5sums: " md5sum pmd-dist/target/pmd-*-${RELEASE_VERSION}.zip target/pmd-doc-${RELEASE_VERSION}.zip -echo -echo "and make the new binary pmd zip file the default download for all platforms." echo echo "Press enter to continue..." read From 3648ca7545b6ade1000f3a4c347a0e847fea47b3 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Sat, 28 Jan 2017 13:07:35 +0100 Subject: [PATCH 02/10] Prepare pmd release 5.4.4 --- src/site/markdown/overview/changelog.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/site/markdown/overview/changelog.md b/src/site/markdown/overview/changelog.md index fc9ed4d4fd..9a74e36629 100644 --- a/src/site/markdown/overview/changelog.md +++ b/src/site/markdown/overview/changelog.md @@ -1,6 +1,6 @@ # PMD Release Notes -## ????? - 5.4.4-SNAPSHOT +## 28-January-2017 - 5.4.4 The PMD team is pleased to announce PMD 5.4.4 @@ -23,6 +23,7 @@ making it over 500X faster, and `PreserveStackTrace` which is now 7X faster. ### Table Of Contents * [New and noteworthy](#New_and_noteworthy) + * [Modified Rules](#Modified_Rules) * [Fixed Issues](#Fixed_Issues) * [API Changes](#API_Changes) * [External Contributions](#External_Contributions) From 12758ef777ad843ce23d8399693b71585028dec6 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Sat, 28 Jan 2017 13:15:10 +0100 Subject: [PATCH 03/10] [maven-release-plugin] prepare release pmd_releases/5.4.4 --- pmd-core/pom.xml | 2 +- pmd-cpp/pom.xml | 2 +- pmd-cs/pom.xml | 2 +- pmd-dist/pom.xml | 2 +- pmd-fortran/pom.xml | 2 +- pmd-go/pom.xml | 2 +- pmd-java/pom.xml | 2 +- pmd-java8/pom.xml | 2 +- pmd-javascript/pom.xml | 2 +- pmd-jsp/pom.xml | 2 +- pmd-matlab/pom.xml | 2 +- pmd-objectivec/pom.xml | 2 +- pmd-php/pom.xml | 2 +- pmd-plsql/pom.xml | 2 +- pmd-python/pom.xml | 2 +- pmd-ruby/pom.xml | 2 +- pmd-scala/pom.xml | 2 +- pmd-swift/pom.xml | 2 +- pmd-test/pom.xml | 2 +- pmd-ui/pom.xml | 2 +- pmd-vm/pom.xml | 2 +- pmd-xml/pom.xml | 2 +- pom.xml | 4 ++-- 23 files changed, 24 insertions(+), 24 deletions(-) diff --git a/pmd-core/pom.xml b/pmd-core/pom.xml index bb00ce1701..ef46666b83 100644 --- a/pmd-core/pom.xml +++ b/pmd-core/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4-SNAPSHOT + 5.4.4 diff --git a/pmd-cpp/pom.xml b/pmd-cpp/pom.xml index 6b1017d879..9297479140 100644 --- a/pmd-cpp/pom.xml +++ b/pmd-cpp/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4-SNAPSHOT + 5.4.4 diff --git a/pmd-cs/pom.xml b/pmd-cs/pom.xml index 6002363301..e165f9623c 100644 --- a/pmd-cs/pom.xml +++ b/pmd-cs/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4-SNAPSHOT + 5.4.4 diff --git a/pmd-dist/pom.xml b/pmd-dist/pom.xml index 0e88c07a9d..61ee695513 100644 --- a/pmd-dist/pom.xml +++ b/pmd-dist/pom.xml @@ -8,7 +8,7 @@ net.sourceforge.pmd pmd - 5.4.4-SNAPSHOT + 5.4.4 diff --git a/pmd-fortran/pom.xml b/pmd-fortran/pom.xml index afb11d5375..e25d425e48 100644 --- a/pmd-fortran/pom.xml +++ b/pmd-fortran/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4-SNAPSHOT + 5.4.4 diff --git a/pmd-go/pom.xml b/pmd-go/pom.xml index 4d2417cf2d..aa047dfb42 100644 --- a/pmd-go/pom.xml +++ b/pmd-go/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4-SNAPSHOT + 5.4.4 diff --git a/pmd-java/pom.xml b/pmd-java/pom.xml index c315473d81..035119c97b 100644 --- a/pmd-java/pom.xml +++ b/pmd-java/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4-SNAPSHOT + 5.4.4 diff --git a/pmd-java8/pom.xml b/pmd-java8/pom.xml index 0653bd920e..33ca3a9f13 100644 --- a/pmd-java8/pom.xml +++ b/pmd-java8/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4-SNAPSHOT + 5.4.4 diff --git a/pmd-javascript/pom.xml b/pmd-javascript/pom.xml index 3bf6cc4e71..938e375093 100644 --- a/pmd-javascript/pom.xml +++ b/pmd-javascript/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4-SNAPSHOT + 5.4.4 diff --git a/pmd-jsp/pom.xml b/pmd-jsp/pom.xml index d4e526787d..cff54b1205 100644 --- a/pmd-jsp/pom.xml +++ b/pmd-jsp/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4-SNAPSHOT + 5.4.4 diff --git a/pmd-matlab/pom.xml b/pmd-matlab/pom.xml index 0281ef995e..0da779d9be 100644 --- a/pmd-matlab/pom.xml +++ b/pmd-matlab/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4-SNAPSHOT + 5.4.4 diff --git a/pmd-objectivec/pom.xml b/pmd-objectivec/pom.xml index 0d4328c91b..7af4d3e18a 100644 --- a/pmd-objectivec/pom.xml +++ b/pmd-objectivec/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4-SNAPSHOT + 5.4.4 diff --git a/pmd-php/pom.xml b/pmd-php/pom.xml index d416e3320e..6e4988da23 100644 --- a/pmd-php/pom.xml +++ b/pmd-php/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4-SNAPSHOT + 5.4.4 diff --git a/pmd-plsql/pom.xml b/pmd-plsql/pom.xml index 9c9e684f64..45f7d32053 100644 --- a/pmd-plsql/pom.xml +++ b/pmd-plsql/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4-SNAPSHOT + 5.4.4 diff --git a/pmd-python/pom.xml b/pmd-python/pom.xml index 6b933b8701..06d5ae8c31 100644 --- a/pmd-python/pom.xml +++ b/pmd-python/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4-SNAPSHOT + 5.4.4 diff --git a/pmd-ruby/pom.xml b/pmd-ruby/pom.xml index 358ef554e0..f01e5a3835 100644 --- a/pmd-ruby/pom.xml +++ b/pmd-ruby/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4-SNAPSHOT + 5.4.4 diff --git a/pmd-scala/pom.xml b/pmd-scala/pom.xml index 44650aa913..da7802b2fc 100644 --- a/pmd-scala/pom.xml +++ b/pmd-scala/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4-SNAPSHOT + 5.4.4 diff --git a/pmd-swift/pom.xml b/pmd-swift/pom.xml index 0fa76a4e11..446b3e5bb0 100644 --- a/pmd-swift/pom.xml +++ b/pmd-swift/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4-SNAPSHOT + 5.4.4 diff --git a/pmd-test/pom.xml b/pmd-test/pom.xml index 93d21e648d..9faa2d7f01 100644 --- a/pmd-test/pom.xml +++ b/pmd-test/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4-SNAPSHOT + 5.4.4 diff --git a/pmd-ui/pom.xml b/pmd-ui/pom.xml index de3ae0f54b..dc956cace0 100644 --- a/pmd-ui/pom.xml +++ b/pmd-ui/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4-SNAPSHOT + 5.4.4 diff --git a/pmd-vm/pom.xml b/pmd-vm/pom.xml index dd0b07c7f5..21995c99aa 100644 --- a/pmd-vm/pom.xml +++ b/pmd-vm/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4-SNAPSHOT + 5.4.4 diff --git a/pmd-xml/pom.xml b/pmd-xml/pom.xml index 94fbc5c557..276f2bf340 100644 --- a/pmd-xml/pom.xml +++ b/pmd-xml/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4-SNAPSHOT + 5.4.4 diff --git a/pom.xml b/pom.xml index 333f960b2d..fc1fc54a70 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 net.sourceforge.pmd pmd - 5.4.4-SNAPSHOT + 5.4.4 pom PMD @@ -241,7 +241,7 @@ Additionally it includes CPD, the copy-paste-detector. CPD finds duplicated code scm:git:git://github.com/pmd/pmd.git scm:git:ssh://git@github.com/pmd/pmd.git https://github.com/pmd/pmd - HEAD + pmd_releases/5.4.4 From e9149551b74a11dab61fe9df738b3d12fa8a0f75 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Sat, 28 Jan 2017 13:15:11 +0100 Subject: [PATCH 04/10] [maven-release-plugin] prepare for next development iteration --- pmd-core/pom.xml | 2 +- pmd-cpp/pom.xml | 2 +- pmd-cs/pom.xml | 2 +- pmd-dist/pom.xml | 2 +- pmd-fortran/pom.xml | 2 +- pmd-go/pom.xml | 2 +- pmd-java/pom.xml | 2 +- pmd-java8/pom.xml | 2 +- pmd-javascript/pom.xml | 2 +- pmd-jsp/pom.xml | 2 +- pmd-matlab/pom.xml | 2 +- pmd-objectivec/pom.xml | 2 +- pmd-php/pom.xml | 2 +- pmd-plsql/pom.xml | 2 +- pmd-python/pom.xml | 2 +- pmd-ruby/pom.xml | 2 +- pmd-scala/pom.xml | 2 +- pmd-swift/pom.xml | 2 +- pmd-test/pom.xml | 2 +- pmd-ui/pom.xml | 2 +- pmd-vm/pom.xml | 2 +- pmd-xml/pom.xml | 2 +- pom.xml | 4 ++-- 23 files changed, 24 insertions(+), 24 deletions(-) diff --git a/pmd-core/pom.xml b/pmd-core/pom.xml index ef46666b83..52710bf50c 100644 --- a/pmd-core/pom.xml +++ b/pmd-core/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4 + 5.4.5-SNAPSHOT diff --git a/pmd-cpp/pom.xml b/pmd-cpp/pom.xml index 9297479140..c955d738a4 100644 --- a/pmd-cpp/pom.xml +++ b/pmd-cpp/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4 + 5.4.5-SNAPSHOT diff --git a/pmd-cs/pom.xml b/pmd-cs/pom.xml index e165f9623c..4c408a51fa 100644 --- a/pmd-cs/pom.xml +++ b/pmd-cs/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4 + 5.4.5-SNAPSHOT diff --git a/pmd-dist/pom.xml b/pmd-dist/pom.xml index 61ee695513..c63d594bf5 100644 --- a/pmd-dist/pom.xml +++ b/pmd-dist/pom.xml @@ -8,7 +8,7 @@ net.sourceforge.pmd pmd - 5.4.4 + 5.4.5-SNAPSHOT diff --git a/pmd-fortran/pom.xml b/pmd-fortran/pom.xml index e25d425e48..4f979f79cb 100644 --- a/pmd-fortran/pom.xml +++ b/pmd-fortran/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4 + 5.4.5-SNAPSHOT diff --git a/pmd-go/pom.xml b/pmd-go/pom.xml index aa047dfb42..47fdfd8636 100644 --- a/pmd-go/pom.xml +++ b/pmd-go/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4 + 5.4.5-SNAPSHOT diff --git a/pmd-java/pom.xml b/pmd-java/pom.xml index 035119c97b..a0a83eddf7 100644 --- a/pmd-java/pom.xml +++ b/pmd-java/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4 + 5.4.5-SNAPSHOT diff --git a/pmd-java8/pom.xml b/pmd-java8/pom.xml index 33ca3a9f13..e8ec0a2d14 100644 --- a/pmd-java8/pom.xml +++ b/pmd-java8/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4 + 5.4.5-SNAPSHOT diff --git a/pmd-javascript/pom.xml b/pmd-javascript/pom.xml index 938e375093..7d2fb4e4a3 100644 --- a/pmd-javascript/pom.xml +++ b/pmd-javascript/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4 + 5.4.5-SNAPSHOT diff --git a/pmd-jsp/pom.xml b/pmd-jsp/pom.xml index cff54b1205..bdd4023c6a 100644 --- a/pmd-jsp/pom.xml +++ b/pmd-jsp/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4 + 5.4.5-SNAPSHOT diff --git a/pmd-matlab/pom.xml b/pmd-matlab/pom.xml index 0da779d9be..a5a41cd3ab 100644 --- a/pmd-matlab/pom.xml +++ b/pmd-matlab/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4 + 5.4.5-SNAPSHOT diff --git a/pmd-objectivec/pom.xml b/pmd-objectivec/pom.xml index 7af4d3e18a..75657e819c 100644 --- a/pmd-objectivec/pom.xml +++ b/pmd-objectivec/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4 + 5.4.5-SNAPSHOT diff --git a/pmd-php/pom.xml b/pmd-php/pom.xml index 6e4988da23..b9b3c5df1b 100644 --- a/pmd-php/pom.xml +++ b/pmd-php/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4 + 5.4.5-SNAPSHOT diff --git a/pmd-plsql/pom.xml b/pmd-plsql/pom.xml index 45f7d32053..378e334fbc 100644 --- a/pmd-plsql/pom.xml +++ b/pmd-plsql/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4 + 5.4.5-SNAPSHOT diff --git a/pmd-python/pom.xml b/pmd-python/pom.xml index 06d5ae8c31..75b2674dee 100644 --- a/pmd-python/pom.xml +++ b/pmd-python/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4 + 5.4.5-SNAPSHOT diff --git a/pmd-ruby/pom.xml b/pmd-ruby/pom.xml index f01e5a3835..b05d054aaa 100644 --- a/pmd-ruby/pom.xml +++ b/pmd-ruby/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4 + 5.4.5-SNAPSHOT diff --git a/pmd-scala/pom.xml b/pmd-scala/pom.xml index da7802b2fc..4f5bd783f9 100644 --- a/pmd-scala/pom.xml +++ b/pmd-scala/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4 + 5.4.5-SNAPSHOT diff --git a/pmd-swift/pom.xml b/pmd-swift/pom.xml index 446b3e5bb0..319b1ee42a 100644 --- a/pmd-swift/pom.xml +++ b/pmd-swift/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4 + 5.4.5-SNAPSHOT diff --git a/pmd-test/pom.xml b/pmd-test/pom.xml index 9faa2d7f01..299fa67920 100644 --- a/pmd-test/pom.xml +++ b/pmd-test/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4 + 5.4.5-SNAPSHOT diff --git a/pmd-ui/pom.xml b/pmd-ui/pom.xml index dc956cace0..fce4b7dd26 100644 --- a/pmd-ui/pom.xml +++ b/pmd-ui/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4 + 5.4.5-SNAPSHOT diff --git a/pmd-vm/pom.xml b/pmd-vm/pom.xml index 21995c99aa..58b15e3a8d 100644 --- a/pmd-vm/pom.xml +++ b/pmd-vm/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4 + 5.4.5-SNAPSHOT diff --git a/pmd-xml/pom.xml b/pmd-xml/pom.xml index 276f2bf340..fe51d43a56 100644 --- a/pmd-xml/pom.xml +++ b/pmd-xml/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.4.4 + 5.4.5-SNAPSHOT diff --git a/pom.xml b/pom.xml index fc1fc54a70..b26555a8e8 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 net.sourceforge.pmd pmd - 5.4.4 + 5.4.5-SNAPSHOT pom PMD @@ -241,7 +241,7 @@ Additionally it includes CPD, the copy-paste-detector. CPD finds duplicated code scm:git:git://github.com/pmd/pmd.git scm:git:ssh://git@github.com/pmd/pmd.git https://github.com/pmd/pmd - pmd_releases/5.4.4 + HEAD From a7fc141ee7d5ac39c86d79592ed32b7bca220921 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Sat, 28 Jan 2017 14:01:14 +0100 Subject: [PATCH 05/10] Prepare next development version --- src/site/markdown/overview/changelog-old.md | 80 +++++++++++++++++++++ src/site/markdown/overview/changelog.md | 63 ++-------------- 2 files changed, 85 insertions(+), 58 deletions(-) diff --git a/src/site/markdown/overview/changelog-old.md b/src/site/markdown/overview/changelog-old.md index 2add5f8f45..0d5a36bcf5 100644 --- a/src/site/markdown/overview/changelog-old.md +++ b/src/site/markdown/overview/changelog-old.md @@ -3,6 +3,86 @@ Previous versions of PMD can be downloaded here: http://sourceforge.net/projects/pmd/files/pmd/ +## 28-January-2017 - 5.4.4 + +The PMD team is pleased to announce PMD 5.4.4 + +This is a bug fixing release. The most significant changes are on analysis performance. + +Multithread performance has been enhanced by reducing thread-contention on a +bunch of areas. This is still an area of work, as the speedup of running +multithreaded analysis is still relatively small (4 threads produce less +than a 50% speedup). Future releases will keep improving on this area. + +Once again, *Symbol Table* has been an area of great performance improvements. +This time we were able to further improve it's performance by roughly 10% on all +supported languages. In *Java* in particular, several more improvements were possible, +improving *Symbol Table* performance by a whooping 30%, that's over 5X faster +than PMD 5.4.2, when we first started working on it. + +Java developers will also appreciate the revamp of `CloneMethodMustImplementCloneable`, +making it over 500X faster, and `PreserveStackTrace` which is now 7X faster. + +### Table Of Contents + +* [New and noteworthy](#New_and_noteworthy) + * [Modified Rules](#Modified_Rules) +* [Fixed Issues](#Fixed_Issues) +* [API Changes](#API_Changes) +* [External Contributions](#External_Contributions) + +### New and noteworthy + +This is a bug fixing release, no major changes were introduced. + +#### Modified Rules + +The Java rule "UseLocaleWithCaseConversions" (ruleset java-design) has been modified, to detect calls +to `toLowerCase` and to `toUpperCase` also within method call chains. This leads to more detected cases +and potentially new false positives. +See also [bugfix #1556](https://sourceforge.net/p/pmd/bugs/1556/). + + +### Fixed Issues + +* java + * [#206](https://github.com/pmd/pmd/issues/206): \[java] Parse error on annotation fields with generics + * [#207](https://github.com/pmd/pmd/issues/207): \[java] Parse error on method reference with generics + * [#208](https://github.com/pmd/pmd/issues/208): \[java] Parse error with local class with 2 or more annotations + * [#213](https://github.com/pmd/pmd/issues/213): \[java] CPD: OutOfMemory when analyzing Lucene +* java-design + * [#1448](https://sourceforge.net/p/pmd/bugs/1448/): \[java] ImmutableField: Private field in inner class gives false positive with lambdas + * [#1495](https://sourceforge.net/p/pmd/bugs/1495/): \[java] UnnecessaryLocalBeforeReturn with assert + * [#1552](https://sourceforge.net/p/pmd/bugs/1552/): \[java] MissingBreakInSwitch - False positive for continue + * [#1556](https://sourceforge.net/p/pmd/bugs/1556/): \[java] UseLocaleWithCaseConversions does not works with `ResultSet` (false negative) + * [#177](https://github.com/pmd/pmd/issues/177): \[java] SingularField with lambdas as final fields +* java-imports + * [#1546](https://sourceforge.net/p/pmd/bugs/1546/): \[java] UnnecessaryFullyQualifiedNameRule doesn't take into consideration conflict resolution + * [#1547](https://sourceforge.net/p/pmd/bugs/1547/): \[java] UnusedImportRule - False Positive for only usage in Javadoc - {@link ClassName#CONSTANT} + * [#1555](https://sourceforge.net/p/pmd/bugs/1555/): \[java] UnnecessaryFullyQualifiedName: Really necessary fully qualified name +* java-unnecessary + * [#199](https://github.com/pmd/pmd/issues/199): \[java] UselessParentheses: Parentheses in return statement are incorrectly reported as useless +* java-strings + * [#202](https://github.com/pmd/pmd/issues/202): \[java] \[doc] ConsecutiveAppendsShouldReuse is not really an optimization +* XML + * [#1518](https://sourceforge.net/p/pmd/bugs/1518/): \[xml] Error while processing xml file with ".webapp" in the file or directory name +* psql + * [#1549](https://sourceforge.net/p/pmd/bugs/1549/): \[plsql] Parse error for IS [NOT] NULL construct +* javascript + * [#201](https://github.com/pmd/pmd/issues/201): \[javascript] template strings are not correctly parsed +* General + * [#1511](https://sourceforge.net/p/pmd/bugs/1511/): \[core] Inconsistent behavior of Rule.start/Rule.end + + +### External Contributions + +* [#129](https://github.com/pmd/pmd/pull/129): \[plsql] Added correct parse of IS [NOT] NULL and multiline DML +* [#152](https://github.com/pmd/pmd/pull/152): \[java] fixes #1552 continue does not require break +* [#154](https://github.com/pmd/pmd/pull/154): \[java] Fix #1547: UnusedImports: Adjust regex to support underscores +* [#170](https://github.com/pmd/pmd/pull/170): \[core] Ant Task Formatter encoding issue with XMLRenderer +* [#200](https://github.com/pmd/pmd/pull/200): \[javascript] Templatestring grammar fix + + ## 04-November-2016 - 5.4.3 **Summary:** diff --git a/src/site/markdown/overview/changelog.md b/src/site/markdown/overview/changelog.md index 9a74e36629..52da9540f0 100644 --- a/src/site/markdown/overview/changelog.md +++ b/src/site/markdown/overview/changelog.md @@ -1,29 +1,14 @@ # PMD Release Notes -## 28-January-2017 - 5.4.4 +## ????? - 5.4.5-SNAPSHOT -The PMD team is pleased to announce PMD 5.4.4 +The PMD team is pleased to announce PMD 5.4.5 -This is a bug fixing release. The most significant changes are on analysis performance. - -Multithread performance has been enhanced by reducing thread-contention on a -bunch of areas. This is still an area of work, as the speedup of running -multithreaded analysis is still relatively small (4 threads produce less -than a 50% speedup). Future releases will keep improving on this area. - -Once again, *Symbol Table* has been an area of great performance improvements. -This time we were able to further improve it's performance by roughly 10% on all -supported languages. In *Java* in particular, several more improvements were possible, -improving *Symbol Table* performance by a whooping 30%, that's over 5X faster -than PMD 5.4.2, when we first started working on it. - -Java developers will also appreciate the revamp of `CloneMethodMustImplementCloneable`, -making it over 500X faster, and `PreserveStackTrace` which is now 7X faster. +This is a bug fixing release. ### Table Of Contents * [New and noteworthy](#New_and_noteworthy) - * [Modified Rules](#Modified_Rules) * [Fixed Issues](#Fixed_Issues) * [API Changes](#API_Changes) * [External Contributions](#External_Contributions) @@ -32,50 +17,12 @@ making it over 500X faster, and `PreserveStackTrace` which is now 7X faster. This is a bug fixing release, no major changes were introduced. -#### Modified Rules - -The Java rule "UseLocaleWithCaseConversions" (ruleset java-design) has been modified, to detect calls -to `toLowerCase` and to `toUpperCase` also within method call chains. This leads to more detected cases -and potentially new false positives. -See also [bugfix #1556](https://sourceforge.net/p/pmd/bugs/1556/). - ### Fixed Issues -* java - * [#206](https://github.com/pmd/pmd/issues/206): \[java] Parse error on annotation fields with generics - * [#207](https://github.com/pmd/pmd/issues/207): \[java] Parse error on method reference with generics - * [#208](https://github.com/pmd/pmd/issues/208): \[java] Parse error with local class with 2 or more annotations - * [#213](https://github.com/pmd/pmd/issues/213): \[java] CPD: OutOfMemory when analyzing Lucene -* java-design - * [#1448](https://sourceforge.net/p/pmd/bugs/1448/): \[java] ImmutableField: Private field in inner class gives false positive with lambdas - * [#1495](https://sourceforge.net/p/pmd/bugs/1495/): \[java] UnnecessaryLocalBeforeReturn with assert - * [#1552](https://sourceforge.net/p/pmd/bugs/1552/): \[java] MissingBreakInSwitch - False positive for continue - * [#1556](https://sourceforge.net/p/pmd/bugs/1556/): \[java] UseLocaleWithCaseConversions does not works with `ResultSet` (false negative) - * [#177](https://github.com/pmd/pmd/issues/177): \[java] SingularField with lambdas as final fields -* java-imports - * [#1546](https://sourceforge.net/p/pmd/bugs/1546/): \[java] UnnecessaryFullyQualifiedNameRule doesn't take into consideration conflict resolution - * [#1547](https://sourceforge.net/p/pmd/bugs/1547/): \[java] UnusedImportRule - False Positive for only usage in Javadoc - {@link ClassName#CONSTANT} - * [#1555](https://sourceforge.net/p/pmd/bugs/1555/): \[java] UnnecessaryFullyQualifiedName: Really necessary fully qualified name -* java-unnecessary - * [#199](https://github.com/pmd/pmd/issues/199): \[java] UselessParentheses: Parentheses in return statement are incorrectly reported as useless -* java-strings - * [#202](https://github.com/pmd/pmd/issues/202): \[java] \[doc] ConsecutiveAppendsShouldReuse is not really an optimization -* XML - * [#1518](https://sourceforge.net/p/pmd/bugs/1518/): \[xml] Error while processing xml file with ".webapp" in the file or directory name -* psql - * [#1549](https://sourceforge.net/p/pmd/bugs/1549/): \[plsql] Parse error for IS [NOT] NULL construct -* javascript - * [#201](https://github.com/pmd/pmd/issues/201): \[javascript] template strings are not correctly parsed -* General - * [#1511](https://sourceforge.net/p/pmd/bugs/1511/): \[core] Inconsistent behavior of Rule.start/Rule.end + +### API Changes ### External Contributions -* [#129](https://github.com/pmd/pmd/pull/129): \[plsql] Added correct parse of IS [NOT] NULL and multiline DML -* [#152](https://github.com/pmd/pmd/pull/152): \[java] fixes #1552 continue does not require break -* [#154](https://github.com/pmd/pmd/pull/154): \[java] Fix #1547: UnusedImports: Adjust regex to support underscores -* [#170](https://github.com/pmd/pmd/pull/170): \[core] Ant Task Formatter encoding issue with XMLRenderer -* [#200](https://github.com/pmd/pmd/pull/200): \[javascript] Templatestring grammar fix - From ef327a7836f61c17befd9284e83dc5151f6f0c16 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Sat, 28 Jan 2017 14:16:51 +0100 Subject: [PATCH 06/10] Fix release script --- do-release.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/do-release.sh b/do-release.sh index b2c19cf97d..c6ef71fc1b 100755 --- a/do-release.sh +++ b/do-release.sh @@ -217,7 +217,6 @@ if [ ! "" = "$PMD_LOCAL_BINARIES" -a -d $PMD_LOCAL_BINARIES ]; then fi echo "Making the binary the new default file..." -PMD_SF_APIKEY curl -H "Accept: application/json" -X PUT -d "default=windows&default=mac&default=linux&default=bsd&default=solaris&default=others" \ -d "api_key=${PMD_SF_APIKEY}" https://sourceforge.net/projects/pmd/files/pmd/${RELEASE_VERSION}/pmd-bin-${RELEASE_VERSION}.zip echo From 9ef035e5ebb25b683790cd79f4037fb99b0deb17 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Sat, 28 Jan 2017 14:36:02 +0100 Subject: [PATCH 07/10] Prepare pmd release 5.5.3 --- src/site/markdown/overview/changelog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/site/markdown/overview/changelog.md b/src/site/markdown/overview/changelog.md index 7ad1d01aae..e02a687201 100644 --- a/src/site/markdown/overview/changelog.md +++ b/src/site/markdown/overview/changelog.md @@ -1,6 +1,6 @@ # PMD Release Notes -## ????? - 5.5.3-SNAPSHOT +## 28-January-2017 - 5.5.3 The PMD team is pleased to announce PMD 5.5.3 From 847ea1c0843eec2d35923e71f4bc904c1c4ed601 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Sat, 28 Jan 2017 14:43:17 +0100 Subject: [PATCH 08/10] [maven-release-plugin] prepare release pmd_releases/5.5.3 --- pmd-apex/pom.xml | 2 +- pmd-core/pom.xml | 2 +- pmd-cpp/pom.xml | 2 +- pmd-cs/pom.xml | 2 +- pmd-dist/pom.xml | 2 +- pmd-fortran/pom.xml | 2 +- pmd-go/pom.xml | 2 +- pmd-groovy/pom.xml | 2 +- pmd-java/pom.xml | 2 +- pmd-java8/pom.xml | 2 +- pmd-javascript/pom.xml | 2 +- pmd-jsp/pom.xml | 2 +- pmd-matlab/pom.xml | 2 +- pmd-objectivec/pom.xml | 2 +- pmd-perl/pom.xml | 2 +- pmd-php/pom.xml | 2 +- pmd-plsql/pom.xml | 2 +- pmd-python/pom.xml | 2 +- pmd-ruby/pom.xml | 2 +- pmd-scala/pom.xml | 2 +- pmd-swift/pom.xml | 2 +- pmd-test/pom.xml | 2 +- pmd-ui/pom.xml | 2 +- pmd-vm/pom.xml | 2 +- pmd-xml/pom.xml | 2 +- pom.xml | 4 ++-- 26 files changed, 27 insertions(+), 27 deletions(-) diff --git a/pmd-apex/pom.xml b/pmd-apex/pom.xml index f58a0121d8..a49909fa8a 100644 --- a/pmd-apex/pom.xml +++ b/pmd-apex/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3-SNAPSHOT + 5.5.3 diff --git a/pmd-core/pom.xml b/pmd-core/pom.xml index 7ecc4fb24a..7e036405ba 100644 --- a/pmd-core/pom.xml +++ b/pmd-core/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3-SNAPSHOT + 5.5.3 diff --git a/pmd-cpp/pom.xml b/pmd-cpp/pom.xml index b1a725dac3..ce4ccd230d 100644 --- a/pmd-cpp/pom.xml +++ b/pmd-cpp/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3-SNAPSHOT + 5.5.3 diff --git a/pmd-cs/pom.xml b/pmd-cs/pom.xml index 7f873b9f3a..9a557f0a88 100644 --- a/pmd-cs/pom.xml +++ b/pmd-cs/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3-SNAPSHOT + 5.5.3 diff --git a/pmd-dist/pom.xml b/pmd-dist/pom.xml index 04db9cd903..5c181a8085 100644 --- a/pmd-dist/pom.xml +++ b/pmd-dist/pom.xml @@ -8,7 +8,7 @@ net.sourceforge.pmd pmd - 5.5.3-SNAPSHOT + 5.5.3 diff --git a/pmd-fortran/pom.xml b/pmd-fortran/pom.xml index 720f2f0fce..96cab36760 100644 --- a/pmd-fortran/pom.xml +++ b/pmd-fortran/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3-SNAPSHOT + 5.5.3 diff --git a/pmd-go/pom.xml b/pmd-go/pom.xml index 492f557cd0..ab28949064 100644 --- a/pmd-go/pom.xml +++ b/pmd-go/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3-SNAPSHOT + 5.5.3 diff --git a/pmd-groovy/pom.xml b/pmd-groovy/pom.xml index 646749129c..3a74a81f1a 100644 --- a/pmd-groovy/pom.xml +++ b/pmd-groovy/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3-SNAPSHOT + 5.5.3 diff --git a/pmd-java/pom.xml b/pmd-java/pom.xml index 3969215f86..9be0ee8414 100644 --- a/pmd-java/pom.xml +++ b/pmd-java/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3-SNAPSHOT + 5.5.3 diff --git a/pmd-java8/pom.xml b/pmd-java8/pom.xml index 135dfc111f..153124ae24 100644 --- a/pmd-java8/pom.xml +++ b/pmd-java8/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3-SNAPSHOT + 5.5.3 diff --git a/pmd-javascript/pom.xml b/pmd-javascript/pom.xml index b30f34b0e1..d4a93a6d06 100644 --- a/pmd-javascript/pom.xml +++ b/pmd-javascript/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3-SNAPSHOT + 5.5.3 diff --git a/pmd-jsp/pom.xml b/pmd-jsp/pom.xml index 8c0d57ab47..5de1148ff7 100644 --- a/pmd-jsp/pom.xml +++ b/pmd-jsp/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3-SNAPSHOT + 5.5.3 diff --git a/pmd-matlab/pom.xml b/pmd-matlab/pom.xml index 3ecd402fb6..834fa7284e 100644 --- a/pmd-matlab/pom.xml +++ b/pmd-matlab/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3-SNAPSHOT + 5.5.3 diff --git a/pmd-objectivec/pom.xml b/pmd-objectivec/pom.xml index caade0e42b..5941e01449 100644 --- a/pmd-objectivec/pom.xml +++ b/pmd-objectivec/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3-SNAPSHOT + 5.5.3 diff --git a/pmd-perl/pom.xml b/pmd-perl/pom.xml index c444cf7e6a..4ea9673e15 100644 --- a/pmd-perl/pom.xml +++ b/pmd-perl/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3-SNAPSHOT + 5.5.3 diff --git a/pmd-php/pom.xml b/pmd-php/pom.xml index e77e7f6205..5181e049d6 100644 --- a/pmd-php/pom.xml +++ b/pmd-php/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3-SNAPSHOT + 5.5.3 diff --git a/pmd-plsql/pom.xml b/pmd-plsql/pom.xml index eca6116835..dc639d9f7c 100644 --- a/pmd-plsql/pom.xml +++ b/pmd-plsql/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3-SNAPSHOT + 5.5.3 diff --git a/pmd-python/pom.xml b/pmd-python/pom.xml index 3df5acb7d9..fcc0298329 100644 --- a/pmd-python/pom.xml +++ b/pmd-python/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3-SNAPSHOT + 5.5.3 diff --git a/pmd-ruby/pom.xml b/pmd-ruby/pom.xml index 7195fdbe18..a834625998 100644 --- a/pmd-ruby/pom.xml +++ b/pmd-ruby/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3-SNAPSHOT + 5.5.3 diff --git a/pmd-scala/pom.xml b/pmd-scala/pom.xml index 0e706a2488..851f217a5a 100644 --- a/pmd-scala/pom.xml +++ b/pmd-scala/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3-SNAPSHOT + 5.5.3 diff --git a/pmd-swift/pom.xml b/pmd-swift/pom.xml index 42e1889749..784703b876 100644 --- a/pmd-swift/pom.xml +++ b/pmd-swift/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3-SNAPSHOT + 5.5.3 diff --git a/pmd-test/pom.xml b/pmd-test/pom.xml index 9a37caf5d3..f2f8673309 100644 --- a/pmd-test/pom.xml +++ b/pmd-test/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3-SNAPSHOT + 5.5.3 diff --git a/pmd-ui/pom.xml b/pmd-ui/pom.xml index 69d8d8f839..fdaa539caf 100644 --- a/pmd-ui/pom.xml +++ b/pmd-ui/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3-SNAPSHOT + 5.5.3 diff --git a/pmd-vm/pom.xml b/pmd-vm/pom.xml index b664e99434..e7d9b6e7d8 100644 --- a/pmd-vm/pom.xml +++ b/pmd-vm/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3-SNAPSHOT + 5.5.3 diff --git a/pmd-xml/pom.xml b/pmd-xml/pom.xml index 2210303e25..d660e55a56 100644 --- a/pmd-xml/pom.xml +++ b/pmd-xml/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3-SNAPSHOT + 5.5.3 diff --git a/pom.xml b/pom.xml index d547627270..0608c0c591 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 net.sourceforge.pmd pmd - 5.5.3-SNAPSHOT + 5.5.3 pom PMD @@ -241,7 +241,7 @@ Additionally it includes CPD, the copy-paste-detector. CPD finds duplicated code scm:git:git://github.com/pmd/pmd.git scm:git:ssh://git@github.com/pmd/pmd.git https://github.com/pmd/pmd - HEAD + pmd_releases/5.5.3 From 4dc0699788cabeed508f2831af6eb654cf8a1347 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Sat, 28 Jan 2017 14:43:17 +0100 Subject: [PATCH 09/10] [maven-release-plugin] prepare for next development iteration --- pmd-apex/pom.xml | 2 +- pmd-core/pom.xml | 2 +- pmd-cpp/pom.xml | 2 +- pmd-cs/pom.xml | 2 +- pmd-dist/pom.xml | 2 +- pmd-fortran/pom.xml | 2 +- pmd-go/pom.xml | 2 +- pmd-groovy/pom.xml | 2 +- pmd-java/pom.xml | 2 +- pmd-java8/pom.xml | 2 +- pmd-javascript/pom.xml | 2 +- pmd-jsp/pom.xml | 2 +- pmd-matlab/pom.xml | 2 +- pmd-objectivec/pom.xml | 2 +- pmd-perl/pom.xml | 2 +- pmd-php/pom.xml | 2 +- pmd-plsql/pom.xml | 2 +- pmd-python/pom.xml | 2 +- pmd-ruby/pom.xml | 2 +- pmd-scala/pom.xml | 2 +- pmd-swift/pom.xml | 2 +- pmd-test/pom.xml | 2 +- pmd-ui/pom.xml | 2 +- pmd-vm/pom.xml | 2 +- pmd-xml/pom.xml | 2 +- pom.xml | 4 ++-- 26 files changed, 27 insertions(+), 27 deletions(-) diff --git a/pmd-apex/pom.xml b/pmd-apex/pom.xml index a49909fa8a..33698e2668 100644 --- a/pmd-apex/pom.xml +++ b/pmd-apex/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3 + 5.5.4-SNAPSHOT diff --git a/pmd-core/pom.xml b/pmd-core/pom.xml index 7e036405ba..a2cd00df0c 100644 --- a/pmd-core/pom.xml +++ b/pmd-core/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3 + 5.5.4-SNAPSHOT diff --git a/pmd-cpp/pom.xml b/pmd-cpp/pom.xml index ce4ccd230d..614f445f1a 100644 --- a/pmd-cpp/pom.xml +++ b/pmd-cpp/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3 + 5.5.4-SNAPSHOT diff --git a/pmd-cs/pom.xml b/pmd-cs/pom.xml index 9a557f0a88..b9feffc31c 100644 --- a/pmd-cs/pom.xml +++ b/pmd-cs/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3 + 5.5.4-SNAPSHOT diff --git a/pmd-dist/pom.xml b/pmd-dist/pom.xml index 5c181a8085..10151cea8b 100644 --- a/pmd-dist/pom.xml +++ b/pmd-dist/pom.xml @@ -8,7 +8,7 @@ net.sourceforge.pmd pmd - 5.5.3 + 5.5.4-SNAPSHOT diff --git a/pmd-fortran/pom.xml b/pmd-fortran/pom.xml index 96cab36760..e31d366a40 100644 --- a/pmd-fortran/pom.xml +++ b/pmd-fortran/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3 + 5.5.4-SNAPSHOT diff --git a/pmd-go/pom.xml b/pmd-go/pom.xml index ab28949064..aa2403f904 100644 --- a/pmd-go/pom.xml +++ b/pmd-go/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3 + 5.5.4-SNAPSHOT diff --git a/pmd-groovy/pom.xml b/pmd-groovy/pom.xml index 3a74a81f1a..46e984a20b 100644 --- a/pmd-groovy/pom.xml +++ b/pmd-groovy/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3 + 5.5.4-SNAPSHOT diff --git a/pmd-java/pom.xml b/pmd-java/pom.xml index 9be0ee8414..f28951de43 100644 --- a/pmd-java/pom.xml +++ b/pmd-java/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3 + 5.5.4-SNAPSHOT diff --git a/pmd-java8/pom.xml b/pmd-java8/pom.xml index 153124ae24..ea5ff92285 100644 --- a/pmd-java8/pom.xml +++ b/pmd-java8/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3 + 5.5.4-SNAPSHOT diff --git a/pmd-javascript/pom.xml b/pmd-javascript/pom.xml index d4a93a6d06..832badf109 100644 --- a/pmd-javascript/pom.xml +++ b/pmd-javascript/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3 + 5.5.4-SNAPSHOT diff --git a/pmd-jsp/pom.xml b/pmd-jsp/pom.xml index 5de1148ff7..4d0e8c098c 100644 --- a/pmd-jsp/pom.xml +++ b/pmd-jsp/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3 + 5.5.4-SNAPSHOT diff --git a/pmd-matlab/pom.xml b/pmd-matlab/pom.xml index 834fa7284e..2b113403f2 100644 --- a/pmd-matlab/pom.xml +++ b/pmd-matlab/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3 + 5.5.4-SNAPSHOT diff --git a/pmd-objectivec/pom.xml b/pmd-objectivec/pom.xml index 5941e01449..814a0e16ca 100644 --- a/pmd-objectivec/pom.xml +++ b/pmd-objectivec/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3 + 5.5.4-SNAPSHOT diff --git a/pmd-perl/pom.xml b/pmd-perl/pom.xml index 4ea9673e15..3dcf2a04fc 100644 --- a/pmd-perl/pom.xml +++ b/pmd-perl/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3 + 5.5.4-SNAPSHOT diff --git a/pmd-php/pom.xml b/pmd-php/pom.xml index 5181e049d6..317b89ac6b 100644 --- a/pmd-php/pom.xml +++ b/pmd-php/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3 + 5.5.4-SNAPSHOT diff --git a/pmd-plsql/pom.xml b/pmd-plsql/pom.xml index dc639d9f7c..8d15d3a6ac 100644 --- a/pmd-plsql/pom.xml +++ b/pmd-plsql/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3 + 5.5.4-SNAPSHOT diff --git a/pmd-python/pom.xml b/pmd-python/pom.xml index fcc0298329..ea923f7734 100644 --- a/pmd-python/pom.xml +++ b/pmd-python/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3 + 5.5.4-SNAPSHOT diff --git a/pmd-ruby/pom.xml b/pmd-ruby/pom.xml index a834625998..1b7d4512e3 100644 --- a/pmd-ruby/pom.xml +++ b/pmd-ruby/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3 + 5.5.4-SNAPSHOT diff --git a/pmd-scala/pom.xml b/pmd-scala/pom.xml index 851f217a5a..137843b545 100644 --- a/pmd-scala/pom.xml +++ b/pmd-scala/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3 + 5.5.4-SNAPSHOT diff --git a/pmd-swift/pom.xml b/pmd-swift/pom.xml index 784703b876..48ee07a439 100644 --- a/pmd-swift/pom.xml +++ b/pmd-swift/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3 + 5.5.4-SNAPSHOT diff --git a/pmd-test/pom.xml b/pmd-test/pom.xml index f2f8673309..7a4764d12d 100644 --- a/pmd-test/pom.xml +++ b/pmd-test/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3 + 5.5.4-SNAPSHOT diff --git a/pmd-ui/pom.xml b/pmd-ui/pom.xml index fdaa539caf..b96888e6de 100644 --- a/pmd-ui/pom.xml +++ b/pmd-ui/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3 + 5.5.4-SNAPSHOT diff --git a/pmd-vm/pom.xml b/pmd-vm/pom.xml index e7d9b6e7d8..44b24efcd9 100644 --- a/pmd-vm/pom.xml +++ b/pmd-vm/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3 + 5.5.4-SNAPSHOT diff --git a/pmd-xml/pom.xml b/pmd-xml/pom.xml index d660e55a56..59ed285533 100644 --- a/pmd-xml/pom.xml +++ b/pmd-xml/pom.xml @@ -7,7 +7,7 @@ net.sourceforge.pmd pmd - 5.5.3 + 5.5.4-SNAPSHOT diff --git a/pom.xml b/pom.xml index 0608c0c591..bd7231ab86 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 net.sourceforge.pmd pmd - 5.5.3 + 5.5.4-SNAPSHOT pom PMD @@ -241,7 +241,7 @@ Additionally it includes CPD, the copy-paste-detector. CPD finds duplicated code scm:git:git://github.com/pmd/pmd.git scm:git:ssh://git@github.com/pmd/pmd.git https://github.com/pmd/pmd - pmd_releases/5.5.3 + HEAD From 65f159cbc0512a241ca782b3f5049d6bff7c7c9d Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Sat, 28 Jan 2017 15:42:21 +0100 Subject: [PATCH 10/10] Prepare next development version --- src/site/markdown/overview/changelog-old.md | 262 ++++++++++++++++++++ src/site/markdown/overview/changelog.md | 243 +----------------- 2 files changed, 265 insertions(+), 240 deletions(-) diff --git a/src/site/markdown/overview/changelog-old.md b/src/site/markdown/overview/changelog-old.md index 9860982397..1188260e27 100644 --- a/src/site/markdown/overview/changelog-old.md +++ b/src/site/markdown/overview/changelog-old.md @@ -4,6 +4,268 @@ Previous versions of PMD can be downloaded here: http://sourceforge.net/projects/pmd/files/pmd/ +## 28-January-2017 - 5.5.3 + +The PMD team is pleased to announce PMD 5.5.3 + +The most significant changes are on analysis performance and a whole new **Apex Security Rule Set**. + +Multithread performance has been enhanced by reducing thread-contention on a +bunch of areas. This is still an area of work, as the speedup of running +multithreaded analysis is still relatively small (4 threads produce less +than a 50% speedup). Future releases will keep improving on this area. + +Once again, *Symbol Table* has been an area of great performance improvements. +This time we were able to further improve it's performance by roughly 10% on all +supported languages. In *Java* in particular, several more improvements were possible, +improving *Symbol Table* performance by a whooping 30%, that's over 5X faster +than PMD 5.5.1, when we first started working on it. + +Java developers will also appreciate the revamp of `CloneMethodMustImplementCloneable`, +making it over 500X faster, and `PreserveStackTrace` which is now 7X faster. + +### Table Of Contents + +* [New and noteworthy](#New_and_noteworthy) + * [Apex Security Rule Set](#Apex_Security_Rule_Set) + * [Modified Rules](#Modified_Rules) +* [Fixed Issues](#Fixed_Issues) +* [API Changes](#API_Changes) +* [External Contributions](#External_Contributions) + +### New and noteworthy + +#### Apex Security Rule Set + +A new ruleset focused on security has been added, consisting of a wide range of rules +to detect most common security problems. + +##### ApexBadCrypto + +The rule makes sure you are using randomly generated IVs and keys for `Crypto` calls. +Hard-wiring these values greatly compromises the security of encrypted data. + +For instance, it would report violations on code such as: + +``` +public class without sharing Foo { + Blob hardCodedIV = Blob.valueOf('Hardcoded IV 123'); + Blob hardCodedKey = Blob.valueOf('0000000000000000'); + Blob data = Blob.valueOf('Data to be encrypted'); + Blob encrypted = Crypto.encrypt('AES128', hardCodedKey, hardCodedIV, data); +} + +``` + +##### ApexCRUDViolation + +The rule validates you are checking for access permissions before a SOQL/SOSL/DML operation. +Since Apex runs in system mode not having proper permissions checks results in escalation of +privilege and may produce runtime errors. This check forces you to handle such scenarios. + +For example, the following code is considered valid: + +``` +public class Foo { + public Contact foo(String status, String ID) { + Contact c = [SELECT Status__c FROM Contact WHERE Id=:ID]; + + // Make sure we can update the database before even trying + if (!Schema.sObjectType.Contact.fields.Name.isUpdateable()) { + return null; + } + + c.Status__c = status; + update c; + return c; + } +} +``` + +##### ApexCSRF + +Check to avoid making DML operations in Apex class constructor/init method. This prevents +modification of the database just by accessing a page. + +For instance, the following code would be invalid: + +``` +public class Foo { + public init() { + insert data; + } + + public Foo() { + insert data; + } +} +``` + +##### ApexDangerousMethods + +Checks against calling dangerous methods. + +For the time being, it reports: + +* Against `FinancialForce`'s `Configuration.disableTriggerCRUDSecurity()`. Disabling CRUD security +opens the door to several attacks and requires manual validation, which is unreliable. +* Calling `System.debug` passing sensitive data as parameter, which could lead to exposure +of private data. + +##### ApexInsecureEndpoint + +Checks against accessing endpoints under plain **http**. You should always use +**https** for security. + +##### ApexOpenRedirect + +Checks against redirects to user-controlled locations. This prevents attackers from +redirecting users to phishing sites. + +For instance, the following code would be reported: + +``` +public class without sharing Foo { + String unsafeLocation = ApexPage.getCurrentPage().getParameters.get('url_param'); + PageReference page() { + return new PageReference(unsafeLocation); + } +} +``` + +##### ApexSharingViolations + +Detect classes declared without explicit sharing mode if DML methods are used. This +forces the developer to take access restrictions into account before modifying objects. + +##### ApexSOQLInjection + +Detects the usage of untrusted / unescaped variables in DML queries. + +For instance, it would report on: + +``` +public class Foo { + public void test1(String t1) { + Database.query('SELECT Id FROM Account' + t1); + } +} +``` + +##### ApexSuggestUsingNamedCred + +Detects hardcoded credentials used in requests to an endpoint. + +You should refrain from hardcoding credentials: + * They are hard to mantain by being mixed in application code + * Particularly hard to update them when used from different classes + * Granting a developer access to the codebase means granting knowledge + of credentials, keeping a two-level access is not possible. + * Using different credentials for different environments is troublesome + and error-prone. + +Instead, you should use *Named Credentials* and a callout endpoint. + +For more information, you can check [this](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_callouts_named_credentials.htm) + +##### ApexXSSFromEscapeFalse + +Reports on calls to `addError` with disabled escaping. The message passed to `addError` +will be displayed directly to the user in the UI, making it prime ground for XSS +attacks if unescaped. + +##### ApexXSSFromURLParam + +Makes sure that all values obtained from URL parameters are properly escaped / sanitized +to avoid XSS attacks. + +#### Modified Rules + +The Java rule "UseLocaleWithCaseConversions" (ruleset java-design) has been modified, to detect calls +to `toLowerCase` and to `toUpperCase` also within method call chains. This leads to more detected cases +and potentially new false positives. +See also [bugfix #1556](https://sourceforge.net/p/pmd/bugs/1556/). + + +### Fixed Issues + +* General + * [#1511](https://sourceforge.net/p/pmd/bugs/1511/): \[core] Inconsistent behavior of Rule.start/Rule.end +* apex-apexunit + * [#1543](https://sourceforge.net/p/pmd/bugs/1543/): \[apex] ApexUnitTestClassShouldHaveAsserts assumes APEX is case sensitive +* apex-complexity + * [#183](https://github.com/pmd/pmd/issues/183): \[apex] NCSS Method length is incorrect when using method chaining +* java + * [#185](https://github.com/pmd/pmd/issues/185): \[java] CPD runs into NPE when analyzing Lucene + * [#206](https://github.com/pmd/pmd/issues/206): \[java] Parse error on annotation fields with generics + * [#207](https://github.com/pmd/pmd/issues/207): \[java] Parse error on method reference with generics + * [#208](https://github.com/pmd/pmd/issues/208): \[java] Parse error with local class with 2 or more annotations + * [#213](https://github.com/pmd/pmd/issues/213): \[java] CPD: OutOfMemory when analyzing Lucene + * [#1542](https://sourceforge.net/p/pmd/bugs/1542/): \[java] CPD throws an NPE when parsing enums with -ignore-identifiers + * [#1545](https://sourceforge.net/p/pmd/bugs/1545/): \[java] Symbol Table fails to resolve inner classes +* java-design + * [#1448](https://sourceforge.net/p/pmd/bugs/1448/): \[java] ImmutableField: Private field in inner class gives false positive with lambdas + * [#1495](https://sourceforge.net/p/pmd/bugs/1495/): \[java] UnnecessaryLocalBeforeReturn with assert + * [#1552](https://sourceforge.net/p/pmd/bugs/1552/): \[java] MissingBreakInSwitch - False positive for continue + * [#1556](https://sourceforge.net/p/pmd/bugs/1556/): \[java] UseLocaleWithCaseConversions does not works with `ResultSet` (false negative) + * [#177](https://github.com/pmd/pmd/issues/177): \[java] SingularField with lambdas as final fields +* java-imports + * [#1546](https://sourceforge.net/p/pmd/bugs/1546/): \[java] UnnecessaryFullyQualifiedNameRule doesn't take into consideration conflict resolution + * [#1547](https://sourceforge.net/p/pmd/bugs/1547/): \[java] UnusedImportRule - False Positive for only usage in Javadoc - {@link ClassName#CONSTANT} + * [#1555](https://sourceforge.net/p/pmd/bugs/1555/): \[java] UnnecessaryFullyQualifiedName: Really necessary fully qualified name +* java-logging-java + * [#1541](https://sourceforge.net/p/pmd/bugs/1541/): \[java] InvalidSlf4jMessageFormat: False positive with placeholder and exception + * [#1551](https://sourceforge.net/p/pmd/bugs/1551/): \[java] InvalidSlf4jMessageFormat: fails with NPE +* java-unnecessary + * [#199](https://github.com/pmd/pmd/issues/199): \[java] UselessParentheses: Parentheses in return statement are incorrectly reported as useless +* java-strings + * [#202](https://github.com/pmd/pmd/issues/202): \[java] \[doc] ConsecutiveAppendsShouldReuse is not really an optimization +* XML + * [#1518](https://sourceforge.net/p/pmd/bugs/1518/): \[xml] Error while processing xml file with ".webapp" in the file or directory name +* psql + * [#1549](https://sourceforge.net/p/pmd/bugs/1549/): \[plsql] Parse error for IS [NOT] NULL construct +* javascript + * [#201](https://github.com/pmd/pmd/issues/201): \[javascript] template strings are not correctly parsed + + +### API Changes + +* `net.sourceforge.pmd.RuleSetFactory` is now immutable and its behavior cannot be changed anymore. + It provides constructors to create new adjusted instances. This allows to avoid synchronization in RuleSetFactory. + See [PR #131](https://github.com/pmd/pmd/pull/131). + +### External Contributions + +* [#123](https://github.com/pmd/pmd/pull/123): \[apex] Changing method names to lowercase so casing doesn't matter +* [#129](https://github.com/pmd/pmd/pull/129): \[plsql] Added correct parse of IS [NOT] NULL and multiline DML +* [#137](https://github.com/pmd/pmd/pull/137): \[apex] Adjusted remediation points +* [#146](https://github.com/pmd/pmd/pull/146): \[apex] Detection of missing Apex CRUD checks for SOQL/DML operations +* [#147](https://github.com/pmd/pmd/pull/147): \[apex] Adding XSS detection to return statements +* [#148](https://github.com/pmd/pmd/pull/148): \[apex] Improving detection of SOQL injection +* [#149](https://github.com/pmd/pmd/pull/149): \[apex] Whitelisting String.isEmpty and casting +* [#152](https://github.com/pmd/pmd/pull/152): \[java] fixes #1552 continue does not require break +* [#154](https://github.com/pmd/pmd/pull/154): \[java] Fix #1547: UnusedImports: Adjust regex to support underscores +* [#158](https://github.com/pmd/pmd/pull/158): \[apex] Reducing FPs in SOQL with VF getter methods +* [#160](https://github.com/pmd/pmd/pull/160): \[apex] Flagging of dangerous method call +* [#163](https://github.com/pmd/pmd/pull/163): \[apex] Flagging of System.debug +* [#165](https://github.com/pmd/pmd/pull/165): \[apex] Improving open redirect rule to avoid test classes/methods +* [#167](https://github.com/pmd/pmd/pull/167): \[apex] GC and thread safety changes +* [#169](https://github.com/pmd/pmd/pull/169): \[apex] Improving detection for DML with inline new object +* [#170](https://github.com/pmd/pmd/pull/170): \[core] Ant Task Formatter encoding issue with XMLRenderer +* [#172](https://github.com/pmd/pmd/pull/172): \[apex] Bug fix, detects both Apex fields and class members +* [#175](https://github.com/pmd/pmd/pull/175): \[apex] ApexXSSFromURLParam: Adding missing casting methods +* [#176](https://github.com/pmd/pmd/pull/176): \[apex] Bug fix for FP: open redirect for strings prefixed with / is safe +* [#179](https://github.com/pmd/pmd/pull/179): \[apex] Legacy test class declaration support +* [#181](https://github.com/pmd/pmd/pull/181): \[apex] Control flow based CRUD rule checking +* [#184](https://github.com/pmd/pmd/pull/184): \[apex] Improving open redirect detection for static fields & assignment operations +* [#189](https://github.com/pmd/pmd/pull/189): \[apex] Bug fix of SOQL concatenated vars detection +* [#191](https://github.com/pmd/pmd/pull/191): \[apex] Detection of sharing violation when Database. methods are used +* [#192](https://github.com/pmd/pmd/pull/192): \[apex] Dead code removal +* [#200](https://github.com/pmd/pmd/pull/200): \[javascript] Templatestring grammar fix +* [#204](https://github.com/pmd/pmd/pull/204): \[apex] Sharing violation SOQL detection bug fix +* [#214](https://github.com/pmd/pmd/pull/214): \[apex] Sharing violation improving reporting of the correct node, de-duping + + ## 05-November-2016 - 5.5.2 **Summary:** diff --git a/src/site/markdown/overview/changelog.md b/src/site/markdown/overview/changelog.md index e02a687201..839ab858f1 100644 --- a/src/site/markdown/overview/changelog.md +++ b/src/site/markdown/overview/changelog.md @@ -1,263 +1,26 @@ # PMD Release Notes -## 28-January-2017 - 5.5.3 +## ????? - 5.5.4-SNAPSHOT -The PMD team is pleased to announce PMD 5.5.3 +The PMD team is pleased to announce PMD 5.5.4 -The most significant changes are on analysis performance and a whole new **Apex Security Rule Set**. - -Multithread performance has been enhanced by reducing thread-contention on a -bunch of areas. This is still an area of work, as the speedup of running -multithreaded analysis is still relatively small (4 threads produce less -than a 50% speedup). Future releases will keep improving on this area. - -Once again, *Symbol Table* has been an area of great performance improvements. -This time we were able to further improve it's performance by roughly 10% on all -supported languages. In *Java* in particular, several more improvements were possible, -improving *Symbol Table* performance by a whooping 30%, that's over 5X faster -than PMD 5.5.1, when we first started working on it. - -Java developers will also appreciate the revamp of `CloneMethodMustImplementCloneable`, -making it over 500X faster, and `PreserveStackTrace` which is now 7X faster. ### Table Of Contents * [New and noteworthy](#New_and_noteworthy) - * [Apex Security Rule Set](#Apex_Security_Rule_Set) - * [Modified Rules](#Modified_Rules) * [Fixed Issues](#Fixed_Issues) * [API Changes](#API_Changes) * [External Contributions](#External_Contributions) + ### New and noteworthy -#### Apex Security Rule Set - -A new ruleset focused on security has been added, consisting of a wide range of rules -to detect most common security problems. - -##### ApexBadCrypto - -The rule makes sure you are using randomly generated IVs and keys for `Crypto` calls. -Hard-wiring these values greatly compromises the security of encrypted data. - -For instance, it would report violations on code such as: - -``` -public class without sharing Foo { - Blob hardCodedIV = Blob.valueOf('Hardcoded IV 123'); - Blob hardCodedKey = Blob.valueOf('0000000000000000'); - Blob data = Blob.valueOf('Data to be encrypted'); - Blob encrypted = Crypto.encrypt('AES128', hardCodedKey, hardCodedIV, data); -} - -``` - -##### ApexCRUDViolation - -The rule validates you are checking for access permissions before a SOQL/SOSL/DML operation. -Since Apex runs in system mode not having proper permissions checks results in escalation of -privilege and may produce runtime errors. This check forces you to handle such scenarios. - -For example, the following code is considered valid: - -``` -public class Foo { - public Contact foo(String status, String ID) { - Contact c = [SELECT Status__c FROM Contact WHERE Id=:ID]; - - // Make sure we can update the database before even trying - if (!Schema.sObjectType.Contact.fields.Name.isUpdateable()) { - return null; - } - - c.Status__c = status; - update c; - return c; - } -} -``` - -##### ApexCSRF - -Check to avoid making DML operations in Apex class constructor/init method. This prevents -modification of the database just by accessing a page. - -For instance, the following code would be invalid: - -``` -public class Foo { - public init() { - insert data; - } - - public Foo() { - insert data; - } -} -``` - -##### ApexDangerousMethods - -Checks against calling dangerous methods. - -For the time being, it reports: - -* Against `FinancialForce`'s `Configuration.disableTriggerCRUDSecurity()`. Disabling CRUD security -opens the door to several attacks and requires manual validation, which is unreliable. -* Calling `System.debug` passing sensitive data as parameter, which could lead to exposure -of private data. - -##### ApexInsecureEndpoint - -Checks against accessing endpoints under plain **http**. You should always use -**https** for security. - -##### ApexOpenRedirect - -Checks against redirects to user-controlled locations. This prevents attackers from -redirecting users to phishing sites. - -For instance, the following code would be reported: - -``` -public class without sharing Foo { - String unsafeLocation = ApexPage.getCurrentPage().getParameters.get('url_param'); - PageReference page() { - return new PageReference(unsafeLocation); - } -} -``` - -##### ApexSharingViolations - -Detect classes declared without explicit sharing mode if DML methods are used. This -forces the developer to take access restrictions into account before modifying objects. - -##### ApexSOQLInjection - -Detects the usage of untrusted / unescaped variables in DML queries. - -For instance, it would report on: - -``` -public class Foo { - public void test1(String t1) { - Database.query('SELECT Id FROM Account' + t1); - } -} -``` - -##### ApexSuggestUsingNamedCred - -Detects hardcoded credentials used in requests to an endpoint. - -You should refrain from hardcoding credentials: - * They are hard to mantain by being mixed in application code - * Particularly hard to update them when used from different classes - * Granting a developer access to the codebase means granting knowledge - of credentials, keeping a two-level access is not possible. - * Using different credentials for different environments is troublesome - and error-prone. - -Instead, you should use *Named Credentials* and a callout endpoint. - -For more information, you can check [this](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_callouts_named_credentials.htm) - -##### ApexXSSFromEscapeFalse - -Reports on calls to `addError` with disabled escaping. The message passed to `addError` -will be displayed directly to the user in the UI, making it prime ground for XSS -attacks if unescaped. - -##### ApexXSSFromURLParam - -Makes sure that all values obtained from URL parameters are properly escaped / sanitized -to avoid XSS attacks. - -#### Modified Rules - -The Java rule "UseLocaleWithCaseConversions" (ruleset java-design) has been modified, to detect calls -to `toLowerCase` and to `toUpperCase` also within method call chains. This leads to more detected cases -and potentially new false positives. -See also [bugfix #1556](https://sourceforge.net/p/pmd/bugs/1556/). - ### Fixed Issues -* General - * [#1511](https://sourceforge.net/p/pmd/bugs/1511/): \[core] Inconsistent behavior of Rule.start/Rule.end -* apex-apexunit - * [#1543](https://sourceforge.net/p/pmd/bugs/1543/): \[apex] ApexUnitTestClassShouldHaveAsserts assumes APEX is case sensitive -* apex-complexity - * [#183](https://github.com/pmd/pmd/issues/183): \[apex] NCSS Method length is incorrect when using method chaining -* java - * [#185](https://github.com/pmd/pmd/issues/185): \[java] CPD runs into NPE when analyzing Lucene - * [#206](https://github.com/pmd/pmd/issues/206): \[java] Parse error on annotation fields with generics - * [#207](https://github.com/pmd/pmd/issues/207): \[java] Parse error on method reference with generics - * [#208](https://github.com/pmd/pmd/issues/208): \[java] Parse error with local class with 2 or more annotations - * [#213](https://github.com/pmd/pmd/issues/213): \[java] CPD: OutOfMemory when analyzing Lucene - * [#1542](https://sourceforge.net/p/pmd/bugs/1542/): \[java] CPD throws an NPE when parsing enums with -ignore-identifiers - * [#1545](https://sourceforge.net/p/pmd/bugs/1545/): \[java] Symbol Table fails to resolve inner classes -* java-design - * [#1448](https://sourceforge.net/p/pmd/bugs/1448/): \[java] ImmutableField: Private field in inner class gives false positive with lambdas - * [#1495](https://sourceforge.net/p/pmd/bugs/1495/): \[java] UnnecessaryLocalBeforeReturn with assert - * [#1552](https://sourceforge.net/p/pmd/bugs/1552/): \[java] MissingBreakInSwitch - False positive for continue - * [#1556](https://sourceforge.net/p/pmd/bugs/1556/): \[java] UseLocaleWithCaseConversions does not works with `ResultSet` (false negative) - * [#177](https://github.com/pmd/pmd/issues/177): \[java] SingularField with lambdas as final fields -* java-imports - * [#1546](https://sourceforge.net/p/pmd/bugs/1546/): \[java] UnnecessaryFullyQualifiedNameRule doesn't take into consideration conflict resolution - * [#1547](https://sourceforge.net/p/pmd/bugs/1547/): \[java] UnusedImportRule - False Positive for only usage in Javadoc - {@link ClassName#CONSTANT} - * [#1555](https://sourceforge.net/p/pmd/bugs/1555/): \[java] UnnecessaryFullyQualifiedName: Really necessary fully qualified name -* java-logging-java - * [#1541](https://sourceforge.net/p/pmd/bugs/1541/): \[java] InvalidSlf4jMessageFormat: False positive with placeholder and exception - * [#1551](https://sourceforge.net/p/pmd/bugs/1551/): \[java] InvalidSlf4jMessageFormat: fails with NPE -* java-unnecessary - * [#199](https://github.com/pmd/pmd/issues/199): \[java] UselessParentheses: Parentheses in return statement are incorrectly reported as useless -* java-strings - * [#202](https://github.com/pmd/pmd/issues/202): \[java] \[doc] ConsecutiveAppendsShouldReuse is not really an optimization -* XML - * [#1518](https://sourceforge.net/p/pmd/bugs/1518/): \[xml] Error while processing xml file with ".webapp" in the file or directory name -* psql - * [#1549](https://sourceforge.net/p/pmd/bugs/1549/): \[plsql] Parse error for IS [NOT] NULL construct -* javascript - * [#201](https://github.com/pmd/pmd/issues/201): \[javascript] template strings are not correctly parsed - ### API Changes -* `net.sourceforge.pmd.RuleSetFactory` is now immutable and its behavior cannot be changed anymore. - It provides constructors to create new adjusted instances. This allows to avoid synchronization in RuleSetFactory. - See [PR #131](https://github.com/pmd/pmd/pull/131). ### External Contributions -* [#123](https://github.com/pmd/pmd/pull/123): \[apex] Changing method names to lowercase so casing doesn't matter -* [#129](https://github.com/pmd/pmd/pull/129): \[plsql] Added correct parse of IS [NOT] NULL and multiline DML -* [#137](https://github.com/pmd/pmd/pull/137): \[apex] Adjusted remediation points -* [#146](https://github.com/pmd/pmd/pull/146): \[apex] Detection of missing Apex CRUD checks for SOQL/DML operations -* [#147](https://github.com/pmd/pmd/pull/147): \[apex] Adding XSS detection to return statements -* [#148](https://github.com/pmd/pmd/pull/148): \[apex] Improving detection of SOQL injection -* [#149](https://github.com/pmd/pmd/pull/149): \[apex] Whitelisting String.isEmpty and casting -* [#152](https://github.com/pmd/pmd/pull/152): \[java] fixes #1552 continue does not require break -* [#154](https://github.com/pmd/pmd/pull/154): \[java] Fix #1547: UnusedImports: Adjust regex to support underscores -* [#158](https://github.com/pmd/pmd/pull/158): \[apex] Reducing FPs in SOQL with VF getter methods -* [#160](https://github.com/pmd/pmd/pull/160): \[apex] Flagging of dangerous method call -* [#163](https://github.com/pmd/pmd/pull/163): \[apex] Flagging of System.debug -* [#165](https://github.com/pmd/pmd/pull/165): \[apex] Improving open redirect rule to avoid test classes/methods -* [#167](https://github.com/pmd/pmd/pull/167): \[apex] GC and thread safety changes -* [#169](https://github.com/pmd/pmd/pull/169): \[apex] Improving detection for DML with inline new object -* [#170](https://github.com/pmd/pmd/pull/170): \[core] Ant Task Formatter encoding issue with XMLRenderer -* [#172](https://github.com/pmd/pmd/pull/172): \[apex] Bug fix, detects both Apex fields and class members -* [#175](https://github.com/pmd/pmd/pull/175): \[apex] ApexXSSFromURLParam: Adding missing casting methods -* [#176](https://github.com/pmd/pmd/pull/176): \[apex] Bug fix for FP: open redirect for strings prefixed with / is safe -* [#179](https://github.com/pmd/pmd/pull/179): \[apex] Legacy test class declaration support -* [#181](https://github.com/pmd/pmd/pull/181): \[apex] Control flow based CRUD rule checking -* [#184](https://github.com/pmd/pmd/pull/184): \[apex] Improving open redirect detection for static fields & assignment operations -* [#189](https://github.com/pmd/pmd/pull/189): \[apex] Bug fix of SOQL concatenated vars detection -* [#191](https://github.com/pmd/pmd/pull/191): \[apex] Detection of sharing violation when Database. methods are used -* [#192](https://github.com/pmd/pmd/pull/192): \[apex] Dead code removal -* [#200](https://github.com/pmd/pmd/pull/200): \[javascript] Templatestring grammar fix -* [#204](https://github.com/pmd/pmd/pull/204): \[apex] Sharing violation SOQL detection bug fix -* [#214](https://github.com/pmd/pmd/pull/214): \[apex] Sharing violation improving reporting of the correct node, de-duping -