diff --git a/src/main/java/org/dataloader/impl/PromisedValues.java b/src/main/java/org/dataloader/impl/PromisedValues.java index 0549e19..df0d374 100644 --- a/src/main/java/org/dataloader/impl/PromisedValues.java +++ b/src/main/java/org/dataloader/impl/PromisedValues.java @@ -35,7 +35,7 @@ public interface PromisedValues { * * @return a new PromisedValues */ - static PromisedValues allOf(List> cfs) { + static PromisedValues allOf(List> cfs) { return PromisedValuesImpl.combineAllOf(cfs); } @@ -68,7 +68,7 @@ static PromisedValues allOf(CompletionStage f1, CompletionStage f2) * * @return a new PromisedValues */ - static PromisedValues allOf(CompletionStage f1, CompletionStage f2, CompletionStage f3) { + static PromisedValues allOf(CompletionStage f1, CompletionStage f2, CompletionStage f3) { return PromisedValuesImpl.combineAllOf(asList(f1, f2, f3)); } @@ -87,7 +87,7 @@ static PromisedValues allOf(CompletionStage f1, CompletionStage f2, Co * * @return a new PromisedValues */ - static PromisedValues allOf(CompletionStage f1, CompletionStage f2, CompletionStage f3, CompletionStage f4) { + static PromisedValues allOf(CompletionStage f1, CompletionStage f2, CompletionStage f3, CompletionStage f4) { return PromisedValuesImpl.combineAllOf(asList(f1, f2, f3, f4)); } diff --git a/src/main/java/org/dataloader/impl/PromisedValuesImpl.java b/src/main/java/org/dataloader/impl/PromisedValuesImpl.java index 5898804..5aff66e 100644 --- a/src/main/java/org/dataloader/impl/PromisedValuesImpl.java +++ b/src/main/java/org/dataloader/impl/PromisedValuesImpl.java @@ -15,11 +15,11 @@ public class PromisedValuesImpl implements PromisedValues { - private final List> futures; + private final List> futures; private final CompletionStage controller; private AtomicReference cause; - private PromisedValuesImpl(List> cs) { + private PromisedValuesImpl(List> cs) { this.futures = nonNull(cs); this.cause = new AtomicReference<>(); List cfs = cs.stream().map(CompletionStage::toCompletableFuture).collect(Collectors.toList()); @@ -36,7 +36,7 @@ private PromisedValuesImpl(PromisedValuesImpl other, CompletionStage co this.controller = controller; } - public static PromisedValues combineAllOf(List> cfs) { + public static PromisedValues combineAllOf(List> cfs) { return new PromisedValuesImpl<>(nonNull(cfs)); } diff --git a/src/test/java/org/dataloader/impl/PromisedValuesImplTest.java b/src/test/java/org/dataloader/impl/PromisedValuesImplTest.java index 1192ffe..cbf8cc8 100644 --- a/src/test/java/org/dataloader/impl/PromisedValuesImplTest.java +++ b/src/test/java/org/dataloader/impl/PromisedValuesImplTest.java @@ -2,9 +2,11 @@ import org.junit.Test; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletionStage; import java.util.concurrent.atomic.AtomicBoolean; import static java.util.Arrays.asList; @@ -13,6 +15,7 @@ import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.Matchers.nullValue; import static org.junit.Assert.assertThat; @@ -178,5 +181,35 @@ public void exceptions_are_captured_and_reported() throws Exception { assertThat(promisedValues.toList(), equalTo(asList(1, null))); assertThat(result, equalTo(asList(1, null))); - } + } + + @Test + public void type_generics_compile_as_expected() throws Exception { + + PromisedValues pvList = PromisedValues.allOf(Collections.singletonList(new CompletableFuture())); + PromisedValues pvList2 = PromisedValues.allOf(Collections.>singletonList(new CompletableFuture<>())); + + assertThat(pvList, notNullValue()); + assertThat(pvList2, notNullValue()); + + PromisedValues pv2args = PromisedValues.allOf(new CompletableFuture<>(), new CompletableFuture<>()); + PromisedValues pv3args = PromisedValues.allOf(new CompletableFuture<>(), new CompletableFuture<>(), new CompletableFuture<>()); + PromisedValues pv4args = PromisedValues.allOf(new CompletableFuture<>(), new CompletableFuture<>(), new CompletableFuture<>(), new CompletableFuture<>()); + + assertThat(pv2args, notNullValue()); + assertThat(pv3args, notNullValue()); + assertThat(pv4args, notNullValue()); + + PromisedValues pvListOfPVs = PromisedValues.allPromisedValues(Arrays.asList(pv2args, pv3args)); + + assertThat(pvListOfPVs, notNullValue()); + + PromisedValues pv2ArgsOfPVs = PromisedValues.allPromisedValues(pv2args, pv3args); + PromisedValues pv3ArgsOfPVs = PromisedValues.allPromisedValues(pv2args, pv3args, pv4args); + PromisedValues pv4ArgsOfPVs = PromisedValues.allPromisedValues(pv2args, pv3args, pv4args, pv2args); + + assertThat(pv2ArgsOfPVs, notNullValue()); + assertThat(pv3ArgsOfPVs, notNullValue()); + assertThat(pv4ArgsOfPVs, notNullValue()); + } } \ No newline at end of file