diff --git a/java/java-psi-api/src/com/intellij/psi/PsiCapturedWildcardType.java b/java/java-psi-api/src/com/intellij/psi/PsiCapturedWildcardType.java index 560dcbd948dc..85fae4536e8a 100644 --- a/java/java-psi-api/src/com/intellij/psi/PsiCapturedWildcardType.java +++ b/java/java-psi-api/src/com/intellij/psi/PsiCapturedWildcardType.java @@ -93,7 +93,15 @@ public class PsiCapturedWildcardType extends PsiType { } public PsiType getUpperBound () { - return myExistential.isExtends() ? myExistential.getBound() : PsiType.getJavaLangObject(myContext.getManager(), getResolveScope()); + final PsiType bound = myExistential.getBound(); + if (myExistential.isExtends()) { + return bound; + } + else { + return bound instanceof PsiCapturedWildcardType + ? ((PsiCapturedWildcardType)bound).getUpperBound() + : PsiType.getJavaLangObject(myContext.getManager(), getResolveScope()); + } } public PsiWildcardType getWildcard() { diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA105846.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA105846.java new file mode 100644 index 000000000000..8b9c700484c9 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IDEA105846.java @@ -0,0 +1,5 @@ +class MyClass { + public static void main(Class clazz){ + clazz = (Class) clazz.getSuperclass(); + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java index f2a6e3af1fa7..cf73a8cd1910 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java @@ -205,6 +205,7 @@ public class GenericsHighlightingTest extends LightDaemonAnalyzerTestCase { public void testIDEA99347() { doTest5(false); } public void testIDEA86875() { doTest5(false); } public void testIDEA103760(){ doTest5(false); } + public void testIDEA105846(){ doTest5(false); } public void testWildcardsOnRawTypes() { doTest5(false); } public void testDisableWithinBoundsCheckForSuperWildcards() {