code: public final <U> CompletionStage<U> supplyAsync(Supplier<U> supplier, Executor executor) {
          Objects.requireNonNull(supplier, "supplier must not be null");
          return completedStage(null).thenApplyAsync((ignored) -> supplier.get(), executor);
      }
docs: Returns a new CompletionStage that is asynchronously completed
  by a task running in the given executor with the value obtained
  by calling the given Supplier. Subsequent completion stages will
  use defaultAsyncExecutor as their default executor.
  
  @param supplier a function returning the value to be used
  to complete the returned CompletionStage
  @param executor the executor to use for asynchronous execution
  @param <U> the function's return type
  @return the new CompletionStage