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 485e3b5b6aac..b5dd1b31eac4 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
@@ -749,6 +749,10 @@ public class GenericsHighlightUtil {
JavaPsiFacade.getInstance(typeParameter.getProject()).getElementFactory().createType(castClass, modifiedSubstitutor);
if (TypeConversionUtil.isAssignable(operandType, otherType, false)) return true;
}
+ for (PsiTypeParameter typeParameter : PsiUtil.typeParametersIterable(operandClass)) {
+ final PsiType operand = operandResult.getSubstitutor().substitute(typeParameter);
+ if (operand instanceof PsiCapturedWildcardType) return true;
+ }
return false;
}
return true;
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/UncheckedCasts.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/UncheckedCasts.java
index 76ab83f8b925..0532d1f1f6ce 100644
--- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/UncheckedCasts.java
+++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/UncheckedCasts.java
@@ -70,3 +70,39 @@ class UncheckedCastFalsePositive {
}
}
+
+class IDEA21547 {
+ class O {}
+ class A<T> {}
+ class B extends A{}
+
+ public void bar(A extends O> a, B b) {
+ b = (B)a;
+ System.out.println(b);
+ }
+
+ public void bar1(A> a, B b) {
+ b = (B)a;
+ System.out.println(b);
+ }
+
+ public void bar2(A> a, B> b) {
+ b = (B)a;
+ System.out.println(b);
+ }
+
+ public void bar4(A extends O> a, B> b) {
+ b = (B)a;
+ System.out.println(b);
+ }
+
+ public void bar5(A super O> a, B> b) {
+ b = (B)a;
+ System.out.println(b);
+ }
+
+ public void bar6(A a, B> b) {
+ b = (B)a;
+ System.out.println(b);
+ }
+}