code: @CheckReturnValue
      @BackpressureSupport(BackpressureKind.UNBOUNDED_IN)
      @SchedulerSupport(SchedulerSupport.NONE)
      public static <T> Completable fromPublisher(final Publisher<T> publisher) {
          ObjectHelper.requireNonNull(publisher, "publisher is null");
          return RxJavaPlugins.onAssembly(new CompletableFromPublisher<T>(publisher));
      }
docs: Returns a Completable instance that subscribes to the given publisher, ignores all values and
  emits only the terminal event.
  <p>
  <img width="640" height="422" src="https://raw.github.com/wiki/ReactiveX/RxJava/images/rx-operators/Completable.fromPublisher.png" alt="">
  <p>
  The {@link Publisher} must follow the
  <a href="https://github.com/reactive-streams/reactive-streams-jvm#reactive-streams">Reactive-Streams specification</a>.
  Violating the specification may result in undefined behavior.
  <p>
  If possible, use {@link #create(CompletableOnSubscribe)} to create a
  source-like {@code Completable} instead.
  <p>
  Note that even though {@link Publisher} appears to be a functional interface, it
  is not recommended to implement it through a lambda as the specification requires
  state management that is not achievable with a stateless lambda.
  <dl>
  <dt><b>Backpressure:</b></dt>
  <dd>The returned {@code Completable} honors the backpressure of the downstream consumer
  and expects the other {@code Publisher} to honor it as well.</dd>
  <dt><b>Scheduler:</b></dt>
  <dd>{@code fromPublisher} does not operate by default on a particular {@link Scheduler}.</dd>
  </dl>
  @param <T> the type of the publisher
  @param publisher the Publisher instance to subscribe to, not null
  @return the new Completable instance
  @throws NullPointerException if publisher is null
  @see #create(CompletableOnSubscribe)