diff --git a/runtime/src/main/java/org/capnproto/CompletableFutureWrapper.java b/runtime/src/main/java/org/capnproto/CompletableFutureWrapper.java deleted file mode 100644 index bfe3ed4..0000000 --- a/runtime/src/main/java/org/capnproto/CompletableFutureWrapper.java +++ /dev/null @@ -1,25 +0,0 @@ -package org.capnproto; - -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.CompletionStage; - -public class CompletableFutureWrapper extends CompletableFuture { - - private final CompletableFuture other; - - public CompletableFutureWrapper(CompletionStage other) { - this.other = other.toCompletableFuture().whenComplete((value, exc) -> { - if (exc == null) { - this.complete(value); - } - else { - this.completeExceptionally(exc); - } - }); - } - - @Override - public boolean cancel(boolean mayInterruptIfRunning) { - return this.other.cancel(mayInterruptIfRunning); - } -} \ No newline at end of file diff --git a/runtime/src/main/java/org/capnproto/RemotePromise.java b/runtime/src/main/java/org/capnproto/RemotePromise.java index 21d9c7d..4f27e8d 100644 --- a/runtime/src/main/java/org/capnproto/RemotePromise.java +++ b/runtime/src/main/java/org/capnproto/RemotePromise.java @@ -3,7 +3,7 @@ package org.capnproto; import java.util.concurrent.CompletableFuture; public class RemotePromise - extends CompletableFutureWrapper + extends CompletableFuture implements AutoCloseable { final CompletableFuture> response; @@ -11,12 +11,7 @@ public class RemotePromise public RemotePromise(FromPointerReader factory, RemotePromise other) { - super(other.thenApply(response -> response.getAs(factory))); - this.response = other.response.thenApply( - response -> new Response<>( - response.getResults().getAs(factory), - response.getHook())); - this.pipeline = other.pipeline; + this(other.response.thenApply(response -> Response.fromTypeless(factory, response)), other.pipeline); } public RemotePromise(CompletableFuture> promise, @@ -26,8 +21,15 @@ public class RemotePromise public RemotePromise(CompletableFuture> promise, AnyPointer.Pipeline pipeline) { - super(promise.thenApply(Response::getResults)); - this.response = promise; + this.response = promise + .thenApply(response -> { + this.complete(response.getResults()); + return response; + }) + .exceptionallyCompose(exc -> { + this.completeExceptionally(exc); + return CompletableFuture.failedFuture(exc); + }); this.pipeline = pipeline; } @@ -40,13 +42,5 @@ public class RemotePromise public AnyPointer.Pipeline pipeline() { return this.pipeline; } - - public static RemotePromise fromTypeless( - FromPointerReader resultsFactory, - RemotePromise typeless) { - var promise = typeless.response.thenApply( - response -> Response.fromTypeless(resultsFactory, response)); - return new RemotePromise<>(promise, typeless.pipeline); - } }