From e2d4d3008105aa1cc868d8300c0af3fd3ce42af3 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Sun, 4 Nov 2012 14:24:44 +0100 Subject: [PATCH] unchecked cast to captured wildcards (IDEA-21547) --- .../impl/analysis/GenericsHighlightUtil.java | 4 +++ .../genericsHighlighting/UncheckedCasts.java | 36 +++++++++++++++++++ 2 files changed, 40 insertions(+) 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 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 a, B b) { + b = (B)a; + System.out.println(b); + } + + public void bar5(A a, B b) { + b = (B)a; + System.out.println(b); + } + + public void bar6(A a, B b) { + b = (B)a; + System.out.println(b); + } +}