Skip to content

Commit d99f6ff

Browse files
committed
Refctoring of internal LinkedCompletion usages
1 parent b9a6fe4 commit d99f6ff

File tree

4 files changed

+22
-17
lines changed

4 files changed

+22
-17
lines changed

src/main/java/net/tascalate/concurrent/ConfigurableDependentPromise.java

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package net.tascalate.concurrent;
1717

1818
import static net.tascalate.concurrent.SharedFunctions.cancelPromise;
19+
import static net.tascalate.concurrent.LinkedCompletion.FutureCompletion;
1920

2021
import java.time.Duration;
2122
import java.util.Arrays;
@@ -642,7 +643,7 @@ public Promise<T> raw() {
642643
}
643644

644645
protected Promise<T> cancellablePromiseOf(Promise<T> original) {
645-
return new MultitargetCancellablePromise<>(original, cancellableOrigins);
646+
return new UndecoratedCancellationPromise<>(original, cancellableOrigins);
646647
}
647648

648649
@Override
@@ -654,17 +655,7 @@ public CompletableFuture<T> toCompletableFuture(boolean enlistOrigin) {
654655
if (!enlistOrigin) {
655656
return delegate.toCompletableFuture();
656657
} else {
657-
CompletableFuture<T> result = new CompletableFuture<T>() {
658-
@Override
659-
public boolean cancel(boolean mayInterruptIfRunning) {
660-
if (super.cancel(mayInterruptIfRunning)) {
661-
ConfigurableDependentPromise.this.cancel(mayInterruptIfRunning);
662-
return true;
663-
} else {
664-
return false;
665-
}
666-
}
667-
};
658+
FutureCompletion<T> result = new FutureCompletion<T>().dependsOn(this);
668659
whenComplete((r, e) -> {
669660
if (null != e) {
670661
result.completeExceptionally(e);
@@ -715,9 +706,9 @@ private static boolean identicalSets(Set<?> a, Set<?> b) {
715706
}
716707

717708

718-
static class MultitargetCancellablePromise<T> extends AbstractPromiseDecorator<T, Promise<T>> {
709+
static class UndecoratedCancellationPromise<T> extends AbstractPromiseDecorator<T, Promise<T>> {
719710
private final CompletionStage<?>[] dependent;
720-
MultitargetCancellablePromise(Promise<T> original, CompletionStage<?>[] dependent) {
711+
UndecoratedCancellationPromise(Promise<T> original, CompletionStage<?>[] dependent) {
721712
super(original);
722713
this.dependent = dependent;
723714
}
@@ -740,6 +731,7 @@ public Promise<T> raw() {
740731

741732
@Override
742733
protected <U> Promise<U> wrap(CompletionStage<U> original) {
734+
// No wrapping by definition
743735
return (Promise<U>)original;
744736
}
745737
}

src/main/java/net/tascalate/concurrent/LinkedCompletion.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@ static final class FutureCompletion<T> extends LinkedCompletion<T, Future<?>> {
5151
boolean cancelDependency(boolean mayInterruptIfRunning) {
5252
return dependency.cancel(mayInterruptIfRunning);
5353
}
54+
55+
@Override
56+
FutureCompletion<T> dependsOn(Future<?> dependency) {
57+
return (FutureCompletion<T>)super.dependsOn(dependency);
58+
}
5459
};
5560

5661

@@ -59,6 +64,11 @@ static final class StageCompletion<T> extends LinkedCompletion<T, CompletionStag
5964
boolean cancelDependency(boolean mayInterruptIfRunning) {
6065
return cancelPromise(dependency, mayInterruptIfRunning);
6166
}
67+
68+
@Override
69+
StageCompletion<T> dependsOn(CompletionStage<?> dependency) {
70+
return (StageCompletion<T>)super.dependsOn(dependency);
71+
}
6272
};
6373
}
6474

src/main/java/net/tascalate/concurrent/Promises.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -560,15 +560,15 @@ private static <T> void pollOnce(Callable<Optional<? extends T>> codeBlock,
560560
private static <T, U> Promise<T> transform(CompletionStage<U> original,
561561
Function<? super U, ? extends T> resultMapper,
562562
Function<? super Throwable, ? extends Throwable> errorMapper) {
563-
StageCompletion<T> result = new StageCompletion<>();
563+
StageCompletion<T> result = new StageCompletion<T>().dependsOn(original);
564564
original.whenComplete((r, e) -> {
565565
if (null == e) {
566566
result.complete( resultMapper.apply(r) );
567567
} else {
568568
result.completeExceptionally( errorMapper.apply(e) );
569569
}
570570
});
571-
return result.dependsOn(original).toPromise();
571+
return result.toPromise();
572572
}
573573

574574
private static <T> T extractFirstNonNull(Collection<? extends T> collection) {

src/test/java/net/tascalate/concurrent/DependentPromiseTests.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,13 @@
1515
*/
1616
package net.tascalate.concurrent;
1717

18+
import static org.junit.Assert.assertFalse;
19+
import static org.junit.Assert.assertTrue;
20+
1821
import java.util.concurrent.CompletableFuture;
1922
import java.util.concurrent.atomic.AtomicInteger;
23+
2024
import org.junit.After;
21-
import static org.junit.Assert.*;
2225
import org.junit.Before;
2326
import org.junit.Test;
2427

0 commit comments

Comments
 (0)