PsiType (PsiTypeParameter typeParam, PsiType arg) { if (arg == null) return null; PsiClassType[] superTypes = typeParam.getSuperTypes(); PsiType[] erasureTypes = PsiType.createArray(superTypes.length); for (int i = 0; i < superTypes.length; i++) { erasureTypes[i] = TypeConversionUtil.erasure(superTypes[i]); } PsiType[] types = ArrayUtil.append(erasureTypes, arg, PsiType.class); assert types.length != 0; return PsiIntersectionType.createIntersection(types); }