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 4f479fc41c7f..8c354a5daa31 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 @@ -205,8 +205,9 @@ public class TypesDistinctProver { else if (bound instanceof PsiClassType) { return !possibleClasses.contains(((PsiClassType)bound).resolve()); } - else if (bound instanceof PsiWildcardType && !((PsiWildcardType)bound).isBounded()) { - return false; + else if (bound instanceof PsiWildcardType) { + final PsiType boundBound = ((PsiWildcardType)bound).getBound(); + return boundBound != null && !boundBound.equals(type); } return true; } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA63291.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA63291.java new file mode 100644 index 000000000000..3343db755a2a --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA63291.java @@ -0,0 +1,57 @@ +import java.util.Comparator; +import java.util.Set; + +public class CastError { + public void foo(Comparator comparator) throws Exception { + MyComparator comparator1 = (MyComparator) comparator; + } + + public void foo1(Comparator comparator) throws Exception { + MyComparator comparator1 = (MyComparator) comparator; + } + + public void foo2(Comparator comparator) throws Exception { + MyComparator comparator1 = (MyComparator) comparator; + } + + public void foo3(Comparator comparator) throws Exception { + MyComparator comparator1 = (MyComparator) comparator; + } + + public void foo4(Comparator comparator) throws Exception { + MyComparator comparator1 = (MyComparator) comparator; + } + + public void foo5(Comparator comparator) throws Exception { + MyComparator comparator1 = (MyComparator) comparator; + } + + //--||--||--||--||--||--||--||--||--||--||--||--||--||--||--||--||--||--||-- + + public void sfoo(Set> comparator) throws Exception { + Set comparator1 = (Set) comparator; + } + + public void sfoo1(Set> comparator) throws Exception { + Set comparator1 = (Set) comparator; + } + + public void sfoo2(Set> comparator) throws Exception { + Set comparator1 = (Set) comparator; + } + + public void sfoo3(Set> comparator) throws Exception { + Set comparator1 = (Set) comparator; + } + + public void sfoo4(Set> comparator) throws Exception { + Set comparator1 = (Set) comparator; + } + + public void sfoo5(Set> comparator) throws Exception { + Set comparator1 = (Set) comparator; + } +} + +abstract class MyComparator implements Comparator { +} \ 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 09585c710947..d7adafea0016 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java @@ -130,6 +130,7 @@ public class GenericsHighlightingTest extends LightDaemonAnalyzerTestCase { public void testIDEA66311_16() throws Exception { doTest(false);} public void testIDEA76283() throws Exception {doTest(false);} public void testIDEA74899() throws Exception {doTest(false);} + public void testIDEA63291() throws Exception {doTest(false);} public void testJavaUtilCollections_NoVerify() throws Exception { PsiClass collectionsClass = getJavaFacade().findClass("java.util.Collections", GlobalSearchScope.moduleWithLibrariesScope(getModule()));