@Override
  protected void invoke(@NotNull ActionContext context, @NotNull PsiReturnStatement returnStatement, @NotNull ModPsiUpdater updater) {
    PsiExpression returnValue = returnStatement.getReturnValue();
    if (returnValue == null) return;
    CommentTracker ct = new CommentTracker();
    if (myHasSideEffects) {
      returnValue = Objects.requireNonNull(CodeBlockSurrounder.forExpression(returnValue)).surround().getExpression();
      returnStatement = (PsiReturnStatement)returnValue.getParent();
    }
    List<PsiExpression> sideEffects = SideEffectChecker.extractSideEffectExpressions(returnValue);
    sideEffects.forEach(ct::markUnchanged);
    PsiStatement[] statements = StatementExtractor.generateStatements(sideEffects, returnValue);
    if (statements.length > 0) BlockUtils.addBefore(returnStatement, statements);
    PsiElement toDelete = myIsLastStatement ? returnStatement : returnValue;
    ct.deleteAndRestoreComments(toDelete);
  }
@Override
  protected void invoke(@NotNull ActionContext context, @NotNull PsiReturnStatement returnStatement, @NotNull ModPsiUpdater updater)