/// <inheritdoc/>
        protected override Provider VisitSort(SortProvider provider)
        {
            OnRecursionEntrance(provider);
            var source = VisitCompilable(provider.Source);
            var order  = OnRecursionExit(provider);

            if (source == provider.Source)
            {
                return(provider);
            }
            return(new SortProvider(source, (order == null) ? provider.Order : (DirectionCollection <int>)order));
        }
 /// <summary>
 /// Visits <see cref="SortProvider"/>.
 /// </summary>
 /// <param name="provider">Sort provider.</param>
 protected abstract Provider VisitSort(SortProvider provider);