fork download
  1. import java.util.concurrent.CompletableFuture;
  2. import java.util.concurrent.ExecutionException;
  3. import java.util.function.Consumer;
  4. import java.util.stream.Stream;
  5.  
  6. class Ideone {
  7. public static void main(final String[] args) throws java.lang.Exception {
  8. Leaf.main(args);
  9. }
  10.  
  11. public static class Leaf {
  12. public static void main(final String[] args) throws ExecutionException, InterruptedException {
  13. leaf(new CompletableFuture<Runnable>(), Leaf::main).get().run();
  14. }
  15.  
  16. private void yes(final CompletableFuture<Runnable> future) {
  17. future.complete(() -> {});
  18. future.thenRun(() -> {
  19. Thread.dumpStack();
  20. System.out.println("Hello, world!");
  21. });
  22. }
  23.  
  24. public static void main(final CompletableFuture<Runnable> future) {
  25. leaf(() -> leaf(future, new Leaf()::leaf));
  26. }
  27.  
  28. private void leaf(final CompletableFuture<Runnable> future) {
  29. leaf(() -> new $().leaf(future));
  30. }
  31.  
  32. class $ {
  33. private void leaf(final CompletableFuture<Runnable> future) {
  34. Leaf.leaf(() -> new $$().leaf(future, x -> Leaf.this.yes(future)));
  35. }
  36. }
  37.  
  38. class $$ {
  39. private void leaf(final CompletableFuture<Runnable> future, final Consumer<CompletableFuture<Runnable>> runnable) {
  40. Leaf.leaf(() -> Leaf.leaf(future, runnable));
  41. }
  42. }
  43.  
  44. private static <T> CompletableFuture<T> leaf(final CompletableFuture<T> future, final Consumer<CompletableFuture<T>> runnable) {
  45. Stream.of(runnable).forEach(task -> task.accept(future));
  46. return future;
  47. }
  48.  
  49. private static void leaf(final Runnable runnable) {
  50. final CompletableFuture<Runnable> future = new CompletableFuture<>();
  51. future.complete(() -> {});
  52. future.thenRun(runnable);
  53. }
  54. }
  55. }
Success #stdin #stdout #stderr 0.13s 34936KB
stdin
Standard input is empty
stdout
Hello, world!
stderr
java.lang.Exception: Stack trace
	at java.base/java.lang.Thread.dumpStack(Thread.java:1383)
	at Ideone$Leaf.lambda$yes$1(Main.java:19)
	at java.base/java.util.concurrent.CompletableFuture.uniRunNow(CompletableFuture.java:815)
	at java.base/java.util.concurrent.CompletableFuture.uniRunStage(CompletableFuture.java:799)
	at java.base/java.util.concurrent.CompletableFuture.thenRun(CompletableFuture.java:2192)
	at Ideone$Leaf.yes(Main.java:18)
	at Ideone$Leaf$$.lambda$leaf$0(Main.java:34)
	at Ideone$Leaf.lambda$leaf$4(Main.java:45)
	at java.base/java.util.stream.Streams$StreamBuilderImpl.forEachRemaining(Streams.java:411)
	at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658)
	at Ideone$Leaf.leaf(Main.java:45)
	at Ideone$Leaf$$$.lambda$leaf$0(Main.java:40)
	at java.base/java.util.concurrent.CompletableFuture.uniRunNow(CompletableFuture.java:815)
	at java.base/java.util.concurrent.CompletableFuture.uniRunStage(CompletableFuture.java:799)
	at java.base/java.util.concurrent.CompletableFuture.thenRun(CompletableFuture.java:2192)
	at Ideone$Leaf.leaf(Main.java:52)
	at Ideone$Leaf$$$.leaf(Main.java:40)
	at Ideone$Leaf$$.lambda$leaf$1(Main.java:34)
	at java.base/java.util.concurrent.CompletableFuture.uniRunNow(CompletableFuture.java:815)
	at java.base/java.util.concurrent.CompletableFuture.uniRunStage(CompletableFuture.java:799)
	at java.base/java.util.concurrent.CompletableFuture.thenRun(CompletableFuture.java:2192)
	at Ideone$Leaf.leaf(Main.java:52)
	at Ideone$Leaf$$.leaf(Main.java:34)
	at Ideone$Leaf.lambda$leaf$3(Main.java:29)
	at java.base/java.util.concurrent.CompletableFuture.uniRunNow(CompletableFuture.java:815)
	at java.base/java.util.concurrent.CompletableFuture.uniRunStage(CompletableFuture.java:799)
	at java.base/java.util.concurrent.CompletableFuture.thenRun(CompletableFuture.java:2192)
	at Ideone$Leaf.leaf(Main.java:52)
	at Ideone$Leaf.leaf(Main.java:29)
	at Ideone$Leaf.lambda$leaf$4(Main.java:45)
	at java.base/java.util.stream.Streams$StreamBuilderImpl.forEachRemaining(Streams.java:411)
	at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658)
	at Ideone$Leaf.leaf(Main.java:45)
	at Ideone$Leaf.lambda$main$2(Main.java:25)
	at java.base/java.util.concurrent.CompletableFuture.uniRunNow(CompletableFuture.java:815)
	at java.base/java.util.concurrent.CompletableFuture.uniRunStage(CompletableFuture.java:799)
	at java.base/java.util.concurrent.CompletableFuture.thenRun(CompletableFuture.java:2192)
	at Ideone$Leaf.leaf(Main.java:52)
	at Ideone$Leaf.main(Main.java:25)
	at Ideone$Leaf.lambda$leaf$4(Main.java:45)
	at java.base/java.util.stream.Streams$StreamBuilderImpl.forEachRemaining(Streams.java:411)
	at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:658)
	at Ideone$Leaf.leaf(Main.java:45)
	at Ideone$Leaf.main(Main.java:13)