diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/RefCountHolder.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/RefCountHolder.java index 82e007855865..a12b62a69671 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/RefCountHolder.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/RefCountHolder.java @@ -164,6 +164,15 @@ class RefCountHolder { if (resolveScope instanceof PsiImportStatementBase) { registerImportStatement(ref, (PsiImportStatementBase)resolveScope); } + else if (refElement == null && ref instanceof PsiJavaReference) { + for (JavaResolveResult result : ((PsiJavaReference)ref).multiResolve(true)) { + resolveScope = result.getCurrentFileResolveScope(); + if (resolveScope instanceof PsiImportStatementBase) { + registerImportStatement(ref, (PsiImportStatementBase)resolveScope); + break; + } + } + } } private void registerImportStatement(@NotNull PsiReference ref, @NotNull PsiImportStatementBase importStatement) { diff --git a/java/java-analysis-impl/src/com/intellij/codeInspection/unusedImport/ImportsAreUsedVisitor.java b/java/java-analysis-impl/src/com/intellij/codeInspection/unusedImport/ImportsAreUsedVisitor.java index 5264dc1eb5fa..bf0a56b20056 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInspection/unusedImport/ImportsAreUsedVisitor.java +++ b/java/java-analysis-impl/src/com/intellij/codeInspection/unusedImport/ImportsAreUsedVisitor.java @@ -71,7 +71,13 @@ class ImportsAreUsedVisitor extends JavaRecursiveElementWalkingVisitor { } // during typing there can be incomplete code final JavaResolveResult resolveResult = reference.advancedResolve(true); - final PsiElement element = resolveResult.getElement(); + PsiElement element = resolveResult.getElement(); + if (element == null) { + JavaResolveResult[] results = reference.multiResolve(false); + if (results.length > 0) { + element = results[0].getElement(); + } + } if (!(element instanceof PsiMember)) { return; } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/UnresolvedReferencesInsideAmbiguousCallToImportedMethod.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/UnresolvedReferencesInsideAmbiguousCallToImportedMethod.java new file mode 100644 index 000000000000..644d9ea770b2 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/unusedImports/UnresolvedReferencesInsideAmbiguousCallToImportedMethod.java @@ -0,0 +1,6 @@ +import static a.A.foo; +class Test { + { + foo(unresolvedMethodCall()); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/UnusedImportsTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/UnusedImportsTest.java index a1e963a7f002..745249e364c1 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/UnusedImportsTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/daemon/UnusedImportsTest.java @@ -92,6 +92,14 @@ public class UnusedImportsTest extends LightCodeInsightFixtureTestCase { myFixture.checkHighlighting(true,false, false); } + public void testUnresolvedReferencesInsideAmbiguousCallToImportedMethod() { + myFixture.addClass("package a; public class A {\n" + + " public static void foo(Object o) {}\n" + + " public static void foo(String s) {}\n" + + "}"); + doTest(); + } + private void doTest() { myFixture.configureByFile(getTestName(false) + ".java"); myFixture.checkHighlighting(true, false, false); diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/imports/globalInspection/UnresolvedReferencesInsideAmbiguousCallToImportedMethod/expected.xml b/plugins/InspectionGadgets/test/com/siyeh/igtest/imports/globalInspection/UnresolvedReferencesInsideAmbiguousCallToImportedMethod/expected.xml new file mode 100644 index 000000000000..216a575c3ed4 --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/imports/globalInspection/UnresolvedReferencesInsideAmbiguousCallToImportedMethod/expected.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/imports/UnusedImportGlobalInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/imports/UnusedImportGlobalInspectionTest.java index 665551c335c9..4dc0a6610f45 100644 --- a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/imports/UnusedImportGlobalInspectionTest.java +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/imports/UnusedImportGlobalInspectionTest.java @@ -83,6 +83,21 @@ public class UnusedImportGlobalInspectionTest extends LightCodeInsightFixtureTes "}}"); } + + public void testUnresolvedReferencesInsideAmbiguousCallToImportedMethod() { + myFixture.addClass("package a; public class A {\n" + + " public static void foo(Object o) {}\n" + + " public static void foo(String s) {}\n" + + "}"); + doTest("import static a.A.foo;\n" + + "class Test {\n" + + " {\n" + + " foo(unresolvedMethodCall());\n" + + " }\n" + + "}"); + } + + public void testNoHighlightingInInvalidCode() { myFixture.configureByText("a.java", "import\n" +