class DefaultCompletableAsyncCompletion implements CompletableAsyncCompletion {

  @Override
  public AsyncCompletion thenCombine(AsyncCompletion other) {
    requireNonNull(other);
    CompletableAsyncCompletion completion = AsyncCompletion.incomplete();
    future.whenComplete((v, ex1) -> {
      if (ex1 == null) {
        try {
          other.whenComplete(ex3 -> {
            if (ex3 == null) {
              completion.complete();
            } else {
              completion.completeExceptionally(ex3);
            }
          });
        } catch (Throwable ex2) {
          completion.completeExceptionally(ex2);
        }
      } else {
        completion.completeExceptionally(ex1);
      }
    });
    return completion;
  }

    DefaultCompletableAsyncCompletion();
    DefaultCompletableAsyncCompletion(CompletableFuture<Void> future);

}