From 8fe1604bd17b54044389182a21a6a075ec8be0a8 Mon Sep 17 00:00:00 2001 From: anna Date: Sun, 8 Apr 2012 14:05:51 +0200 Subject: [PATCH] show warning on type parameter declaration if it lead to multiple methods with same erasure (java7 only) --- .../daemon/impl/analysis/GenericsHighlightUtil.java | 6 ++++++ .../pck/AmbiguousMethodCall.java | 2 +- .../pck/AmbiguousMethodCall.java | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java index 95a4eca5463a..25402c9020f7 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java @@ -372,6 +372,7 @@ public class GenericsHighlightUtil { } } + @Nullable public static HighlightInfo checkElementInTypeParameterExtendsList(PsiReferenceList referenceList, JavaResolveResult resolveResult, PsiElement element) { PsiClass aClass = (PsiClass)referenceList.getParent(); final PsiJavaCodeReferenceElement[] referenceElements = referenceList.getReferenceElements(); @@ -393,6 +394,11 @@ public class GenericsHighlightUtil { IntentionAction fix = QUICK_FIX_FACTORY.createExtendsListFix(aClass, type, false); QuickFixAction.registerQuickFixAction(errorResult, fix, null); } + if (errorResult == null && JavaVersionService.getInstance().isAtLeast(referenceList, JavaSdkVersion.JDK_1_7) && + referenceElements.length > 1) { + //todo suppress erased methods which come from the same class + return checkOverrideEquivalentMethods(aClass); + } return errorResult; } public static HighlightInfo checkInterfaceMultipleInheritance(PsiClass aClass) { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousMultipleTypeParamExtends1/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousMultipleTypeParamExtends1/pck/AmbiguousMethodCall.java index 92c2135a7247..8cfbc7d3a466 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousMultipleTypeParamExtends1/pck/AmbiguousMethodCall.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousMultipleTypeParamExtends1/pck/AmbiguousMethodCall.java @@ -9,7 +9,7 @@ interface IB{ void foo(A x); } class C { - void bar(T x, A y){ + <T extends IA & IB> void bar(T x, A y){ x.foo(y); } } \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousMultipleTypeParamExtends2/pck/AmbiguousMethodCall.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousMultipleTypeParamExtends2/pck/AmbiguousMethodCall.java index ed65deaea70d..c8c3ba18c7da 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousMultipleTypeParamExtends2/pck/AmbiguousMethodCall.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ambiguousMultipleTypeParamExtends2/pck/AmbiguousMethodCall.java @@ -9,7 +9,7 @@ interface IB{ void foo(A> x); } class C { - void bar(T x, A> y){ + <T extends IB & IA> void bar(T x, A> y){ x.foo(y); } } \ No newline at end of file