This is an automated email from the ASF dual-hosted git repository. hepin pushed a commit to branch BooleanSupplier in repository https://gitbox.apache.org/repos/asf/pekko.git
commit 5f2964de27b2be42c5ca34ff4e0a99e53457f936 Author: He-Pin <[email protected]> AuthorDate: Sat Sep 13 15:15:24 2025 +0800 chore: Add BooleanSupplier that can throw and make Predicate can throw --- .../org/apache/pekko/japi/FunctionLawTest.java | 4 ++-- .../pekko/japi/function/BooleanSupplier.java | 26 ++++++++++++++++++++++ .../pekko/japi/pf/FSMStateFunctionBuilder.java | 2 +- .../org/apache/pekko/japi/pf/FSMStopBuilder.java | 2 +- .../org/apache/pekko/japi/pf/ReceiveBuilder.java | 21 ++++++++--------- .../org/apache/pekko/japi/pf/UnitPFBuilder.java | 4 ++-- .../javaapi-functions.excludes | 1 + .../org/apache/pekko/japi/function/Function.scala | 2 ++ .../test/java/jdocs/stream/GraphStageDocTest.java | 2 +- .../fsm/japi/pf/FSMStateFunctionBuilder.java | 2 +- .../persistence/fsm/japi/pf/FSMStopBuilder.java | 3 ++- 11 files changed, 50 insertions(+), 19 deletions(-) diff --git a/actor-tests/src/test/java/org/apache/pekko/japi/FunctionLawTest.java b/actor-tests/src/test/java/org/apache/pekko/japi/FunctionLawTest.java index 63f92ad6f0..4c3caca367 100644 --- a/actor-tests/src/test/java/org/apache/pekko/japi/FunctionLawTest.java +++ b/actor-tests/src/test/java/org/apache/pekko/japi/FunctionLawTest.java @@ -53,7 +53,7 @@ public class FunctionLawTest { } @Test - public void testPredicateNegate() { + public void testPredicateNegate() throws Exception { final Predicate<Object> alwaysTrue = o -> true; final Predicate<Object> alwaysFalse = alwaysTrue.negate(); Assert.assertTrue(alwaysTrue.test(new Object())); @@ -62,7 +62,7 @@ public class FunctionLawTest { } @Test - public void testPredicate2Negate() { + public void testPredicate2Negate() throws Exception { final Predicate2<Object, Object> alwaysTrue = (o1, o2) -> true; final Predicate2<Object, Object> alwaysFalse = alwaysTrue.negate(); Assert.assertTrue(alwaysTrue.test(new Object(), new Object())); diff --git a/actor/src/main/java/org/apache/pekko/japi/function/BooleanSupplier.java b/actor/src/main/java/org/apache/pekko/japi/function/BooleanSupplier.java new file mode 100644 index 0000000000..6d6b853c79 --- /dev/null +++ b/actor/src/main/java/org/apache/pekko/japi/function/BooleanSupplier.java @@ -0,0 +1,26 @@ +package org.apache.pekko.japi.function; + +import java.io.Serializable; + +/** + * Represents a supplier of {@code boolean}-valued results. + * + * @since 2.0.0 + */ +public interface BooleanSupplier extends Serializable { + long serialVersionUID = 1L; + + /** + * Gets a result. + * + * @return a result + * @throws Exception if an error occurs + */ + boolean get() throws Exception; + + /** A constant BooleanSupplier that always returns false. */ + BooleanSupplier FALSE_SUPPLIER = () -> false; + + /** A constant BooleanSupplier that always returns true. */ + BooleanSupplier TRUE_SUPPLIER = () -> true; +} diff --git a/actor/src/main/java/org/apache/pekko/japi/pf/FSMStateFunctionBuilder.java b/actor/src/main/java/org/apache/pekko/japi/pf/FSMStateFunctionBuilder.java index 13cfe319c7..95c0414d61 100644 --- a/actor/src/main/java/org/apache/pekko/japi/pf/FSMStateFunctionBuilder.java +++ b/actor/src/main/java/org/apache/pekko/japi/pf/FSMStateFunctionBuilder.java @@ -54,7 +54,7 @@ public class FSMStateFunctionBuilder<S, D> { FSM.Event.class, new Predicate<FSM.Event>() { @Override - public boolean test(FSM.Event e) { + public boolean test(FSM.Event e) throws Exception { boolean res = true; if (eventOrType != null) { if (eventOrType instanceof Class eventType) { diff --git a/actor/src/main/java/org/apache/pekko/japi/pf/FSMStopBuilder.java b/actor/src/main/java/org/apache/pekko/japi/pf/FSMStopBuilder.java index 5fcfc6e4e9..6efbd17b55 100644 --- a/actor/src/main/java/org/apache/pekko/japi/pf/FSMStopBuilder.java +++ b/actor/src/main/java/org/apache/pekko/japi/pf/FSMStopBuilder.java @@ -96,7 +96,7 @@ public class FSMStopBuilder<S, D> { FSM.StopEvent.class, new Predicate<FSM.StopEvent>() { @Override - public boolean test(FSM.StopEvent e) { + public boolean test(FSM.StopEvent e) throws Exception { if (reasonType.isInstance(e.reason())) { @SuppressWarnings("unchecked") P p = (P) e.reason(); diff --git a/actor/src/main/java/org/apache/pekko/japi/pf/ReceiveBuilder.java b/actor/src/main/java/org/apache/pekko/japi/pf/ReceiveBuilder.java index eee8582b6c..64e9bb6738 100644 --- a/actor/src/main/java/org/apache/pekko/japi/pf/ReceiveBuilder.java +++ b/actor/src/main/java/org/apache/pekko/japi/pf/ReceiveBuilder.java @@ -140,7 +140,7 @@ public class ReceiveBuilder { */ public <P> ReceiveBuilder match( final Class<P> type, - final java.util.function.BooleanSupplier externalPredicate, + final org.apache.pekko.japi.function.BooleanSupplier externalPredicate, final Procedure<P> apply) { return matchUnchecked(type, externalPredicate, apply); } @@ -162,7 +162,7 @@ public class ReceiveBuilder { Predicate<Object> fiPredicate = new Predicate<>() { @Override - public boolean test(Object o) { + public boolean test(Object o) throws Exception { if (!type.isInstance(o)) return false; else return ((Predicate<Object>) predicate).test(o); } @@ -187,13 +187,13 @@ public class ReceiveBuilder { @SuppressWarnings("unchecked") public <P> ReceiveBuilder matchUnchecked( final Class<?> type, - final java.util.function.BooleanSupplier externalPredicate, + final org.apache.pekko.japi.function.BooleanSupplier externalPredicate, final Procedure<P> apply) { Predicate<Object> fiPredicate = new Predicate<>() { @Override - public boolean test(Object o) { - return type.isInstance(o) && externalPredicate.getAsBoolean(); + public boolean test(Object o) throws Exception { + return type.isInstance(o) && externalPredicate.get(); } }; @@ -237,7 +237,7 @@ public class ReceiveBuilder { new UnitCaseStatement<Object, P>( new Predicate<>() { @Override - public boolean test(Object o) { + public boolean test(Object o) throws Exception { if (!object.equals(o)) return false; else { @SuppressWarnings("unchecked") @@ -262,9 +262,9 @@ public class ReceiveBuilder { @SuppressWarnings("unchecked") public <P> ReceiveBuilder matchEquals( final P object, - final java.util.function.BooleanSupplier externalPredicate, + final org.apache.pekko.japi.function.BooleanSupplier externalPredicate, final Procedure<P> apply) { - final Predicate<Object> predicate = o -> object.equals(o) && externalPredicate.getAsBoolean(); + final Predicate<Object> predicate = o -> object.equals(o) && externalPredicate.get(); addStatement(new UnitCaseStatement<>(predicate, (Procedure<Object>) apply)); return this; } @@ -290,8 +290,9 @@ public class ReceiveBuilder { * @return a builder with the case statement added */ public ReceiveBuilder matchAny( - final java.util.function.BooleanSupplier externalPredicate, final Procedure<Object> apply) { - final Predicate<Object> predicate = o -> externalPredicate.getAsBoolean(); + final org.apache.pekko.japi.function.BooleanSupplier externalPredicate, + final Procedure<Object> apply) { + final Predicate<Object> predicate = o -> externalPredicate.get(); addStatement(new UnitCaseStatement<>(predicate, apply)); return this; } diff --git a/actor/src/main/java/org/apache/pekko/japi/pf/UnitPFBuilder.java b/actor/src/main/java/org/apache/pekko/japi/pf/UnitPFBuilder.java index 279620f0bd..910d94975e 100644 --- a/actor/src/main/java/org/apache/pekko/japi/pf/UnitPFBuilder.java +++ b/actor/src/main/java/org/apache/pekko/japi/pf/UnitPFBuilder.java @@ -95,7 +95,7 @@ public final class UnitPFBuilder<I> extends AbstractPFBuilder<I, BoxedUnit> { Predicate<I> fiPredicate = new Predicate<I>() { @Override - public boolean test(final I param) { + public boolean test(final I param) throws Exception { if (!type.isInstance(param)) { return false; } else { @@ -144,7 +144,7 @@ public final class UnitPFBuilder<I> extends AbstractPFBuilder<I, BoxedUnit> { new UnitCaseStatement<I, P>( new Predicate<I>() { @Override - public boolean test(final I param) { + public boolean test(final I param) throws Exception { if (!object.equals(param)) { return false; } else { diff --git a/actor/src/main/mima-filters/2.0.x.backwards.excludes/javaapi-functions.excludes b/actor/src/main/mima-filters/2.0.x.backwards.excludes/javaapi-functions.excludes index 755be7d74e..05771f3e0a 100644 --- a/actor/src/main/mima-filters/2.0.x.backwards.excludes/javaapi-functions.excludes +++ b/actor/src/main/mima-filters/2.0.x.backwards.excludes/javaapi-functions.excludes @@ -36,4 +36,5 @@ ProblemFilters.exclude[MissingClassProblem]("org.apache.pekko.japi.Procedure") ProblemFilters.exclude[IncompatibleMethTypeProblem]("org.apache.pekko.pattern.Patterns.askWithReplyTo") ProblemFilters.exclude[IncompatibleMethTypeProblem]("org.apache.pekko.serialization.SerializationSetup.create") ProblemFilters.exclude[IncompatibleMethTypeProblem]("org.apache.pekko.pattern.Patterns.retry") +ProblemFilters.exclude[IncompatibleSignatureProblem]("org.apache.pekko.japi.function.Predicate.test") diff --git a/actor/src/main/scala/org/apache/pekko/japi/function/Function.scala b/actor/src/main/scala/org/apache/pekko/japi/function/Function.scala index 669e634800..51efe84c52 100644 --- a/actor/src/main/scala/org/apache/pekko/japi/function/Function.scala +++ b/actor/src/main/scala/org/apache/pekko/japi/function/Function.scala @@ -110,6 +110,7 @@ trait Effect extends java.io.Serializable { @SerialVersionUID(1L) @FunctionalInterface trait Predicate[-T] extends java.io.Serializable { + @throws(classOf[Exception]) def test(param: T): Boolean /** @@ -128,6 +129,7 @@ trait Predicate[-T] extends java.io.Serializable { @SerialVersionUID(1L) @FunctionalInterface trait Predicate2[-T1, -T2] extends java.io.Serializable { + @throws(classOf[Exception]) def test(param1: T1, param2: T2): Boolean /** diff --git a/docs/src/test/java/jdocs/stream/GraphStageDocTest.java b/docs/src/test/java/jdocs/stream/GraphStageDocTest.java index fb123701d0..32461e7850 100644 --- a/docs/src/test/java/jdocs/stream/GraphStageDocTest.java +++ b/docs/src/test/java/jdocs/stream/GraphStageDocTest.java @@ -260,7 +260,7 @@ public class GraphStageDocTest extends AbstractJavaTest { in, new AbstractInHandler() { @Override - public void onPush() { + public void onPush() throws Exception { A elem = grab(in); if (p.test(elem)) { push(out, elem); diff --git a/persistence/src/main/java/org/apache/pekko/persistence/fsm/japi/pf/FSMStateFunctionBuilder.java b/persistence/src/main/java/org/apache/pekko/persistence/fsm/japi/pf/FSMStateFunctionBuilder.java index 908e25f9b6..dd93b69c08 100644 --- a/persistence/src/main/java/org/apache/pekko/persistence/fsm/japi/pf/FSMStateFunctionBuilder.java +++ b/persistence/src/main/java/org/apache/pekko/persistence/fsm/japi/pf/FSMStateFunctionBuilder.java @@ -64,7 +64,7 @@ public class FSMStateFunctionBuilder<S, D, E> { org.apache.pekko.persistence.fsm.PersistentFSM.Event.class, new Predicate<PersistentFSM.Event>() { @Override - public boolean test(org.apache.pekko.persistence.fsm.PersistentFSM.Event e) { + public boolean test(org.apache.pekko.persistence.fsm.PersistentFSM.Event e) throws Exception { boolean res = true; if (eventOrType != null) { if (eventOrType instanceof Class eventType) { diff --git a/persistence/src/main/java/org/apache/pekko/persistence/fsm/japi/pf/FSMStopBuilder.java b/persistence/src/main/java/org/apache/pekko/persistence/fsm/japi/pf/FSMStopBuilder.java index f5949f2590..48941bfb2a 100644 --- a/persistence/src/main/java/org/apache/pekko/persistence/fsm/japi/pf/FSMStopBuilder.java +++ b/persistence/src/main/java/org/apache/pekko/persistence/fsm/japi/pf/FSMStopBuilder.java @@ -106,7 +106,8 @@ public class FSMStopBuilder<S, D> { org.apache.pekko.persistence.fsm.PersistentFSM.StopEvent.class, new Predicate<org.apache.pekko.persistence.fsm.PersistentFSM.StopEvent>() { @Override - public boolean test(org.apache.pekko.persistence.fsm.PersistentFSM.StopEvent e) { + public boolean test(org.apache.pekko.persistence.fsm.PersistentFSM.StopEvent e) + throws Exception { if (reasonType.isInstance(e.reason())) { @SuppressWarnings("unchecked") P p = (P) e.reason(); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
