ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/jsr166e/CompletableFuture.java
(Generate patch)

Comparing jsr166/src/jsr166e/CompletableFuture.java (file contents):
Revision 1.10 by jsr166, Wed Feb 6 07:07:48 2013 UTC vs.
Revision 1.17 by jsr166, Mon May 20 16:16:42 2013 UTC

# Line 55 | Line 55 | import java.util.concurrent.locks.LockSu
55   * Executor} or by default the {@link ForkJoinPool#commonPool()}, of a
56   * function or action that will result in the completion of a new
57   * CompletableFuture. To simplify monitoring, debugging, and tracking,
58 < * all generated asynchronous tasks are instances of the tagging
58 > * all generated asynchronous tasks are instances of the marker
59   * interface {@link AsynchronousCompletionTask}.
60   *
61   * <p><em>jsr166e note: During transition, this class
# Line 380 | Line 380 | public class CompletableFuture<T> implem
380      /* ------------- Async tasks -------------- */
381  
382      /**
383 <     * A tagging interface identifying asynchronous tasks produced by
383 >     * A marker interface identifying asynchronous tasks produced by
384       * {@code async} methods. This may be useful for monitoring,
385       * debugging, and tracking asynchronous activities.
386       */
# Line 1053 | Line 1053 | public class CompletableFuture<T> implem
1053                  (r = a.result) != null &&
1054                  compareAndSet(0, 1)) {
1055                  if ((r instanceof AltResult) &&
1056 <                    (ex = ((AltResult)r).ex) != null)  {
1056 >                    (ex = ((AltResult)r).ex) != null) {
1057                      try {
1058                          t = fn.apply(ex);
1059                      } catch (Throwable rex) {
# Line 1319 | Line 1319 | public class CompletableFuture<T> implem
1319          Object r; Throwable ex, cause;
1320          if ((r = result) == null && (r = waitingGet(true)) == null)
1321              throw new InterruptedException();
1322 <        if (r instanceof AltResult) {
1323 <            if ((ex = ((AltResult)r).ex) != null) {
1324 <                if (ex instanceof CancellationException)
1325 <                    throw (CancellationException)ex;
1326 <                if ((ex instanceof CompletionException) &&
1327 <                    (cause = ex.getCause()) != null)
1328 <                    ex = cause;
1329 <                throw new ExecutionException(ex);
1330 <            }
1331 <            return null;
1322 >        if (!(r instanceof AltResult)) {
1323 >            @SuppressWarnings("unchecked") T tr = (T) r;
1324 >            return tr;
1325          }
1326 <        @SuppressWarnings("unchecked") T tr = (T) r;
1327 <        return tr;
1326 >        if ((ex = ((AltResult)r).ex) == null)
1327 >            return null;
1328 >        if (ex instanceof CancellationException)
1329 >            throw (CancellationException)ex;
1330 >        if ((ex instanceof CompletionException) &&
1331 >            (cause = ex.getCause()) != null)
1332 >            ex = cause;
1333 >        throw new ExecutionException(ex);
1334      }
1335  
1336      /**
# Line 1356 | Line 1355 | public class CompletableFuture<T> implem
1355              throw new InterruptedException();
1356          if ((r = result) == null)
1357              r = timedAwaitDone(nanos);
1358 <        if (r instanceof AltResult) {
1359 <            if ((ex = ((AltResult)r).ex) != null) {
1360 <                if (ex instanceof CancellationException)
1362 <                    throw (CancellationException)ex;
1363 <                if ((ex instanceof CompletionException) &&
1364 <                    (cause = ex.getCause()) != null)
1365 <                    ex = cause;
1366 <                throw new ExecutionException(ex);
1367 <            }
1368 <            return null;
1358 >        if (!(r instanceof AltResult)) {
1359 >            @SuppressWarnings("unchecked") T tr = (T) r;
1360 >            return tr;
1361          }
1362 <        @SuppressWarnings("unchecked") T tr = (T) r;
1363 <        return tr;
1362 >        if ((ex = ((AltResult)r).ex) == null)
1363 >            return null;
1364 >        if (ex instanceof CancellationException)
1365 >            throw (CancellationException)ex;
1366 >        if ((ex instanceof CompletionException) &&
1367 >            (cause = ex.getCause()) != null)
1368 >            ex = cause;
1369 >        throw new ExecutionException(ex);
1370      }
1371  
1372      /**
# Line 1389 | Line 1387 | public class CompletableFuture<T> implem
1387          Object r; Throwable ex;
1388          if ((r = result) == null)
1389              r = waitingGet(false);
1390 <        if (r instanceof AltResult) {
1391 <            if ((ex = ((AltResult)r).ex) != null) {
1392 <                if (ex instanceof CancellationException)
1395 <                    throw (CancellationException)ex;
1396 <                if (ex instanceof CompletionException)
1397 <                    throw (CompletionException)ex;
1398 <                throw new CompletionException(ex);
1399 <            }
1400 <            return null;
1390 >        if (!(r instanceof AltResult)) {
1391 >            @SuppressWarnings("unchecked") T tr = (T) r;
1392 >            return tr;
1393          }
1394 <        @SuppressWarnings("unchecked") T tr = (T) r;
1395 <        return tr;
1394 >        if ((ex = ((AltResult)r).ex) == null)
1395 >            return null;
1396 >        if (ex instanceof CancellationException)
1397 >            throw (CancellationException)ex;
1398 >        if (ex instanceof CompletionException)
1399 >            throw (CompletionException)ex;
1400 >        throw new CompletionException(ex);
1401      }
1402  
1403      /**
# Line 1417 | Line 1414 | public class CompletableFuture<T> implem
1414          Object r; Throwable ex;
1415          if ((r = result) == null)
1416              return valueIfAbsent;
1417 <        if (r instanceof AltResult) {
1418 <            if ((ex = ((AltResult)r).ex) != null) {
1419 <                if (ex instanceof CancellationException)
1423 <                    throw (CancellationException)ex;
1424 <                if (ex instanceof CompletionException)
1425 <                    throw (CompletionException)ex;
1426 <                throw new CompletionException(ex);
1427 <            }
1428 <            return null;
1417 >        if (!(r instanceof AltResult)) {
1418 >            @SuppressWarnings("unchecked") T tr = (T) r;
1419 >            return tr;
1420          }
1421 <        @SuppressWarnings("unchecked") T tr = (T) r;
1422 <        return tr;
1421 >        if ((ex = ((AltResult)r).ex) == null)
1422 >            return null;
1423 >        if (ex instanceof CancellationException)
1424 >            throw (CancellationException)ex;
1425 >        if (ex instanceof CompletionException)
1426 >            throw (CompletionException)ex;
1427 >        throw new CompletionException(ex);
1428      }
1429  
1430      /**
# Line 1792 | Line 1788 | public class CompletableFuture<T> implem
1788       * @param executor the executor to use for asynchronous execution
1789       * @return the new CompletableFuture
1790       */
1795
1791      public <U,V> CompletableFuture<V> thenCombineAsync(CompletableFuture<? extends U> other,
1792                                                         BiFun<? super T,? super U,? extends V> fn,
1793                                                         Executor executor) {
# Line 2531 | Line 2526 | public class CompletableFuture<T> implem
2526          if (r != null && (d == null || d.compareAndSet(0, 1))) {
2527              T t = null; Throwable ex, dx = null;
2528              if (r instanceof AltResult) {
2529 <                if ((ex = ((AltResult)r).ex) != null)  {
2529 >                if ((ex = ((AltResult)r).ex) != null) {
2530                      try {
2531                          t = fn.apply(ex);
2532                      } catch (Throwable rex) {
# Line 2559 | Line 2554 | public class CompletableFuture<T> implem
2554       *
2555       * @param fn the function to use to compute the value of the
2556       * returned CompletableFuture
2562
2557       * @return the new CompletableFuture
2558       */
2559      public <U> CompletableFuture<U> handle(BiFun<? super T, Throwable, ? extends U> fn) {
# Line 2633 | Line 2627 | public class CompletableFuture<T> implem
2627       */
2628      public boolean isCancelled() {
2629          Object r;
2630 <        return ((r = result) != null &&
2631 <                (r instanceof AltResult) &&
2638 <                (((AltResult)r).ex instanceof CancellationException));
2630 >        return ((r = result) instanceof AltResult) &&
2631 >            (((AltResult)r).ex instanceof CancellationException);
2632      }
2633  
2634      /**

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines