docs: public static <V> void addCallback(
        final ListenableFuture<V> future,
        final FutureCallback<? super V> callback,
        Executor executor) {
      Preconditions.checkNotNull(callback);
      Runnable callbackListener =
          new Runnable() {
            @Override
            public void run() {
              final V value;
              try {
                value = getDone(future);
              } catch (ExecutionException e) {
                callback.onFailure(e.getCause());
                return;
              } catch (RuntimeException e) {
                callback.onFailure(e);
                return;
              } catch (Error e) {
                callback.onFailure(e);
                return;
              }
              callback.onSuccess(value);
            }
          };
      future.addListener(callbackListener, executor);
    }