@Override public T get() throws InterruptedException, ExecutionException { executeIfNotStarted(); return super.get(); } }
@Override public T get(long arg0, TimeUnit arg1) throws InterruptedException, ExecutionException, TimeoutException { try { return delegateFuture.get(arg0, arg1); } catch (CancellationException e) { prepareCancellationException(e); throw e; } }
@Override public StackTraceElement[] getRunningStackTrace() { ListenableFuture<?> delegateFuture = this.delegateFuture; if (delegateFuture != null) { StackTraceElement[] result = delegateFuture.getRunningStackTrace(); if (result != null) { return result; } } return super.getRunningStackTrace(); }
@Test public void makeSuccessListFutureWithCancelErrorTest() throws ExecutionException, InterruptedException, TimeoutException { List<ListenableFuture<?>> futures = makeFutures(TEST_QTY, -1); SettableListenableFuture<?> cancelFuture = new SettableListenableFuture<>(); cancelFuture.cancel(false); futures.add(cancelFuture); ListenableFuture<List<ListenableFuture<?>>> f = FutureUtils.makeSuccessListFuture(futures); verifyCompleteFuture(f, futures); verifyAllIncluded(futures, f.get(), cancelFuture); }
@Test public void flatMapCancelationExceptionMessageAlreadyDoneTest() throws InterruptedException, TimeoutException { String msg = StringUtils.makeRandomString(5); SettableListenableFuture<Void> slf = new CancelMessageTestSettableListenableFuture(msg); slf.cancel(false); ListenableFuture<Void> mappedFuture = slf.flatMap((v) -> FutureUtils.immediateResultFuture(null)); verifyCancelationExceptionMessageOnGet(msg, mappedFuture); verifyCancelationExceptionMessageInCallback(msg, mappedFuture); }
private static void makeCompleteListFutureTest(int errorIndex) throws InterruptedException, TimeoutException, ExecutionException { List<ListenableFuture<?>> futures = makeFutures(TEST_QTY, errorIndex); ListenableFuture<List<ListenableFuture<?>>> f = FutureUtils.makeCompleteListFuture(futures); verifyCompleteFuture(f, futures); verifyAllIncluded(futures, f.get(), null); }
private static void makeCompleteFutureTest(int errorIndex) throws InterruptedException, TimeoutException, ExecutionException { List<ListenableFuture<?>> futures = makeFutures(TEST_QTY, errorIndex); ListenableFuture<?> f = FutureUtils.makeCompleteFuture(futures); verifyCompleteFuture(f, futures); assertNull(f.get()); }
@Override public boolean cancel(boolean interrupt) { // we need a copy in case canceling clears out the futures ArrayList<ListenableFuture<? extends T>> futures = this.futures; if (super.cancel(interrupt)) { FutureUtils.cancelIncompleteFutures(futures, interrupt); return true; } else { return false; } }
@Override public ListenableFuture<Object> makeWithFailure(Exception t) { ListenableFutureTask<Object> lft = new ExecuteOnGetFutureTask<>(() -> { throw t; }); lft.run(); return lft; }
@Override public <R> ListenableFuture<R> map(Function<? super T, ? extends R> mapper, Executor executor) { return InternalFutureUtils.transform(this, this::getCancellationExceptionMessage, mapper, true, executor, null); }
@Override public <R> ListenableFuture<R> flatMap(Function<? super T, ListenableFuture<R>> mapper, Executor executor, ListenerOptimizationStrategy optimizeExecution) { return InternalFutureUtils.flatTransform(this, this::getCancellationExceptionMessage, mapper, executor, optimizeExecution); }
@Override public T get() throws InterruptedException, ExecutionException { try { return delegateFuture.get(); } catch (CancellationException e) { prepareCancellationException(e); throw e; } }
@Override public StackTraceElement[] getRunningStackTrace() { ListenableFuture<?> delegateFuture = this.delegateFuture; if (delegateFuture != null) { StackTraceElement[] result = delegateFuture.getRunningStackTrace(); if (result != null) { return result; } } return super.getRunningStackTrace(); }
@Override public boolean cancel(boolean interrupt) { // we need a copy in case canceling clears out the futures ArrayList<ListenableFuture<? extends T>> futures = this.futures; if (super.cancel(interrupt)) { FutureUtils.cancelIncompleteFutures(futures, interrupt); return true; } else { return false; } }
@Override public T get() throws InterruptedException, ExecutionException { executeIfNotStarted(); return super.get(); } }
@Override public <T> ListenableFuture<T> makeWithResult(T result) { ListenableFutureTask<T> lft = new ExecuteOnGetFutureTask<>(() -> result); lft.run(); return lft; } }
@Override public T get(long arg0, TimeUnit arg1) throws InterruptedException, ExecutionException, TimeoutException { try { return delegateFuture.get(arg0, arg1); } catch (CancellationException e) { prepareCancellationException(e); throw e; } }
@Override public T get() throws InterruptedException, ExecutionException { try { return delegateFuture.get(); } catch (CancellationException e) { prepareCancellationException(e); throw e; } }