String (PsiReferenceExpression referenceExpression) { final String referenceName = referenceExpression.getReferenceName(); final PsiElement parent = referenceExpression.getParent(); if (!(parent instanceof PsiExpressionList)) { return getUntypedCollectionsMethodCallText(referenceName); } final PsiType type = ExpectedTypeUtils.findExpectedType(referenceExpression, false); if (!(type instanceof PsiClassType classType)) { return getUntypedCollectionsMethodCallText(referenceName); } final PsiType[] parameterTypes = classType.getParameters(); boolean useTypeParameter = false; final String[] canonicalTexts = new String[parameterTypes.length]; for (int i = 0, parameterTypesLength = parameterTypes.length; i < parameterTypesLength; i++) { final PsiType parameterType = parameterTypes[i]; if (parameterType instanceof PsiWildcardType wildcardType) { final PsiType bound = wildcardType.getBound(); if (bound != null) { if (!bound.equalsToText(CommonClassNames.JAVA_LANG_OBJECT)) { useTypeParameter = true; } canonicalTexts[i] = bound.getCanonicalText(); } else { canonicalTexts[i] = CommonClassNames.JAVA_LANG_OBJECT; } } else { if (!parameterType.equalsToText(CommonClassNames.JAVA_LANG_OBJECT)) { useTypeParameter = true; } canonicalTexts[i] = parameterType.getCanonicalText(); } } return useTypeParameter ? "Collections.<" + StringUtil.join(canonicalTexts, ",") + '>' + getCollectionsMethodCallName(referenceName) : getUntypedCollectionsMethodCallText(referenceName); }