remove CompletableFutureWrapper

This commit is contained in:
Vaci Koblizek 2020-12-05 14:55:28 +00:00
parent 635bfa0d62
commit 21d3eba0e5
2 changed files with 11 additions and 42 deletions

View file

@ -1,25 +0,0 @@
package org.capnproto;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;
public class CompletableFutureWrapper<T> extends CompletableFuture<T> {
private final CompletableFuture<T> other;
public CompletableFutureWrapper(CompletionStage<T> 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);
}
}

View file

@ -3,7 +3,7 @@ package org.capnproto;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
public class RemotePromise<Results> public class RemotePromise<Results>
extends CompletableFutureWrapper<Results> extends CompletableFuture<Results>
implements AutoCloseable { implements AutoCloseable {
final CompletableFuture<Response<Results>> response; final CompletableFuture<Response<Results>> response;
@ -11,12 +11,7 @@ public class RemotePromise<Results>
public RemotePromise(FromPointerReader<Results> factory, public RemotePromise(FromPointerReader<Results> factory,
RemotePromise<AnyPointer.Reader> other) { RemotePromise<AnyPointer.Reader> other) {
super(other.thenApply(response -> response.getAs(factory))); this(other.response.thenApply(response -> Response.fromTypeless(factory, response)), other.pipeline);
this.response = other.response.thenApply(
response -> new Response<>(
response.getResults().getAs(factory),
response.getHook()));
this.pipeline = other.pipeline;
} }
public RemotePromise(CompletableFuture<Response<Results>> promise, public RemotePromise(CompletableFuture<Response<Results>> promise,
@ -26,8 +21,15 @@ public class RemotePromise<Results>
public RemotePromise(CompletableFuture<Response<Results>> promise, public RemotePromise(CompletableFuture<Response<Results>> promise,
AnyPointer.Pipeline pipeline) { 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; this.pipeline = pipeline;
} }
@ -40,13 +42,5 @@ public class RemotePromise<Results>
public AnyPointer.Pipeline pipeline() { public AnyPointer.Pipeline pipeline() {
return this.pipeline; return this.pipeline;
} }
public static <R> RemotePromise<R> fromTypeless(
FromPointerReader<R> resultsFactory,
RemotePromise<AnyPointer.Reader> typeless) {
var promise = typeless.response.thenApply(
response -> Response.fromTypeless(resultsFactory, response));
return new RemotePromise<>(promise, typeless.pipeline);
}
} }