Skip to content

Commit 8d3e98f

Browse files
committed
Widening argument types of Promises.all/any/anyStrict/atLeast/atLeastStrict
1 parent 7ef9ab1 commit 8d3e98f

File tree

3 files changed

+53
-14
lines changed

3 files changed

+53
-14
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,10 @@ class AggregatingPromise<T> extends CompletableFutureWrapper<List<T>> {
3939
final private int minResultsCount;
4040
final private int maxErrorsCount;
4141
final private boolean cancelRemaining;
42-
final private List<CompletionStage<? extends T>> promises;
42+
final private List<? extends CompletionStage<? extends T>> promises;
4343

4444
AggregatingPromise(final int minResultsCount, final int maxErrorsCount, final boolean cancelRemaining,
45-
final List<CompletionStage<? extends T>> promises) {
45+
final List<? extends CompletionStage<? extends T>> promises) {
4646

4747
if (null == promises || promises.isEmpty()) {
4848
throw new IllegalArgumentException("There are should be at least one promise specified");

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

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ public static <T> Promise<List<T>> all(CompletionStage<? extends T>... promises)
125125
}
126126

127127

128-
public static <T> Promise<List<T>> all(List<CompletionStage<? extends T>> promises) {
128+
public static <T> Promise<List<T>> all(List<? extends CompletionStage<? extends T>> promises) {
129129
return all(true, promises);
130130
}
131131
/**
@@ -149,7 +149,7 @@ public static <T> Promise<List<T>> all(boolean cancelRemaining, CompletionStage<
149149
return all(cancelRemaining, Arrays.asList(promises));
150150
}
151151

152-
public static <T> Promise<List<T>> all(boolean cancelRemaining, List<CompletionStage<? extends T>> promises) {
152+
public static <T> Promise<List<T>> all(boolean cancelRemaining, List<? extends CompletionStage<? extends T>> promises) {
153153
return atLeast(null != promises ? promises.size() : 0, 0, cancelRemaining, promises);
154154
}
155155
/**
@@ -171,7 +171,7 @@ public static <T> Promise<T> any(CompletionStage<? extends T>... promises) {
171171
return any(Arrays.asList(promises));
172172
}
173173

174-
public static <T> Promise<T> any(List<CompletionStage<? extends T>> promises) {
174+
public static <T> Promise<T> any(List<? extends CompletionStage<? extends T>> promises) {
175175
return any(true, promises);
176176
}
177177
/**
@@ -196,7 +196,7 @@ public static <T> Promise<T> any(boolean cancelRemaining, CompletionStage<? exte
196196
return any(cancelRemaining, Arrays.asList(promises));
197197
}
198198

199-
public static <T> Promise<T> any(boolean cancelRemaining, List<CompletionStage<? extends T>> promises) {
199+
public static <T> Promise<T> any(boolean cancelRemaining, List<? extends CompletionStage<? extends T>> promises) {
200200
int size = null == promises ? 0 : promises.size();
201201
switch (size) {
202202
case 0:
@@ -234,7 +234,7 @@ public static <T> Promise<T> anyStrict(CompletionStage<? extends T>... promises)
234234
return anyStrict(Arrays.asList(promises));
235235
}
236236

237-
public static <T> Promise<T> anyStrict(List<CompletionStage<? extends T>> promises) {
237+
public static <T> Promise<T> anyStrict(List<? extends CompletionStage<? extends T>> promises) {
238238
return anyStrict(true, promises);
239239
}
240240

@@ -262,7 +262,7 @@ public static <T> Promise<T> anyStrict(boolean cancelRemaining, CompletionStage<
262262
return anyStrict(cancelRemaining, Arrays.asList(promises));
263263
}
264264

265-
public static <T> Promise<T> anyStrict(boolean cancelRemaining, List<CompletionStage<? extends T>> promises) {
265+
public static <T> Promise<T> anyStrict(boolean cancelRemaining, List<? extends CompletionStage<? extends T>> promises) {
266266
int size = null == promises ? 0 : promises.size();
267267
switch (size) {
268268
case 0:
@@ -302,7 +302,7 @@ public static <T> Promise<List<T>> atLeast(int minResultsCount, CompletionStage<
302302
return atLeast(minResultsCount, Arrays.asList(promises));
303303
}
304304

305-
public static <T> Promise<List<T>> atLeast(int minResultsCount, List<CompletionStage<? extends T>> promises) {
305+
public static <T> Promise<List<T>> atLeast(int minResultsCount, List<? extends CompletionStage<? extends T>> promises) {
306306
return atLeast(minResultsCount, true, promises);
307307
}
308308

@@ -332,7 +332,7 @@ public static <T> Promise<List<T>> atLeast(int minResultsCount, boolean cancelRe
332332
return atLeast(minResultsCount, cancelRemaining, Arrays.asList(promises));
333333
}
334334

335-
public static <T> Promise<List<T>> atLeast(int minResultsCount, boolean cancelRemaining, List<CompletionStage<? extends T>> promises) {
335+
public static <T> Promise<List<T>> atLeast(int minResultsCount, boolean cancelRemaining, List<? extends CompletionStage<? extends T>> promises) {
336336
return atLeast(minResultsCount, (promises == null ? 0 : promises.size()) - minResultsCount, cancelRemaining, promises);
337337
}
338338

@@ -360,7 +360,7 @@ public static <T> Promise<List<T>> atLeastStrict(int minResultsCount, Completion
360360
return atLeastStrict(minResultsCount, Arrays.asList(promises));
361361
}
362362

363-
public static <T> Promise<List<T>> atLeastStrict(int minResultsCount, List<CompletionStage<? extends T>> promises) {
363+
public static <T> Promise<List<T>> atLeastStrict(int minResultsCount, List<? extends CompletionStage<? extends T>> promises) {
364364
return atLeastStrict(minResultsCount, true, promises);
365365
}
366366

@@ -391,7 +391,7 @@ public static <T> Promise<List<T>> atLeastStrict(int minResultsCount, boolean ca
391391
return atLeast(minResultsCount, cancelRemaining, Arrays.asList(promises));
392392
}
393393

394-
public static <T> Promise<List<T>> atLeastStrict(int minResultsCount, boolean cancelRemaining, List<CompletionStage<? extends T>> promises) {
394+
public static <T> Promise<List<T>> atLeastStrict(int minResultsCount, boolean cancelRemaining, List<? extends CompletionStage<? extends T>> promises) {
395395
return atLeast(minResultsCount, 0, cancelRemaining, promises);
396396
}
397397

@@ -428,7 +428,7 @@ public static <T> Promise<List<T>> atLeast(int minResultsCount, int maxErrorsCou
428428
}
429429

430430
public static <T> Promise<List<T>> atLeast(int minResultsCount, int maxErrorsCount, boolean cancelRemaining,
431-
List<CompletionStage<? extends T>> promises) {
431+
List<? extends CompletionStage<? extends T>> promises) {
432432

433433
int size = null == promises ? 0 : promises.size();
434434
if (minResultsCount > size) {
@@ -440,7 +440,8 @@ public static <T> Promise<List<T>> atLeast(int minResultsCount, int maxErrorsCou
440440
} else if (minResultsCount == 0) {
441441
return success(Collections.emptyList());
442442
} else if (size == 1) {
443-
return transform(promises.get(0), Collections::singletonList, Promises::wrapMultitargetException);
443+
CompletionStage<? extends T> stage = promises.get(0);
444+
return transform(stage, Collections::singletonList, Promises::wrapMultitargetException);
444445
} else {
445446
return new AggregatingPromise<>(minResultsCount, maxErrorsCount, cancelRemaining, promises);
446447
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package net.tascalate.concurrent;
2+
3+
import static org.junit.Assert.assertTrue;
4+
5+
import java.math.BigDecimal;
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
9+
import org.junit.After;
10+
import org.junit.Before;
11+
import org.junit.Test;
12+
13+
public class PromisesTests {
14+
15+
@Before
16+
public void setUp() {
17+
}
18+
19+
@After
20+
public void tearDown() {
21+
}
22+
23+
@Test
24+
public void testGenericArgs() {
25+
Promise<List<Number>> p = ttt(BigDecimal.valueOf(10), Long.valueOf(11));
26+
List<Number> v = p.join();
27+
assertTrue("Fisrt is BigDecimal ", v.get(0) instanceof BigDecimal);
28+
assertTrue("Second is Long ", v.get(1) instanceof Long);
29+
}
30+
31+
<T, U extends T, V extends T> Promise<List<T>> ttt(U a, V b) {
32+
List<Promise<T>> promises = new ArrayList<>();
33+
promises.add(Promises.success(a));
34+
promises.add(Promises.success(b));
35+
Promise<List<T>> all = Promises.all(promises);
36+
return all;
37+
}
38+
}

0 commit comments

Comments
 (0)