@Override
      public @NotNull <TT> TraversalArgs<TT> intercept(@NotNull TraversalArgs<TT> args) {
        final Function<? super TT, ? extends Iterable<? extends TT>> tree = args.tree;
        final Condition<? super TT> inRangeCondition = (Condition<? super TT>)rangeCondition;
        final Condition<? super TT> notInRangeCondition = (Condition<? super TT>)not(rangeCondition);
        final class WrappedTree implements Function<TT, Iterable<? extends TT>> {
          final Condition<? super T> inner = rangeCondition;

          @Override
          public Iterable<? extends TT> fun(TT t) {
            return JBIterable.from(tree.fun(t))
              .skipWhile(notInRangeCondition)
              .takeWhile(inRangeCondition);
          }
        }
        if (tree instanceof WrappedTree && Comparing.equal(rangeCondition, ((WrappedTree)tree).inner)) {
          return args;
        }
        WrappedTree wrappedTree = new WrappedTree();
        return new TraversalArgs<>(JBIterable.from(args.roots).filter(inRangeCondition), wrappedTree);
      }
@Override
      public @NotNull <TT> TraversalArgs<TT> intercept(@NotNull TraversalArgs<TT> args)