PMD UnusedPrivateMethod invalid detection of 'private void...
A source code analyzer
Brought to you by:
adangel,
juansotuyo
PMD UnusedPrivateMethod
After some refactoring, a used private method is being highlighted by PMD as unused but it definetly is being used.
Avoid unused private methods such as 'deleteAllAssetsWithExceptions(int,boolean,Integer...)'.
Snippet below;
@Override public void deleteAllAssetsWithExceptionsNoPurge(int galleryId, Integer... exceptionList) throws MediaServiceException { deleteAllAssetsWithExceptions(galleryId, false, exceptionList); } private void deleteAllAssetsWithExceptions(int galleryId, boolean purge, Integer... exceptionList) throws MediaServiceException {
...
I cannot reproduce the problem.
I checked 5.1.1 through 5.2.2 and neither show a problem.
Which version of PMD were you using?
I've just retested am still getting the issue, the version I'm using below, as well as which version of maven.
pmd 5.2.3
pmd plugin 3.4
$ mvn -version
Apache Maven 2.2.1 (rdebian-14)
Java version: 1.7.0_65
Java home: /usr/lib/jvm/java-7-openjdk-amd64/jre
Default locale: en_GB, platform encoding: UTF-8
OS name: "linux" version: "3.13.0-39-generic" arch: "amd64" Family: "unix"
$ find /home/johnp/.m2/repository/ -name "pmd"
/home/johnp/.m2/repository/org/apache/maven/plugins/maven-pmd-plugin
/home/johnp/.m2/repository/org/apache/maven/plugins/maven-pmd-plugin/3.4-SNAPSHOT/maven-pmd-plugin-3.4-20141221.192442-156.pom.sha1
/home/johnp/.m2/repository/org/apache/maven/plugins/maven-pmd-plugin/3.4-SNAPSHOT/maven-pmd-plugin-3.4-20141221.192442-156.pom
/home/johnp/.m2/repository/org/apache/maven/plugins/maven-pmd-plugin/3.4-SNAPSHOT/maven-pmd-plugin-3.4-SNAPSHOT.pom
/home/johnp/.m2/repository/org/apache/maven/plugins/maven-pmd-plugin/3.4-SNAPSHOT/maven-pmd-plugin-3.4-20141221.192442-156.jar.sha1
/home/johnp/.m2/repository/org/apache/maven/plugins/maven-pmd-plugin/3.4-SNAPSHOT/maven-pmd-plugin-3.4-20141221.192442-156.jar
/home/johnp/.m2/repository/org/apache/maven/plugins/maven-pmd-plugin/3.4-SNAPSHOT/maven-pmd-plugin-3.4-SNAPSHOT.jar
/home/johnp/.m2/repository/net/sourceforge/pmd
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-core
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-core/5.2.3/pmd-core-5.2.3.pom.sha1
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-core/5.2.3/pmd-core-5.2.3.pom
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-core/5.2.3/pmd-core-5.2.3.jar.sha1
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-core/5.2.3/pmd-core-5.2.3.jar
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd/5.2.3/pmd-5.2.3.pom.sha1
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd/5.2.3/pmd-5.2.3.pom
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-java
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-java/5.2.3/pmd-java-5.2.3.pom.sha1
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-java/5.2.3/pmd-java-5.2.3.pom
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-java/5.2.3/pmd-java-5.2.3.jar.sha1
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-java/5.2.3/pmd-java-5.2.3.jar
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-javascript
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-javascript/5.2.3/pmd-javascript-5.2.3.pom.sha1
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-javascript/5.2.3/pmd-javascript-5.2.3.pom
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-javascript/5.2.3/pmd-javascript-5.2.3.jar.sha1
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-javascript/5.2.3/pmd-javascript-5.2.3.jar
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-jsp
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-jsp/5.2.3/pmd-jsp-5.2.3.pom.sha1
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-jsp/5.2.3/pmd-jsp-5.2.3.pom
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-jsp/5.2.3/pmd-jsp-5.2.3.jar.sha1
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-jsp/5.2.3/pmd-jsp-5.2.3.jar
$
MediaServiceException
MediaMgmtService
MediaMgmtServiceImpl
I've extracted the files into a example project and can still reproduce the issue.
I'm using pmd 5.2.3 and pmd plugin 3.4.
$ mvn -version
Apache Maven 2.2.1 (rdebian-14)
Java version: 1.7.0_65
Java home: /usr/lib/jvm/java-7-openjdk-amd64/jre
Default locale: en_GB, platform encoding: UTF-8
OS name: "linux" version: "3.13.0-39-generic" arch: "amd64" Family: "unix"
$
$ find /home/johnp/.m2/repository/ -name "pmd"
/home/johnp/.m2/repository/org/apache/maven/plugins/maven-pmd-plugin
/home/johnp/.m2/repository/org/apache/maven/plugins/maven-pmd-plugin/3.4-SNAPSHOT/maven-pmd-plugin-3.4-20141221.192442-156.pom.sha1
/home/johnp/.m2/repository/org/apache/maven/plugins/maven-pmd-plugin/3.4-SNAPSHOT/maven-pmd-plugin-3.4-20141221.192442-156.pom
/home/johnp/.m2/repository/org/apache/maven/plugins/maven-pmd-plugin/3.4-SNAPSHOT/maven-pmd-plugin-3.4-SNAPSHOT.pom
/home/johnp/.m2/repository/org/apache/maven/plugins/maven-pmd-plugin/3.4-SNAPSHOT/maven-pmd-plugin-3.4-20141221.192442-156.jar.sha1
/home/johnp/.m2/repository/org/apache/maven/plugins/maven-pmd-plugin/3.4-SNAPSHOT/maven-pmd-plugin-3.4-20141221.192442-156.jar
/home/johnp/.m2/repository/org/apache/maven/plugins/maven-pmd-plugin/3.4-SNAPSHOT/maven-pmd-plugin-3.4-SNAPSHOT.jar
/home/johnp/.m2/repository/net/sourceforge/pmd
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-core
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-core/5.2.3/pmd-core-5.2.3.pom.sha1
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-core/5.2.3/pmd-core-5.2.3.pom
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-core/5.2.3/pmd-core-5.2.3.jar.sha1
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-core/5.2.3/pmd-core-5.2.3.jar
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd/5.2.3/pmd-5.2.3.pom.sha1
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd/5.2.3/pmd-5.2.3.pom
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-java
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-java/5.2.3/pmd-java-5.2.3.pom.sha1
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-java/5.2.3/pmd-java-5.2.3.pom
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-java/5.2.3/pmd-java-5.2.3.jar.sha1
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-java/5.2.3/pmd-java-5.2.3.jar
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-javascript
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-javascript/5.2.3/pmd-javascript-5.2.3.pom.sha1
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-javascript/5.2.3/pmd-javascript-5.2.3.pom
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-javascript/5.2.3/pmd-javascript-5.2.3.jar.sha1
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-javascript/5.2.3/pmd-javascript-5.2.3.jar
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-jsp
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-jsp/5.2.3/pmd-jsp-5.2.3.pom.sha1
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-jsp/5.2.3/pmd-jsp-5.2.3.pom
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-jsp/5.2.3/pmd-jsp-5.2.3.jar.sha1
/home/johnp/.m2/repository/net/sourceforge/pmd/pmd-jsp/5.2.3/pmd-jsp-5.2.3.jar
$
Many thanks for the example. I could reproduce it now. It seems, that PMD gets confused with the two method usages... it actually gets confused about the overloaded method - one method is public, this other is private, but both have the same name.
So, as a workaround, you could rename your private method to a different name (e.g.
internalDeleteAllAssetsWithExceptions
) and the false positive should go away.I'll try to fix it with the next version.
Will be fixed with the next version.