void (@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); }