From 89653cb1f17ed77f4ac0c90bde6afcdbb1d09da6 Mon Sep 17 00:00:00 2001 From: anna Date: Thu, 5 Jul 2012 16:09:16 +0200 Subject: [PATCH] method conflicts resolution (IDEA-87672) --- .../JavaMethodsConflictResolver.java | 14 +++++------ .../pck/AmbiguousMethodCall.java | 23 +++++++++++++++++++ .../daemon/AdvHighlightingJdk7Test.java | 4 ++++ 3 files changed, 34 insertions(+), 7 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA87672/pck/AmbiguousMethodCall.java diff --git a/java/java-psi-impl/src/com/intellij/psi/scope/conflictResolvers/JavaMethodsConflictResolver.java b/java/java-psi-impl/src/com/intellij/psi/scope/conflictResolvers/JavaMethodsConflictResolver.java index 39ef4ab5a3eb..36a90378509d 100644 --- a/java/java-psi-impl/src/com/intellij/psi/scope/conflictResolvers/JavaMethodsConflictResolver.java +++ b/java/java-psi-impl/src/com/intellij/psi/scope/conflictResolvers/JavaMethodsConflictResolver.java @@ -498,9 +498,15 @@ public class JavaMethodsConflictResolver implements PsiConflictResolver{ PsiSubstitutor classSubstitutor2, PsiType type1, PsiType type2) { + final PsiClass aClass1 = PsiUtil.resolveClassInClassTypeOnly(type1); + final PsiClass aClass2 = PsiUtil.resolveClassInClassTypeOnly(type2); + if (aClass1 instanceof PsiTypeParameter && aClass2 instanceof PsiTypeParameter) { + return checkTypeParams(method1, method2, classSubstitutor1, classSubstitutor2, type1, type2, (PsiTypeParameter)aClass1, (PsiTypeParameter)aClass2); + } + if (aClass1 instanceof PsiTypeParameter || aClass2 instanceof PsiTypeParameter) return null; + final Map map1 = classSubstitutor1.getSubstitutionMap(); final Map map2 = classSubstitutor2.getSubstitutionMap(); - if (map1.size() == 1 && map2.size() == 1) { final PsiType t1 = map1.values().iterator().next(); final PsiType t2 = map2.values().iterator().next(); @@ -517,12 +523,6 @@ public class JavaMethodsConflictResolver implements PsiConflictResolver{ final PsiTypeParameter p2 = map2.keySet().iterator().next(); return checkTypeParams(method1, method2, classSubstitutor1, classSubstitutor2, type1, type2, p1, p2); } - } else { - final PsiClass aClass1 = PsiUtil.resolveClassInClassTypeOnly(type1); - final PsiClass aClass2 = PsiUtil.resolveClassInClassTypeOnly(type2); - if (aClass1 instanceof PsiTypeParameter && aClass2 instanceof PsiTypeParameter) { - return checkTypeParams(method1, method2, classSubstitutor1, classSubstitutor2, type1, type2, (PsiTypeParameter)aClass1, (PsiTypeParameter)aClass2); - } } return null; } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA87672/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA87672/pck/AmbiguousMethodCall.java new file mode 100644 index 000000000000..82bbf00c7a31 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousIDEA87672/pck/AmbiguousMethodCall.java @@ -0,0 +1,23 @@ +package pck; +class BaseMatcher { +} + +class MyMatcher extends BaseMatcher { +} + +class Expectations { + public T with(T t) { + System.out.println("T"); + return null; + } + + public T with(BaseMatcher m) { + return null; + } + + public static void main(String[] args) { + MyMatcher t = new MyMatcher(); + String w = new Expectations().with( t); + } +} + diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/AdvHighlightingJdk7Test.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/AdvHighlightingJdk7Test.java index 7fcd2ba5d361..cac5f150241c 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/AdvHighlightingJdk7Test.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/AdvHighlightingJdk7Test.java @@ -188,4 +188,8 @@ public class AdvHighlightingJdk7Test extends DaemonAnalyzerTestCase { public void testAmbiguousInferenceOrder() throws Exception { doTestAmbiguous(); } + + public void testAmbiguousIDEA87672() throws Exception { + doTestAmbiguous(); + } }