diff --git a/README.md b/README.md index efc8187..1e10728 100644 --- a/README.md +++ b/README.md @@ -14,8 +14,8 @@ repositories { } dependencies { - compile 'dev.tommyjs:futur-api:2.5.0' - compile 'dev.tommyjs:futur-lazy:2.5.0' + compile 'dev.tommyjs:futur-api:2.5.1' + compile 'dev.tommyjs:futur-lazy:2.5.1' } ``` ### Gradle DSL @@ -25,8 +25,8 @@ repositories { } dependencies { - implementation("dev.tommyjs:futur-api:2.5.0") - implementation("dev.tommyjs:futur-lazy:2.5.0") + implementation("dev.tommyjs:futur-api:2.5.1") + implementation("dev.tommyjs:futur-lazy:2.5.1") } ``` ### Maven @@ -42,12 +42,12 @@ dependencies { dev.tommyjs futur-api - 2.5.0 + 2.5.1 dev.tommyjs futur-lazy - 2.5.0 + 2.5.1 ``` \ No newline at end of file diff --git a/build.gradle b/build.gradle index 1eb3b4d..9220e3c 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ plugins { subprojects { group = 'dev.tommyjs' - version = '2.5.0' + version = '2.5.1' apply plugin: 'java-library' 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 c05f705..a4f8942 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 @@ -504,11 +504,12 @@ public abstract class AbstractPromise implements Promise { @Override public @NotNull Promise orDefault(@NotNull ExceptionalFunction function) { + PromiseFactory factory = getFactory(); return useCompletion(() -> { CompletablePromise promise = createLinked(); addDirectListener(promise::complete, e -> runCompleter(promise, () -> promise.complete(function.apply(e)))); return promise; - }, getFactory()::resolve, getFactory()::error); + }, factory::resolve, e -> supplySafe(() -> factory.resolve(function.apply(e)), factory::error)); } private static class DeferredExecutionException extends ExecutionException { diff --git a/futur-api/src/test/java/dev/tommyjs/futur/PromiseTests.java b/futur-api/src/test/java/dev/tommyjs/futur/PromiseTests.java index 8cbabbd..ce99c46 100644 --- a/futur-api/src/test/java/dev/tommyjs/futur/PromiseTests.java +++ b/futur-api/src/test/java/dev/tommyjs/futur/PromiseTests.java @@ -211,6 +211,18 @@ public final class PromiseTests { assert res.get() == 10; } + @Test + public void testOrDefaultFunctionCompleted() { + CompletablePromise promise = promises.unresolved(); + promise.completeExceptionally(new IllegalStateException("Test")); + AtomicReference res = new AtomicReference<>(); + promise.orDefault(e -> { + assert e instanceof IllegalStateException; + return 10; + }).thenPopulateReference(res); + assert res.get() == 10; + } + @Test public void testOrDefaultError() { CompletablePromise promise = promises.unresolved();