docs: public static <T,U extends T, V extends T> T with(
              @DelegatesTo.Target("self") U self,
              boolean returning,
              @DelegatesTo(value=DelegatesTo.Target.class,
                      target="self",
                      strategy=Closure.DELEGATE_FIRST)
              @ClosureParams(FirstParam.class)
              Closure<T> closure) {
          @SuppressWarnings("unchecked")
          final Closure<V> clonedClosure = (Closure<V>) closure.clone();
          clonedClosure.setResolveStrategy(Closure.DELEGATE_FIRST);
          clonedClosure.setDelegate(self);
          V result = clonedClosure.call(self);
          return returning ? self : result;
      }