void (@NotNull ActionContext context, @NotNull PsiMethodCallExpression call, @NotNull ModPsiUpdater updater) { final PsiTypeParameter[] typeParameters = myMethod.getTypeParameters(); final String typeArguments = "<" + StringUtil.join(typeParameters, parameter -> { final PsiType substituteTypeParam = mySubstitutor.substitute(parameter); LOG.assertTrue(substituteTypeParam != null); return GenericsUtil.eliminateWildcards(substituteTypeParam).getCanonicalText(); }, ", ") + ">"; final PsiExpression expression = call.getMethodExpression().getQualifierExpression(); String withTypeArgsText; if (expression != null) { withTypeArgsText = expression.getText(); } else { if (isInStaticContext(call, null) || myMethod.hasModifierProperty(PsiModifier.STATIC)) { final PsiClass aClass = myMethod.getContainingClass(); LOG.assertTrue(aClass != null); withTypeArgsText = aClass.getQualifiedName(); } else { withTypeArgsText = PsiKeyword.THIS; } } withTypeArgsText += "." + typeArguments + call.getMethodExpression().getReferenceName(); final PsiExpression withTypeArgs = JavaPsiFacade.getElementFactory(context.project()) .createExpressionFromText(withTypeArgsText + call.getArgumentList().getText(), call); call.replace(withTypeArgs); }