@Override
  protected void invoke(@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);
  }
@Override
  protected void invoke(@NotNull ActionContext context, @NotNull PsiMethodCallExpression call, @NotNull ModPsiUpdater updater)