From ca8c474bf621e26fdfa02682fb1ce7b0636dd644 Mon Sep 17 00:00:00 2001 From: anna Date: Tue, 17 Apr 2012 12:08:52 +0200 Subject: [PATCH] illegal generic type for instanceof checks (IDEA-76997) --- .../impl/analysis/GenericsHighlightUtil.java | 7 +++++ .../IllegalGenericTypeInInstanceof.java | 27 +++++++++++++++++++ .../daemon/GenericsHighlightingTest.java | 1 + 3 files changed, 35 insertions(+) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IllegalGenericTypeInInstanceof.java 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 9186a5ba227c..23eb2f2969cc 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 @@ -973,6 +973,13 @@ public class GenericsHighlightUtil { return HighlightInfo.createHighlightInfo(HighlightInfoType.ERROR, ref, JavaErrorMessages.message("generics.cannot.instanceof.type.parameters")); } + if (resolved instanceof PsiClass) { + final PsiClass containingClass = ((PsiClass)resolved).getContainingClass(); + if (containingClass != null && ref.getQualifier() == null && containingClass.getTypeParameters().length > 0) { + return HighlightInfo.createHighlightInfo(HighlightInfoType.ERROR, typeElement, JavaErrorMessages.message("illegal.generic.type.for.instanceof")); + } + } + final PsiType[] parameters = ref.getTypeParameters(); for (PsiType parameterType : parameters) { if (parameterType != null && diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IllegalGenericTypeInInstanceof.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IllegalGenericTypeInInstanceof.java new file mode 100644 index 000000000000..bb183a1c2622 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/IllegalGenericTypeInInstanceof.java @@ -0,0 +1,27 @@ +class A { + public void foo(Object object) { + if (object instanceof B) {} + if (object instanceof A.B) {} + if (object instanceof A.B) {} + if (object instanceof A) {} + if (object instanceof A) {} + if (object instanceof A) {} + if (object instanceof A[]) {} + if (object instanceof B[]) {} + if (object instanceof A.B[]) {} + } + + private class B { + } +} + +class A1 { + public void foo(Object object) { + if (object instanceof B1) {} + if (object instanceof A1.B1) {} + if (object instanceof B1[]) {} + } + + private class B1 { + } +} \ No newline at end of file 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 246a97b67eb6..e86b90d047ac 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/GenericsHighlightingTest.java @@ -132,6 +132,7 @@ public class GenericsHighlightingTest extends LightDaemonAnalyzerTestCase { public void testIDEA74899() throws Exception {doTest(false);} public void testIDEA63291() throws Exception {doTest(false);} public void testIDEA72912() throws Exception {doTest(false);} + public void testIllegalGenericTypeInInstanceof() throws Exception {doTest(false);} public void testJavaUtilCollections_NoVerify() throws Exception { PsiClass collectionsClass = getJavaFacade().findClass("java.util.Collections", GlobalSearchScope.moduleWithLibrariesScope(getModule()));