From e788a826b0df2c43e354f577013aadc09b3c0037 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Willi=20Sch=C3=B6nborn?= Date: Thu, 19 Apr 2018 16:36:34 +0200 Subject: [PATCH] Annotated public API with @API Fixes #24 --- pom.xml | 5 +++++ .../java/org/zalando/fauxpas/FauxPas.java | 11 ++++++++++ .../zalando/fauxpas/ThrowingBiConsumer.java | 4 ++++ .../zalando/fauxpas/ThrowingBiFunction.java | 4 ++++ .../zalando/fauxpas/ThrowingBiPredicate.java | 4 ++++ .../fauxpas/ThrowingBinaryOperator.java | 5 +++++ .../org/zalando/fauxpas/ThrowingConsumer.java | 4 ++++ .../org/zalando/fauxpas/ThrowingFunction.java | 4 ++++ .../zalando/fauxpas/ThrowingPredicate.java | 4 ++++ .../org/zalando/fauxpas/ThrowingRunnable.java | 4 ++++ .../org/zalando/fauxpas/ThrowingSupplier.java | 4 ++++ .../fauxpas/ThrowingUnaryOperator.java | 5 +++++ .../java/org/zalando/fauxpas/TryWith.java | 20 +++++++++++++------ 13 files changed, 72 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index c8f6e45..6f04444 100644 --- a/pom.xml +++ b/pom.xml @@ -57,6 +57,11 @@ + + org.apiguardian + apiguardian-api + 1.0.0 + com.google.code.findbugs jsr305 diff --git a/src/main/java/org/zalando/fauxpas/FauxPas.java b/src/main/java/org/zalando/fauxpas/FauxPas.java index 6a0b54d..02fb63f 100644 --- a/src/main/java/org/zalando/fauxpas/FauxPas.java +++ b/src/main/java/org/zalando/fauxpas/FauxPas.java @@ -1,5 +1,7 @@ package org.zalando.fauxpas; +import org.apiguardian.api.API; + import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionException; import java.util.function.BiFunction; @@ -7,7 +9,11 @@ import static java.util.Objects.nonNull; import static java.util.function.Function.identity; +import static org.apiguardian.api.API.Status.EXPERIMENTAL; +import static org.apiguardian.api.API.Status.MAINTAINED; +import static org.apiguardian.api.API.Status.STABLE; +@API(status = STABLE) public final class FauxPas { FauxPas() { @@ -64,6 +70,7 @@ public static ThrowingBiPredicate throwingB return predicate; } + @API(status = MAINTAINED) public static Function partially(final Class type, final ThrowingFunction function) { return partially(e -> { @@ -74,6 +81,7 @@ public static Function partially(final Cl }); } + @API(status = MAINTAINED) public static Function partially(final ThrowingFunction function) { return throwable -> { try { @@ -86,6 +94,7 @@ public static Function partially(final ThrowingFunction ThrowingBiConsumer failedWith( final Class type, final ThrowingConsumer action) { return (result, throwable) -> { @@ -103,6 +112,7 @@ private static Throwable unpack(final Throwable throwable) { return throwable instanceof CompletionException && cause != null ? cause : throwable; } + @API(status = EXPERIMENTAL) public static CompletableFuture handleCompose(final CompletableFuture future, final BiFunction> function) { return future @@ -110,6 +120,7 @@ public static CompletableFuture handleCompose(final CompletableFuture .thenCompose(identity()); } + @API(status = EXPERIMENTAL) public static CompletableFuture exceptionallyCompose(final CompletableFuture future, final Function> function) { return future diff --git a/src/main/java/org/zalando/fauxpas/ThrowingBiConsumer.java b/src/main/java/org/zalando/fauxpas/ThrowingBiConsumer.java index ca4ea32..20dcc7a 100644 --- a/src/main/java/org/zalando/fauxpas/ThrowingBiConsumer.java +++ b/src/main/java/org/zalando/fauxpas/ThrowingBiConsumer.java @@ -1,9 +1,13 @@ package org.zalando.fauxpas; import lombok.SneakyThrows; +import org.apiguardian.api.API; import java.util.function.BiConsumer; +import static org.apiguardian.api.API.Status.STABLE; + +@API(status = STABLE) @FunctionalInterface public interface ThrowingBiConsumer extends BiConsumer { diff --git a/src/main/java/org/zalando/fauxpas/ThrowingBiFunction.java b/src/main/java/org/zalando/fauxpas/ThrowingBiFunction.java index 148fef3..4760d06 100644 --- a/src/main/java/org/zalando/fauxpas/ThrowingBiFunction.java +++ b/src/main/java/org/zalando/fauxpas/ThrowingBiFunction.java @@ -1,9 +1,13 @@ package org.zalando.fauxpas; import lombok.SneakyThrows; +import org.apiguardian.api.API; import java.util.function.BiFunction; +import static org.apiguardian.api.API.Status.STABLE; + +@API(status = STABLE) @FunctionalInterface public interface ThrowingBiFunction extends BiFunction { diff --git a/src/main/java/org/zalando/fauxpas/ThrowingBiPredicate.java b/src/main/java/org/zalando/fauxpas/ThrowingBiPredicate.java index 1b3fad2..4457962 100644 --- a/src/main/java/org/zalando/fauxpas/ThrowingBiPredicate.java +++ b/src/main/java/org/zalando/fauxpas/ThrowingBiPredicate.java @@ -1,9 +1,13 @@ package org.zalando.fauxpas; import lombok.SneakyThrows; +import org.apiguardian.api.API; import java.util.function.BiPredicate; +import static org.apiguardian.api.API.Status.STABLE; + +@API(status = STABLE) @FunctionalInterface public interface ThrowingBiPredicate extends BiPredicate { diff --git a/src/main/java/org/zalando/fauxpas/ThrowingBinaryOperator.java b/src/main/java/org/zalando/fauxpas/ThrowingBinaryOperator.java index 0daa06d..178413c 100644 --- a/src/main/java/org/zalando/fauxpas/ThrowingBinaryOperator.java +++ b/src/main/java/org/zalando/fauxpas/ThrowingBinaryOperator.java @@ -1,7 +1,12 @@ package org.zalando.fauxpas; +import org.apiguardian.api.API; + import java.util.function.BinaryOperator; +import static org.apiguardian.api.API.Status.STABLE; + +@API(status = STABLE) @FunctionalInterface public interface ThrowingBinaryOperator extends ThrowingBiFunction, BinaryOperator { diff --git a/src/main/java/org/zalando/fauxpas/ThrowingConsumer.java b/src/main/java/org/zalando/fauxpas/ThrowingConsumer.java index bf4b7ce..7c2e24e 100644 --- a/src/main/java/org/zalando/fauxpas/ThrowingConsumer.java +++ b/src/main/java/org/zalando/fauxpas/ThrowingConsumer.java @@ -1,9 +1,13 @@ package org.zalando.fauxpas; import lombok.SneakyThrows; +import org.apiguardian.api.API; import java.util.function.Consumer; +import static org.apiguardian.api.API.Status.STABLE; + +@API(status = STABLE) @FunctionalInterface public interface ThrowingConsumer extends Consumer { diff --git a/src/main/java/org/zalando/fauxpas/ThrowingFunction.java b/src/main/java/org/zalando/fauxpas/ThrowingFunction.java index 60575c0..5d41ced 100644 --- a/src/main/java/org/zalando/fauxpas/ThrowingFunction.java +++ b/src/main/java/org/zalando/fauxpas/ThrowingFunction.java @@ -1,9 +1,13 @@ package org.zalando.fauxpas; import lombok.SneakyThrows; +import org.apiguardian.api.API; import java.util.function.Function; +import static org.apiguardian.api.API.Status.STABLE; + +@API(status = STABLE) @FunctionalInterface public interface ThrowingFunction extends Function { diff --git a/src/main/java/org/zalando/fauxpas/ThrowingPredicate.java b/src/main/java/org/zalando/fauxpas/ThrowingPredicate.java index b8b14f1..cfe7e6a 100644 --- a/src/main/java/org/zalando/fauxpas/ThrowingPredicate.java +++ b/src/main/java/org/zalando/fauxpas/ThrowingPredicate.java @@ -1,9 +1,13 @@ package org.zalando.fauxpas; import lombok.SneakyThrows; +import org.apiguardian.api.API; import java.util.function.Predicate; +import static org.apiguardian.api.API.Status.STABLE; + +@API(status = STABLE) @FunctionalInterface public interface ThrowingPredicate extends Predicate { diff --git a/src/main/java/org/zalando/fauxpas/ThrowingRunnable.java b/src/main/java/org/zalando/fauxpas/ThrowingRunnable.java index d4b25ea..8cff066 100644 --- a/src/main/java/org/zalando/fauxpas/ThrowingRunnable.java +++ b/src/main/java/org/zalando/fauxpas/ThrowingRunnable.java @@ -1,7 +1,11 @@ package org.zalando.fauxpas; import lombok.SneakyThrows; +import org.apiguardian.api.API; +import static org.apiguardian.api.API.Status.STABLE; + +@API(status = STABLE) @FunctionalInterface public interface ThrowingRunnable extends Runnable { diff --git a/src/main/java/org/zalando/fauxpas/ThrowingSupplier.java b/src/main/java/org/zalando/fauxpas/ThrowingSupplier.java index a3b6dc3..b9c9224 100644 --- a/src/main/java/org/zalando/fauxpas/ThrowingSupplier.java +++ b/src/main/java/org/zalando/fauxpas/ThrowingSupplier.java @@ -1,9 +1,13 @@ package org.zalando.fauxpas; import lombok.SneakyThrows; +import org.apiguardian.api.API; import java.util.function.Supplier; +import static org.apiguardian.api.API.Status.STABLE; + +@API(status = STABLE) @FunctionalInterface public interface ThrowingSupplier extends Supplier { diff --git a/src/main/java/org/zalando/fauxpas/ThrowingUnaryOperator.java b/src/main/java/org/zalando/fauxpas/ThrowingUnaryOperator.java index 80cd590..5861826 100644 --- a/src/main/java/org/zalando/fauxpas/ThrowingUnaryOperator.java +++ b/src/main/java/org/zalando/fauxpas/ThrowingUnaryOperator.java @@ -1,7 +1,12 @@ package org.zalando.fauxpas; +import org.apiguardian.api.API; + import java.util.function.UnaryOperator; +import static org.apiguardian.api.API.Status.STABLE; + +@API(status = STABLE) @FunctionalInterface public interface ThrowingUnaryOperator extends ThrowingFunction, UnaryOperator { diff --git a/src/main/java/org/zalando/fauxpas/TryWith.java b/src/main/java/org/zalando/fauxpas/TryWith.java index 4425e99..614ad22 100644 --- a/src/main/java/org/zalando/fauxpas/TryWith.java +++ b/src/main/java/org/zalando/fauxpas/TryWith.java @@ -1,25 +1,31 @@ package org.zalando.fauxpas; import lombok.SneakyThrows; +import org.apiguardian.api.API; import javax.annotation.Nullable; +import static org.apiguardian.api.API.Status.MAINTAINED; +import static org.apiguardian.api.API.Status.STABLE; + public final class TryWith { TryWith() { // package private so we can trick code coverage } + @API(status = MAINTAINED) public static void tryWith( @Nullable final O outer, @Nullable final I inner, final ThrowingBiConsumer consumer) throws X { - tryWith(outer, (ಠ_ಠ) -> { - tryWith(inner, (ツ) -> { - consumer.tryAccept(outer, inner); + tryWith(outer, a -> { + tryWith(inner, b -> { + consumer.tryAccept(a, b); }); }); } + @API(status = STABLE) public static void tryWith(@Nullable final R resource, final ThrowingConsumer consumer) throws X { @@ -32,16 +38,18 @@ public static void tryWith(@Nulla tryClose(resource); } + @API(status = MAINTAINED) public static T tryWith( @Nullable final O outer, @Nullable final I inner, final ThrowingBiFunction function) throws X { // not exactly sure why those explicit type parameters are needed - return TryWith.tryWith(outer, (ಠ_ಠ) -> - tryWith(inner, (ツ) -> { - return function.tryApply(outer, inner); + return TryWith.tryWith(outer, a -> + tryWith(inner, b -> { + return function.tryApply(a, b); })); } + @API(status = STABLE) public static T tryWith(@Nullable final R resource, final ThrowingFunction supplier) throws X {