@Override public StackTraceElement[] getRunningStackTrace() { return futureImp.getRunningStackTrace(); } }
@Override public StackTraceElement[] getRunningStackTrace() { return futureImp.getRunningStackTrace(); } }
@Override public StackTraceElement[] getRunningStackTrace() { return futureImp.getRunningStackTrace(); } }
@Override public StackTraceElement[] getRunningStackTrace() { return delegateFuture.getRunningStackTrace(); }
@Override public StackTraceElement[] getRunningStackTrace() { return futureImp.getRunningStackTrace(); } }
@Override public StackTraceElement[] getRunningStackTrace() { return delegateFuture.getRunningStackTrace(); }
@Override public boolean cancel(boolean interrupt) { StackTraceElement[] cancelStack = delegateFuture.getRunningStackTrace(); // must get stack BEFORE cancel if (delegateFuture.cancel(interrupt)) { this.cancelStack = cancelStack; return true; } else { return false; } }
@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) { StackTraceElement[] cancelStack = delegateFuture.getRunningStackTrace(); // must get stack BEFORE cancel if (delegateFuture.cancel(interrupt)) { this.cancelStack = cancelStack; return true; } else { return false; } }
@Override public StackTraceElement[] getRunningStackTrace() { ListenableFuture<?> delegateFuture = this.delegateFuture; if (delegateFuture != null) { StackTraceElement[] result = delegateFuture.getRunningStackTrace(); if (result != null) { return result; } } return super.getRunningStackTrace(); }
public static void getRunningStackTraceTest(ListenableFuture<?> testFuture) { assertNull(testFuture.getRunningStackTrace()); } }
@Test public void getMappedRunningStackTraceTest() { ListenableFuture<Object> mappedFuture = slf.map((o) -> o).map((o) -> null); assertNull(mappedFuture.getRunningStackTrace()); slf.setRunningThread(Thread.currentThread()); StackTraceElement[] stack = mappedFuture.getRunningStackTrace(); assertEquals(this.getClass().getName(), stack[4].getClassName()); slf.setResult(null); assertNull(mappedFuture.getRunningStackTrace()); }
@Test public void getFlatMappedRunningStackTraceTest() { ListenableFuture<Object> mappedFuture = slf.flatMap((o) -> FutureUtils.immediateResultFuture(o)) .flatMap((o) -> FutureUtils.immediateResultFuture(null)); assertNull(mappedFuture.getRunningStackTrace()); slf.setRunningThread(Thread.currentThread()); StackTraceElement[] stack = mappedFuture.getRunningStackTrace(); assertEquals(this.getClass().getName(), stack[4].getClassName()); slf.setResult(null); assertNull(mappedFuture.getRunningStackTrace()); }
@Test public void executeWhileGetRunningStackTraceTest() { SettableListenableFuture<Boolean> startingFuture = new SettableListenableFuture<>(); SettableListenableFuture<Boolean> runningFuture = new SettableListenableFuture<>(); ListenableFuture<Boolean> future = FutureUtils.executeWhile(startingFuture, () -> runningFuture, (loop) -> loop); try { startingFuture.setResult(true); // loop to running future runningFuture.setRunningThread(Thread.currentThread()); StackTraceElement[] stack = future.getRunningStackTrace(); assertNotNull(stack); assertEquals(this.getClass().getName(), stack[3].getClassName()); } finally { runningFuture.setResult(false); } } }
@Test public void getMappedRunningStackTraceTest() { SingleThreadScheduler sts = new SingleThreadScheduler(); BlockingTestRunnable btr = new BlockingTestRunnable(); ListenableFutureTask<Object> futureTask = makeFutureTask(btr, null); ListenableFuture<Object> mappedFuture = futureTask.map((o) -> o).map((o) -> null); try { assertNull(mappedFuture.getRunningStackTrace()); sts.execute(futureTask); btr.blockTillStarted(); StackTraceElement[] stack = mappedFuture.getRunningStackTrace(); assertEquals(BlockingTestRunnable.class.getName(), stack[2].getClassName()); } finally { btr.unblock(); sts.shutdown(); } }
@Test public void getFlatMappedRunningStackTraceTest() { SingleThreadScheduler sts = new SingleThreadScheduler(); BlockingTestRunnable btr = new BlockingTestRunnable(); ListenableFutureTask<Object> futureTask = makeFutureTask(btr, null); ListenableFuture<Object> mappedFuture = futureTask.flatMap((o) -> FutureUtils.immediateResultFuture(o)) .flatMap((o) -> FutureUtils.immediateResultFuture(null)); try { assertNull(mappedFuture.getRunningStackTrace()); sts.execute(futureTask); btr.blockTillStarted(); StackTraceElement[] stack = mappedFuture.getRunningStackTrace(); assertEquals(BlockingTestRunnable.class.getName(), stack[2].getClassName()); } finally { btr.unblock(); sts.shutdown(); } }
@Test public void scheduleWhileGetRunningStackTraceTest() { SingleThreadScheduler sts = new SingleThreadScheduler(); BlockingTestRunnable btr = new BlockingTestRunnable(); ListenableFuture<Boolean> future = FutureUtils.scheduleWhile(sts, 0, sts.submitScheduled(() -> { return true; }, DELAY_TIME), () -> { btr.run(); return false; }, (loop) -> loop); try { btr.blockTillStarted(); StackTraceElement[] stack = future.getRunningStackTrace(); assertNotNull(stack); assertEquals(BlockingTestRunnable.class.getName(), stack[2].getClassName()); } finally { btr.unblock(); sts.shutdown(); } }