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