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 8c354a5daa31..89e6caad21ad 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,7 +40,8 @@ public class TypesDistinctProver { } if (type2 instanceof PsiCapturedWildcardType) { - return provablyDistinct((PsiWildcardType)type1, ((PsiCapturedWildcardType)type2).getWildcard()); + return ((PsiWildcardType)type1).isExtends() || + provablyDistinct((PsiWildcardType)type1, ((PsiCapturedWildcardType)type2).getWildcard()); } if (type2 instanceof PsiClassType) { diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/PsiSubstitutorImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/PsiSubstitutorImpl.java index 4634c7eb8f88..feb757c54883 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/PsiSubstitutorImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/PsiSubstitutorImpl.java @@ -156,6 +156,7 @@ public class PsiSubstitutorImpl implements PsiSubstitutor { if (wildcardType.isExtends() != wildcard.isExtends()) { return wildcard.isBounded() ? PsiWildcardType.createUnbounded(wildcardType.getManager()) : newBound; } + if (!wildcard.isBounded()) return PsiWildcardType.createUnbounded(wildcardType.getManager()); } return PsiWildcardType.changeBound(wildcardType, newBound); diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ClassLiteral.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ClassLiteral.java index e47447315a1e..6dc9fd8734f3 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ClassLiteral.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting7/ClassLiteral.java @@ -2,6 +2,7 @@ import java.lang.reflect.*; class Example { private void demo() { - TypeVariable>[] typeParameters = getClass().getTypeParameters(); + TypeVariable>[] typeParameters = getClass().getTypeParameters(); + Object typeParameters1 = (TypeVariable>[]) getClass().getTypeParameters(); } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/UncheckedCasts.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/UncheckedCasts.java index 6b00dc69bfe8..76ab83f8b925 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/UncheckedCasts.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/UncheckedCasts.java @@ -45,7 +45,7 @@ class AllPredicate } public static void foo(SortedMap sourceSortedMap) { - new TreeMap((Comparator) sourceSortedMap.comparator()); + new TreeMap((Comparator) sourceSortedMap.comparator()); } } diff --git a/java/mockJDK-1.7/jre/lib/rt.jar b/java/mockJDK-1.7/jre/lib/rt.jar index 092cc248e10c..b0f53dc9a037 100644 Binary files a/java/mockJDK-1.7/jre/lib/rt.jar and b/java/mockJDK-1.7/jre/lib/rt.jar differ