From 2012c4f7204f2ec708d64e4a2a3a8a95698242c6 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Fri, 3 Oct 2014 15:08:57 +0200 Subject: [PATCH] IG: fix static import checking in "Unused import" inspection --- .../ig/imports/ImportsAreUsedVisitor.java | 11 +++++++++-- .../ig/imports/UnusedImportInspectionTest.java | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/imports/ImportsAreUsedVisitor.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/imports/ImportsAreUsedVisitor.java index 78a2476062f8..91c48258c5c9 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/imports/ImportsAreUsedVisitor.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/imports/ImportsAreUsedVisitor.java @@ -103,8 +103,15 @@ class ImportsAreUsedVisitor extends JavaRecursiveElementVisitor { final boolean hasOnDemandImportConflict = ImportUtils.hasOnDemandImportConflict(qualifiedName, myFile); for (PsiImportStatementBase importStatement : importStatements) { if (!importStatement.isOnDemand()) { - if (member.equals(importStatement.resolve())) { - return importStatement; + final PsiJavaCodeReferenceElement reference = importStatement.getImportReference(); + if (reference == null) { + continue; + } + final JavaResolveResult[] targets = reference.multiResolve(false); + for (JavaResolveResult target : targets) { + if (member.equals(target.getElement())) { + return importStatement; + } } } else { diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/imports/UnusedImportInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/imports/UnusedImportInspectionTest.java index 74f2624df9dc..ebc76e9c6e4e 100644 --- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/imports/UnusedImportInspectionTest.java +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/imports/UnusedImportInspectionTest.java @@ -54,6 +54,15 @@ public class UnusedImportInspectionTest extends LightInspectionTestCase { "}"); } + public void testExactStaticImport() { + doTest("package a;\n" + + "import static java.lang.Math.abs;\n" + + "/*Unused import 'import static java.lang.Math.max;'*/import static java.lang.Math.max;/**/\n" + + "class Main {{\n" + + " abs(1);\n" + + "}}"); + } + public void testStaticImportOnDemandConflict1() { addEnvironmentClass("package a;" + "public class Parent {" + @@ -183,6 +192,15 @@ public class UnusedImportInspectionTest extends LightInspectionTestCase { "}}"); } + public void testNoConflictInSamePackage() { + doTest("package a;" + + "/*Unused import 'import java.util.List;'*/import java.util.List;/**/" + + "import java.util.*;" + + "class X {{" + + " List list = new ArrayList();" + + "}}"); + } + @Override protected LocalInspectionTool getInspection() { return new UnusedImportInspection();