private void RollbackEvent(BaseEvent @event, bool undoing)
{
ExecuteNoTrack(() => {
var reverse = @event.Rollback();
if (reverse == null) return;
if (reverse is BatchEvent)
{
if (!(@event is BatchEvent))
throw new InvalidOperationException("Must not return BatchEvent in Rollback()");
reverse = ProcessBatch((BatchEvent) reverse);
if (reverse == null) return;
}
(undoing ? _redoStack : _undoStack).Push(reverse);
});
}