String (@Nullable PsiType type, int options, @NotNull PsiSubstitutor substitutor) { type = substitutor.substitute(type); if (BitUtil.isSet(options, SHOW_RAW_TYPE)) { type = TypeConversionUtil.erasure(type); } else if (BitUtil.isSet(options, SHOW_RAW_NON_TOP_TYPE)) { if (!(PsiUtil.resolveClassInType(type) instanceof PsiTypeParameter)) { boolean preserveEllipsis = type instanceof PsiEllipsisType; type = TypeConversionUtil.erasure(type); if (preserveEllipsis && type instanceof PsiArrayType) { type = new PsiEllipsisType(((PsiArrayType)type).getComponentType()); } } } if (type == null) return "null"; return !BitUtil.isSet(options, SHOW_FQ_CLASS_NAMES) ? type.getPresentableText(false) : !BitUtil.isSet(options, USE_INTERNAL_CANONICAL_TEXT) ? type.getCanonicalText(false) : type.getInternalCanonicalText(); }