diff --git a/java/java-impl/src/com/intellij/psi/scope/conflictResolvers/JavaMethodsConflictResolver.java b/java/java-impl/src/com/intellij/psi/scope/conflictResolvers/JavaMethodsConflictResolver.java index cf95704cc1e7..1c56ea8a6f17 100644 --- a/java/java-impl/src/com/intellij/psi/scope/conflictResolvers/JavaMethodsConflictResolver.java +++ b/java/java-impl/src/com/intellij/psi/scope/conflictResolvers/JavaMethodsConflictResolver.java @@ -213,11 +213,15 @@ public class JavaMethodsConflictResolver implements PsiConflictResolver{ if (returnType1 != null && returnType2 != null) { returnType1 = infoSubstitutor.substitute(returnType1); returnType2 = existing.getSubstitutor().substitute(returnType2); - if (returnType1.isAssignableFrom(returnType2)) { + if (!returnType1.equals(returnType2) && returnType1.isAssignableFrom(returnType2)) { conflicts.remove(i); i--; + continue; } } + + // prefer derived class + signatures.put(signature, info); } } } diff --git a/java/java-tests/testData/psi/resolve/method/generics/StaticImportConflict3.java b/java/java-tests/testData/psi/resolve/method/generics/StaticImportConflict3.java new file mode 100644 index 000000000000..2c08d1599da0 --- /dev/null +++ b/java/java-tests/testData/psi/resolve/method/generics/StaticImportConflict3.java @@ -0,0 +1,23 @@ +package p; + +import static p.ToImportX.fff; +import static p.ToImportX2.fff; + +//IDEA-64926 +public class AppTest { + public static void main(String[] args) { + fff(); + } +} + +class ToImportX { + public static void fff() { + System.out.println("ToImport"); + } +} + +class ToImportX2 extends ToImportX { + public static void fff() { + System.out.println("ToImport2"); + } +} diff --git a/java/java-tests/testSrc/com/intellij/psi/resolve/ResolveMethod15Test.java b/java/java-tests/testSrc/com/intellij/psi/resolve/ResolveMethod15Test.java index f5694a3df0a0..22e49dafae49 100644 --- a/java/java-tests/testSrc/com/intellij/psi/resolve/ResolveMethod15Test.java +++ b/java/java-tests/testSrc/com/intellij/psi/resolve/ResolveMethod15Test.java @@ -84,6 +84,11 @@ public class ResolveMethod15Test extends Resolve15TestCase { PsiMethod parentMethod = PsiTreeUtil.getParentOfType(ref.getElement(), PsiMethod.class); assertEquals(method, parentMethod); } + public void testStaticImportConflict3() throws Exception { + final PsiJavaCodeReferenceElement ref = (PsiJavaCodeReferenceElement)configureByFile(); + final JavaResolveResult result = ref.advancedResolve(false); + assertResolvesToMethodInClass(result, "ToImportX2"); + } public void testGenericsAndVarargsNoConflict() throws Exception { final PsiReference ref = configureByFile(); @@ -343,7 +348,7 @@ public class ResolveMethod15Test extends Resolve15TestCase { assertThat(target, instanceOf(PsiMethod.class)); assertThat(target.getParent(), instanceOf(PsiClass.class)); final PsiParameter[] parameters = ((PsiMethod)target).getParameterList().getParameters(); - assertTrue(parameters.length == 1); + assertEquals(1, parameters.length); assertTrue(parameters[0].getType() instanceof PsiArrayType); }