diff --git a/java/java-psi-api/src/com/intellij/codeInsight/daemon/impl/analysis/JavaGenericsUtil.java b/java/java-psi-api/src/com/intellij/codeInsight/daemon/impl/analysis/JavaGenericsUtil.java index e01eb710d73d..379d9072927d 100644 --- a/java/java-psi-api/src/com/intellij/codeInsight/daemon/impl/analysis/JavaGenericsUtil.java +++ b/java/java-psi-api/src/com/intellij/codeInsight/daemon/impl/analysis/JavaGenericsUtil.java @@ -74,6 +74,10 @@ public class JavaGenericsUtil { return true; } + if (type instanceof PsiCapturedWildcardType) { + return isReifiableType(((PsiCapturedWildcardType)type).getUpperBound()); + } + return false; } @@ -127,6 +131,9 @@ public class JavaGenericsUtil { if (castType instanceof PsiClassType) { final PsiClassType castClassType = (PsiClassType)castType; operandType = operandType.getDeepComponentType(); + if (operandType instanceof PsiCapturedWildcardType) { + operandType = ((PsiCapturedWildcardType)operandType).getUpperBound(); + } if (!(operandType instanceof PsiClassType)) return false; final PsiClassType operandClassType = (PsiClassType)operandType; diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting8/ReifiableCapturedWildcards.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting8/ReifiableCapturedWildcards.java new file mode 100644 index 000000000000..ca772c9ee3ab --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting8/ReifiableCapturedWildcards.java @@ -0,0 +1,9 @@ +import java.util.List; + +class Test { + public void bar(List list) { + foo(list.get(0)); + } + + private final void foo(K... k) {} +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting8/UncheckedCastWithCapturedWildcards.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting8/UncheckedCastWithCapturedWildcards.java new file mode 100644 index 000000000000..ead8b1eee73b --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting8/UncheckedCastWithCapturedWildcards.java @@ -0,0 +1,8 @@ +import java.util.List; + +class Test { + public void foo(List list, List list2) { + Comparable c1 = (Comparable)list.get(0); + Comparable c2 = (Comparable)list2.get(0); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GenericsHighlighting8Test.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GenericsHighlighting8Test.java index 0c929899f9bc..82d2f2e7151f 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GenericsHighlighting8Test.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/GenericsHighlighting8Test.java @@ -998,4 +998,12 @@ public class GenericsHighlighting8Test extends LightDaemonAnalyzerTestCase { public void testErasureOfReturnTypeOfNonGenericMethod() throws Exception { doTest(); } + + public void testUncheckedCastWithCapturedWildcards() throws Exception { + doTest(true); + } + + public void testReifiableCapturedWildcards() throws Exception { + doTest(true); + } }