From daa05d93a0de1f5eaba9952d5a0f6d3fa81be395 Mon Sep 17 00:00:00 2001 From: WhatCats Date: Tue, 21 May 2024 14:41:22 +0200 Subject: [PATCH] add awaitInterruptibly methods --- build.gradle | 2 +- .../futur/promise/AbstractPromise.java | 30 ++++++++++++------- .../dev/tommyjs/futur/promise/Promise.java | 6 ++++ 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/build.gradle b/build.gradle index dee919a..a09948d 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,7 @@ nexusPublishing { subprojects { group = 'dev.tommyjs' - version = '2.3.1' + version = '2.3.2' apply plugin: 'java' apply plugin: 'com.github.johnrengelman.shadow' diff --git a/futur-api/src/main/java/dev/tommyjs/futur/promise/AbstractPromise.java b/futur-api/src/main/java/dev/tommyjs/futur/promise/AbstractPromise.java index cde8f64..0fa1265 100644 --- a/futur-api/src/main/java/dev/tommyjs/futur/promise/AbstractPromise.java +++ b/futur-api/src/main/java/dev/tommyjs/futur/promise/AbstractPromise.java @@ -63,14 +63,16 @@ public abstract class AbstractPromise implements Promise { } @Override - public T await(long timeoutMillis) throws TimeoutException { - try { - boolean success = this.latch.await(timeoutMillis, TimeUnit.MILLISECONDS); - if (!success) { - throw new TimeoutException("Promise stopped waiting after " + timeoutMillis + "ms"); - } - } catch (InterruptedException e) { - throw new RuntimeException(e); + public T awaitInterruptibly() throws InterruptedException { + this.latch.await(); + return joinCompletion(Objects.requireNonNull(getCompletion())); + } + + @Override + public T awaitInterruptibly(long timeoutMillis) throws TimeoutException, InterruptedException { + boolean success = this.latch.await(timeoutMillis, TimeUnit.MILLISECONDS); + if (!success) { + throw new TimeoutException("Promise stopped waiting after " + timeoutMillis + "ms"); } return joinCompletion(Objects.requireNonNull(getCompletion())); @@ -79,14 +81,20 @@ public abstract class AbstractPromise implements Promise { @Override public T await() { try { - this.latch.await(); + return awaitInterruptibly(); } catch (InterruptedException e) { throw new RuntimeException(e); } - - return joinCompletion(Objects.requireNonNull(getCompletion())); } + @Override + public T await(long timeoutMillis) throws TimeoutException { + try { + return awaitInterruptibly(timeoutMillis); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } private T joinCompletion(PromiseCompletion completion) { if (completion.isError()) diff --git a/futur-api/src/main/java/dev/tommyjs/futur/promise/Promise.java b/futur-api/src/main/java/dev/tommyjs/futur/promise/Promise.java index b6f9e8f..52f6e1f 100644 --- a/futur-api/src/main/java/dev/tommyjs/futur/promise/Promise.java +++ b/futur-api/src/main/java/dev/tommyjs/futur/promise/Promise.java @@ -124,6 +124,12 @@ public interface Promise { void completeExceptionally(@NotNull Throwable result); + @Blocking + T awaitInterruptibly() throws InterruptedException; + + @Blocking + T awaitInterruptibly(long timeout) throws TimeoutException, InterruptedException; + @Blocking T await();