diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddOnDemandStaticImportAction.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddOnDemandStaticImportAction.java index b2c2054c8e8d..7772ea5a9847 100644 --- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddOnDemandStaticImportAction.java +++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/AddOnDemandStaticImportAction.java @@ -29,6 +29,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Objects; @@ -81,8 +82,15 @@ public final class AddOnDemandStaticImportAction extends PsiUpdateModCommandActi final PsiElement qualifier = call.getMethodExpression().getQualifier(); if (qualifier == null) return null; qualifier.delete(); - final PsiMethod method = call.resolveMethod(); - if (method != null && method.getContainingClass() != psiClass) return null; + JavaResolveResult[] results = call.multiResolve(false); + if (Arrays.stream(results) + .filter(Objects::nonNull) + .map(ResolveResult::getElement) + .anyMatch(psiElement -> + psiElement instanceof PsiMethod psiMethod && + psiMethod.getContainingClass() != psiClass)) { + return null; + } } else { PsiElement refNameElement = parentRef.getReferenceNameElement(); diff --git a/java/java-tests/testData/inspection/staticImportCanBeUsed/DoubleTheSameMethod.java b/java/java-tests/testData/inspection/staticImportCanBeUsed/DoubleTheSameMethod.java new file mode 100644 index 000000000000..a8f3b4af9593 --- /dev/null +++ b/java/java-tests/testData/inspection/staticImportCanBeUsed/DoubleTheSameMethod.java @@ -0,0 +1,15 @@ +package staticImportCanBeUsed; + +import java.util.Locale; + +@SuppressWarnings("unused") +final class ExampleImpls { + + record ExampleImpl(String translationKey) implements Example { + + @Override + public String localize(Locale locale) { + return StaticMethod.localize(locale, translationKey); + } + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/impl/quickfix/StaticImportCanBeUsedInspectionTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/impl/quickfix/StaticImportCanBeUsedInspectionTest.java index fb9c2d5fa287..985899359aeb 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/impl/quickfix/StaticImportCanBeUsedInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/impl/quickfix/StaticImportCanBeUsedInspectionTest.java @@ -303,6 +303,34 @@ public class StaticImportCanBeUsedInspectionTest extends LightJavaInspectionTest } } + public void testDoubleTheSameMethod() { + try { + myFixture.addClass(""" + package staticImportCanBeUsed; + import java.util.Locale; + public interface Example { + default String localize() { + return localize(Locale.getDefault()); + } + String localize(Locale locale); + }"""); + + myFixture.addClass(""" + package staticImportCanBeUsed; + import java.util.Locale; + public class StaticMethod { + public static String localize(Locale locale, String translationKey) { + return translationKey; + } + }"""); + addStaticAutoImportToProject("staticImportCanBeUsed.StaticMethod.localize"); + doTest(); + } + finally { + cleanTable(); + } + } + private void cleanupTest() { IntentionAction intention = myFixture.getAvailableIntention(AnalysisBundle.message("cleanup.in.file")); myFixture.launchAction(intention);