private static ResultT get()

in util/base/src/main/java/jetbrains/jetpad/base/Asyncs.java [437:475]


  private static <ResultT> ResultT get(Async<ResultT> async, Awaiter awaiter) {
    final CountDownLatch latch = new CountDownLatch(1);
    final AtomicReference<ResultT> result = new AtomicReference<>(null);
    final AtomicReference<Throwable> error = new AtomicReference<>(null);
    async.onResult(
        new Consumer<ResultT>() {
          @Override
          public void accept(ResultT item) {
            result.set(item);
            latch.countDown();
          }
        },
        new Consumer<Throwable>() {
          @Override
          public void accept(Throwable failure) {
            error.set(failure);
            latch.countDown();
          }
        });
    try {
      awaiter.await(latch);
    } catch (InterruptedException e) {
      Thread.currentThread().interrupt();
      if (error.get() == null) {
        error.set(e);
      }
    }
    if (error.get() != null) {
      if (error.get() instanceof RuntimeException) {
        throw (RuntimeException) error.get();
      } else if (error.get() instanceof Error) {
        throw (Error) error.get();
      } else {
        throw new RuntimeException(error.get());
      }
    } else {
      return result.get();
    }
  }