String () { final String qualifiedName = StringUtil.getQualifiedName(myPackageName, myClassName); final StringBuilder returnTypeBuffer = new StringBuilder(qualifiedName); if (!myTypeParameters.isEmpty()) { returnTypeBuffer.append('<'); returnTypeBuffer.append(StringUtil.join(myTypeParameters, typeParameter -> { final String paramName = typeParameter.getName(); LOG.assertTrue(paramName != null); return paramName; }, ",")); returnTypeBuffer.append('>'); } else if (myDelegateField != null) { final PsiType type = myDelegateField.getType(); final PsiType returnType = myMethod.getReturnType(); final PsiClass containingClass = myDelegateField.getContainingClass(); final PsiType inferredType = getInferredType(type, returnType, containingClass, myMethod); if (inferredType != null) { returnTypeBuffer.append("<").append(inferredType.getCanonicalText()).append(">"); } } return returnTypeBuffer.toString(); }