diff --git a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/UnusedImportsRule.java b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/UnusedImportsRule.java index f7307a2a39..c4507a820d 100644 --- a/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/UnusedImportsRule.java +++ b/pmd-java/src/main/java/net/sourceforge/pmd/lang/java/rule/bestpractices/UnusedImportsRule.java @@ -143,6 +143,23 @@ public class UnusedImportsRule extends AbstractJavaRule { @Override public Object visit(ASTName node, Object data) { + if (isMethodCall(node) && isQualifiedName(node)) { + String name = node.getImage().substring(0, node.getImage().lastIndexOf('.')); + // try to resolve with on demand imports... + ClassTypeResolver classTypeResolver = node.getFirstParentOfType(ASTCompilationUnit.class).getClassTypeResolver(); + Iterator it = imports.iterator(); + while (it.hasNext()) { + ImportWrapper i = it.next(); + if (i.getName() == null) { + String fullName = i.getFullName() + "." + name; + if (classTypeResolver.loadClass(fullName) != null) { + // found a match + it.remove(); + return data; + } + } + } + } check(node); return data; } diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/bestpractices/unusedimports/Issue2016.java b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/bestpractices/unusedimports/Issue2016.java new file mode 100644 index 0000000000..db0dc08a99 --- /dev/null +++ b/pmd-java/src/test/java/net/sourceforge/pmd/lang/java/rule/bestpractices/unusedimports/Issue2016.java @@ -0,0 +1,17 @@ +/** + * 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.*; + +/** + * Note: In order for this test case to work, the class "Issue2016" must also be compiled and available + * on the auxclasspath. + */ +public class Issue2016 { + public void testFunction() { + Objects.toString(null); + } +} 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 3c1ce4c2f9..4a0b42a568 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 @@ -531,4 +531,24 @@ public class VendingV2PaymentRequest { } ]]> + + + #2016 [java] UnusedImports: False positive if wildcard is used and only static methods + 0 + +