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 e96d2c8f93df..f647004465c1 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 @@ -874,23 +874,10 @@ public class GenericsHighlightUtil { @Nullable public static HighlightInfo checkGenericArrayCreation(PsiElement element, PsiType type) { if (type instanceof PsiArrayType) { - PsiType componentType = type.getDeepComponentType(); - if (componentType instanceof PsiClassType) { - final PsiClassType classType = (PsiClassType)componentType; - PsiType[] parameters = classType.getParameters(); - for (PsiType parameter : parameters) { - if (!(parameter instanceof PsiWildcardType) || ((PsiWildcardType)parameter).getBound() != null) { - return HighlightInfo.createHighlightInfo(HighlightInfoType.ERROR, - element, - JavaErrorMessages.message("generic.array.creation")); - } - } - final PsiClass resolved = ((PsiClassType)PsiUtil.convertAnonymousToBaseType(classType)).resolve(); - if (resolved instanceof PsiTypeParameter) { - return HighlightInfo.createHighlightInfo(HighlightInfoType.ERROR, - element, - JavaErrorMessages.message("generic.array.creation")); - } + if (!isReifiableType(((PsiArrayType)type).getComponentType())) { + return HighlightInfo.createHighlightInfo(HighlightInfoType.ERROR, + element, + JavaErrorMessages.message("generic.array.creation")); } } @@ -1179,7 +1166,18 @@ public class GenericsHighlightUtil { if (resolved instanceof PsiTypeParameter) { return false; } - return parameters.length == 0; + if (parameters.length == 0) { + if (resolved != null) { + final PsiClass containingClass = resolved.getContainingClass(); + if (containingClass != null) { + final PsiTypeParameter[] containingClassTypeParameters = containingClass.getTypeParameters(); + if (containingClassTypeParameters.length > 0) { + return false; + } + } + } + return true; + } } return false; diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ReferenceTypeParams.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ReferenceTypeParams.java index 7148d6e6cd1a..0ef970a9c10d 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ReferenceTypeParams.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/genericsHighlighting/ReferenceTypeParams.java @@ -138,4 +138,10 @@ class ClassLiteral { Object c5 = List[].class; Object c6 = List.class; } +} + +class Outer { + final Inner[] i = new Inner[10]; + class Inner { + } } \ No newline at end of file