You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pekko.apache.org by he...@apache.org on 2025/09/13 07:15:36 UTC

(pekko) branch BooleanSupplier created (now 5f2964de27)

This is an automated email from the ASF dual-hosted git repository.

hepin pushed a change to branch BooleanSupplier
in repository https://gitbox.apache.org/repos/asf/pekko.git


      at 5f2964de27 chore: Add BooleanSupplier that can throw and make Predicate can throw

This branch includes the following new commits:

     new 5f2964de27 chore: Add BooleanSupplier that can throw and make Predicate can throw

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pekko.apache.org
For additional commands, e-mail: commits-help@pekko.apache.org


(pekko) 01/01: chore: Add BooleanSupplier that can throw and make Predicate can throw

Posted by he...@apache.org.
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 <he...@gmail.com>
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: commits-unsubscribe@pekko.apache.org
For additional commands, e-mail: commits-help@pekko.apache.org