diff --git a/source/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java b/source/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java index 5f7b2f4037f9..7e60387a1706 100644 --- a/source/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java +++ b/source/com/intellij/codeInsight/daemon/impl/analysis/GenericsHighlightUtil.java @@ -13,6 +13,7 @@ import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.util.*; import com.intellij.util.containers.HashMap; +import com.intellij.util.ArrayUtil; import java.text.MessageFormat; import java.util.ArrayList; @@ -362,22 +363,25 @@ public abstract class GenericsHighlightUtil { return null; } - public static HighlightInfo checkClassUsedAsTypeParameter(PsiTypeElement typeElement) { + public static HighlightInfo checkReferenceTypeUsedAsTypeArgument(PsiTypeElement typeElement) { final PsiType type = typeElement.getType(); - if (!(type instanceof PsiPrimitiveType)) return null; + if (type instanceof PsiPrimitiveType || + (type instanceof PsiWildcardType && ((PsiWildcardType)type).getBound() instanceof PsiPrimitiveType)) { + final PsiElement element = new PsiMatcherImpl(typeElement) + .parent(PsiMatcherImpl.hasClass(PsiReferenceParameterList.class)) + .parent(PsiMatcherImpl.hasClass(PsiJavaCodeReferenceElement.class)) + .getElement(); + if (element == null) return null; - final PsiElement element = new PsiMatcherImpl(typeElement) - .parent(PsiMatcherImpl.hasClass(PsiReferenceParameterList.class)) - .parent(PsiMatcherImpl.hasClass(PsiJavaCodeReferenceElement.class)) - .getElement(); - if (element == null) return null; + String description = MessageFormat.format("Type argument cannot be of primitive type", + ArrayUtil.EMPTY_OBJECT_ARRAY); + HighlightInfo highlightInfo = HighlightInfo.createHighlightInfo(HighlightInfoType.ERROR, + typeElement, + description); + return highlightInfo; + } - String description = MessageFormat.format("Type parameter cannot be of primitive type", - new Object[]{}); - HighlightInfo highlightInfo = HighlightInfo.createHighlightInfo(HighlightInfoType.ERROR, - typeElement, - description); - return highlightInfo; + return null; } /** diff --git a/source/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java b/source/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java index 739321c1a102..a050aac32c2e 100644 --- a/source/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java +++ b/source/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java @@ -841,7 +841,7 @@ public class HighlightVisitorImpl extends PsiElementVisitor implements Highlight public void visitTypeElement(PsiTypeElement type) { if (!myHolder.hasErrorResults()) myHolder.add(HighlightUtil.checkIllegalType(type)); - if (!myHolder.hasErrorResults()) myHolder.add(GenericsHighlightUtil.checkClassUsedAsTypeParameter(type)); + if (!myHolder.hasErrorResults()) myHolder.add(GenericsHighlightUtil.checkReferenceTypeUsedAsTypeArgument(type)); if (!myHolder.hasErrorResults()) myHolder.add(GenericsHighlightUtil.checkWildcardUsage(type)); }