docs: public static <I, O> ListenableFuture<O> transform(ListenableFuture<I> input,
        AsyncFunction<? super I, ? extends O> function,
        Executor executor) {
      checkNotNull(executor);
      ChainingListenableFuture<I, O> output =
          new ChainingListenableFuture<I, O>(function, input);
      input.addListener(rejectionPropagatingRunnable(output, output, executor), directExecutor());
      return output;
    }