From cc08bd47cfe7842cc27a1011ef7b2ad6272165d5 Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Wed, 21 Feb 2018 20:37:49 +0100 Subject: [PATCH] [java] UnusedImports false positive for static import Fixes #925 --- docs/pages/release_notes.md | 1 + .../pmd/lang/rule/ImportWrapper.java | 8 ++++++++ .../unusedimports/ClassWithConstants.java | 18 ++++++++++++++++++ .../rule/bestpractices/xml/UnusedImports.xml | 17 +++++++++++++++++ 4 files changed, 44 insertions(+) create mode 100644 pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/bestpractices/unusedimports/ClassWithConstants.java diff --git a/docs/pages/release_notes.md b/docs/pages/release_notes.md index 8c4e2b5e96..89f8f54568 100644 --- a/docs/pages/release_notes.md +++ b/docs/pages/release_notes.md @@ -37,6 +37,7 @@ This is a minor release. * [#920](https://github.com/pmd/pmd/pull/920): \[java] Update valid identifiers in grammar * java-bestpractices * [#784](https://github.com/pmd/pmd/issues/784): \[java] ForLoopCanBeForeach false-positive + * [#925](https://github.com/pmd/pmd/issues/925): \[java] UnusedImports false positive for static import * java-design * [#855](https://github.com/pmd/pmd/issues/855): \[java] ImmutableField false-positive with lambdas * java-documentation 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 adee83c793..8d02e8a1aa 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 @@ -6,6 +6,7 @@ package net.sourceforge.pmd.lang.rule; import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.lang.reflect.Modifier; import java.util.HashSet; import java.util.Set; @@ -35,6 +36,13 @@ public class ImportWrapper { for (Field f : type.getFields()) { allDemands.add(f.getName()); } + // also consider static fields, that are not public + int requiredMod = Modifier.STATIC; + for (Field f : type.getDeclaredFields()) { + if ((f.getModifiers() & requiredMod) == requiredMod) { + allDemands.add(f.getName()); + } + } } } diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/bestpractices/unusedimports/ClassWithConstants.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/bestpractices/unusedimports/ClassWithConstants.java new file mode 100644 index 0000000000..5938d2aa0a --- /dev/null +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/bestpractices/unusedimports/ClassWithConstants.java @@ -0,0 +1,18 @@ +/** + * BSD-style license; for more info see http://pmd.sourceforge.net/license.html + */ + +package net.sourceforge.pmd.lang.java.rule.bestpractices.unusedimports; + +import java.util.Arrays; +import java.util.List; + +public class ClassWithConstants { + + private ClassWithConstants() { + // Utility class + } + + /*package*/ static final List LIST1 = Arrays.asList("A"); + /*package*/ static final List LIST2 = Arrays.asList("B"); +} 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 ce3a19e2ac..5d6b5a50ae 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 @@ -395,4 +395,21 @@ public class Foo { ]]> + + #925 [java] UnusedImports false positive for static import + 0 + +