android/guava/src/com/google/common/util/concurrent/MoreExecutors.java
@GwtIncompatible // TODO
  public static ListeningExecutorService listeningDecorator(ExecutorService delegate) {
    return (delegate instanceof ListeningExecutorService)
        ? (ListeningExecutorService) delegate
        : (delegate instanceof ScheduledExecutorService)
            ? new ScheduledListeningDecorator((ScheduledExecutorService) delegate)
            : new ListeningDecorator(delegate);
  }
@GwtIncompatible // TODO
  public static ListeningExecutorService listeningDecorator(ExecutorService delegate) {
    return (delegate instanceof ListeningExecutorService)
        ? (ListeningExecutorService) delegate
        : (delegate instanceof ScheduledExecutorService)
            ? new ScheduledListeningDecorator((ScheduledExecutorService) delegate)
            : new ListeningDecorator(delegate);
  }
Creates an {@link ExecutorService} whose {@code submit} and {@code invokeAll} methods submit
{@link ListenableFutureTask} instances to the given delegate executor. Those methods, as well
as {@code execute} and {@code invokeAny}, are implemented in terms of calls to {@code
delegate.execute}. All other methods are forwarded unchanged to the delegate. This implies that
the returned {@code ListeningExecutorService} never calls the delegate's {@code submit}, {@code
invokeAll}, and {@code invokeAny} methods, so any special handling of tasks must be implemented
in the delegate's {@code execute} method or by wrapping the returned {@code
ListeningExecutorService}.

<p>If the delegate executor was already an instance of {@code ListeningExecutorService}, it is
returned untouched, and the rest of this documentation does not apply.

@since 10.0