From b87472673a7a4aa87603f842f6ffced2d55c9de6 Mon Sep 17 00:00:00 2001 From: anna Date: Wed, 23 Oct 2013 19:12:38 +0200 Subject: [PATCH] IDEA-113526 --- .../com/intellij/psi/util/TypesDistinctProver.java | 11 ++++++----- .../genericsHighlighting/IDEA113526.java | 13 +++++++++++++ .../daemon/GenericsHighlightingTest.java | 1 + 3 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA113526.java diff --git a/java/java-psi-api/src/com/intellij/psi/util/TypesDistinctProver.java b/java/java-psi-api/src/com/intellij/psi/util/TypesDistinctProver.java index e09765333fee..c2b09bf50aa7 100644 --- a/java/java-psi-api/src/com/intellij/psi/util/TypesDistinctProver.java +++ b/java/java-psi-api/src/com/intellij/psi/util/TypesDistinctProver.java @@ -40,12 +40,12 @@ public class TypesDistinctProver { if (type2 instanceof PsiClassType && ((PsiClassType)type2).resolve() instanceof PsiTypeParameter && level < 2) return false; if (type1 instanceof PsiWildcardType) { if (type2 instanceof PsiWildcardType) { - return provablyDistinct((PsiWildcardType)type1, (PsiWildcardType)type2); + return provablyDistinct((PsiWildcardType)type1, (PsiWildcardType)type2, true); } if (level > 1) return true; if (type2 instanceof PsiCapturedWildcardType) { - return provablyDistinct((PsiWildcardType)type1, ((PsiCapturedWildcardType)type2).getWildcard()); + return provablyDistinct((PsiWildcardType)type1, ((PsiCapturedWildcardType)type2).getWildcard(), false); } if (type2 instanceof PsiClassType) { @@ -124,7 +124,7 @@ public class TypesDistinctProver { !InheritanceUtil.isInheritorOrSelf(boundClass2, boundClass1, true)); } - public static boolean provablyDistinct(PsiWildcardType type1, PsiWildcardType type2) { + public static boolean provablyDistinct(PsiWildcardType type1, PsiWildcardType type2, boolean rejectInconsistentRaw) { if (type1.isSuper() && type2.isSuper()) return false; if (type1.isExtends() && type2.isExtends()) { final PsiType extendsBound1 = type1.getExtendsBound(); @@ -135,13 +135,14 @@ public class TypesDistinctProver { final PsiClass boundClass1 = PsiUtil.resolveClassInType(extendsBound1); final PsiClass boundClass2 = PsiUtil.resolveClassInType(extendsBound2); if (boundClass1 != null && boundClass2 != null) { - if (extendsBound1 instanceof PsiClassType && extendsBound2 instanceof PsiClassType && + if (rejectInconsistentRaw && + extendsBound1 instanceof PsiClassType && extendsBound2 instanceof PsiClassType && (((PsiClassType)extendsBound1).isRaw() ^ ((PsiClassType)extendsBound2).isRaw())) return true; return proveExtendsBoundsDistinct(type1, type2, boundClass1, boundClass2); } return provablyDistinct(extendsBound1, extendsBound2, 1); } - if (type2.isExtends()) return provablyDistinct(type2, type1); + if (type2.isExtends()) return provablyDistinct(type2, type1, rejectInconsistentRaw); if (type1.isExtends() && type2.isSuper()) { final PsiType extendsBound = type1.getExtendsBound(); final PsiType superBound = type2.getSuperBound(); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA113526.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA113526.java new file mode 100644 index 000000000000..7db1cd89847a --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA113526.java @@ -0,0 +1,13 @@ +import java.util.List; + +public class MyTest { + + static void m(List c) { + List> d = (List>)c; + System.out.println(d); + } + + public static void main(String[] args) { + m(null); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java index 890675dc9588..8fed1be305c0 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java @@ -330,6 +330,7 @@ public class GenericsHighlightingTest extends LightDaemonAnalyzerTestCase { public void testIDEA54197() { doTest5(false); } public void testIDEA71582() { doTest5(false); } public void testIDEA65377() { doTest5(false); } + public void testIDEA113526() { doTest5(true); } public void testJavaUtilCollections_NoVerify() throws Exception { PsiClass collectionsClass = getJavaFacade().findClass("java.util.Collections", GlobalSearchScope.moduleWithLibrariesScope(getModule()));