From 666dc36343e8dc13044282a9e35a8f1ac04b3e7b Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Wed, 24 Oct 2018 19:46:58 +0200 Subject: [PATCH] [java] UnusedImports false positive for static import with package-private method usage Fixes #1209 --- docs/pages/release_notes.md | 1 + .../pmd/lang/rule/ImportWrapper.java | 6 +++++ .../unusedimports/PackagePrivateUtils.java | 22 +++++++++++++++++ .../unusedimports/PublicUtils.java | 22 +++++++++++++++++ .../rule/bestpractices/xml/UnusedImports.xml | 24 +++++++++++++++++++ 5 files changed, 75 insertions(+) create mode 100644 pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/bestpractices/unusedimports/PackagePrivateUtils.java create mode 100644 pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/bestpractices/unusedimports/PublicUtils.java diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 504fa716c3..ce325e4d17 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -30,6 +30,7 @@ as comments are recognized as such and ignored. * [#1330](https://github.com/pmd/pmd/issues/1330): \[java] PMD crashes with java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/xml/ws/Service * java-bestpractices * [#1202](https://github.com/pmd/pmd/issues/1202): \[java] GuardLogStatement: "There is log block not surrounded by if" doesn't sound right + * [#1209](https://github.com/pmd/pmd/issues/1209): \[java] UnusedImports false positive for static import with package-private method usage * [#1365](https://github.com/pmd/pmd/issues/1365): \[java] JUnitTestsShouldIncludeAssert false positive * java-codestyle * [#1199](https://github.com/pmd/pmd/issues/1199): \[java] UnnecessaryFullyQualifiedName doesn't flag same package FQCNs diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/lang/rule/ImportWrapper.java b/pmd-core/src/main/java/net/sourceforge/pmd/lang/rule/ImportWrapper.java index 671c8d1861..69b7e2e229 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/lang/rule/ImportWrapper.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/lang/rule/ImportWrapper.java @@ -42,6 +42,12 @@ public class ImportWrapper { allDemands.add(f.getName()); } } + // and methods, too + for (Method m : type.getDeclaredMethods()) { + if (Modifier.isStatic(m.getModifiers())) { + allDemands.add(m.getName()); + } + } } } diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/bestpractices/unusedimports/PackagePrivateUtils.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/bestpractices/unusedimports/PackagePrivateUtils.java new file mode 100644 index 0000000000..b9dee82b8c --- /dev/null +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/bestpractices/unusedimports/PackagePrivateUtils.java @@ -0,0 +1,22 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.java.rule.bestpractices.unusedimports; + +final class PackagePrivateUtils { + private PackagePrivateUtils() { + } + + static int f1(int x) { + return x + 1; + } + + static int f2(int x) { + return x + 1; + } + + static int f3(int x) { + return x + 1; + } +} diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/bestpractices/unusedimports/PublicUtils.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/bestpractices/unusedimports/PublicUtils.java new file mode 100644 index 0000000000..003aeae7a3 --- /dev/null +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/bestpractices/unusedimports/PublicUtils.java @@ -0,0 +1,22 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.java.rule.bestpractices.unusedimports; + +public class PublicUtils { + private PublicUtils() { + } + + public static int g1(int x) { + return x + 1; + } + + public static int g2(int x) { + return x + 1; + } + + public static int g3(int x) { + return x + 1; + } +} diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/UnusedImports.xml b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/UnusedImports.xml index 5d6b5a50ae..534966c2dd 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/UnusedImports.xml +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/lang/java/rule/bestpractices/xml/UnusedImports.xml @@ -409,6 +409,30 @@ public class ClassWithImport { System.out.println("List 1: " + LIST1); System.out.println("List 2: " + LIST2); } +} + ]]> + + + + #1209 [java] UnusedImports false positive for static import with package-private method usage + 0 +