code: public CompletableFuture<T> completeAsync(Supplier<? extends T> supplier, Executor executor) {
      if (supplier == null || executor == null)
        throw new NullPointerException();
      executor.execute(new AsyncSupply<T>(this, supplier));
      return this;
    }
docs: Completes this CompletableFuture with the result of the given Supplier function invoked from an
  asynchronous task using the given executor.
  
  @param supplier a function returning the value to be used to complete this CompletableFuture
  @param executor the executor to use for asynchronous execution
  @return this CompletableFuture
  @since 9