diff --git a/akka-actor-typed-tests/src/test/scala/akka/actor/typed/SupervisionSpec.scala b/akka-actor-typed-tests/src/test/scala/akka/actor/typed/SupervisionSpec.scala index cf34d2c71e4..e58ac63460f 100644 --- a/akka-actor-typed-tests/src/test/scala/akka/actor/typed/SupervisionSpec.scala +++ b/akka-actor-typed-tests/src/test/scala/akka/actor/typed/SupervisionSpec.scala @@ -833,9 +833,8 @@ class SupervisionSpec extends ScalaTestWithActorTestKit(""" "support nesting to handle different exceptions" in { val probe = TestProbe[Event]("evt") - val behv = Behaviors - .supervise(Behaviors.supervise(targetBehavior(probe.ref)).onFailure[Exc2](SupervisorStrategy.resume)) - .onFailure[Exc3](SupervisorStrategy.restart) + val behv = + targetBehavior(probe.ref).onFailure[Exc2](SupervisorStrategy.resume).onFailure[Exc3](SupervisorStrategy.restart) val ref = spawn(behv) ref ! IncrementState ref ! GetState diff --git a/akka-actor-typed/src/main/scala/akka/actor/typed/Behavior.scala b/akka-actor-typed/src/main/scala/akka/actor/typed/Behavior.scala index 2a0e2b0a11b..7c931232e7f 100644 --- a/akka-actor-typed/src/main/scala/akka/actor/typed/Behavior.scala +++ b/akka-actor-typed/src/main/scala/akka/actor/typed/Behavior.scala @@ -7,7 +7,6 @@ package akka.actor.typed import scala.annotation.switch import scala.annotation.tailrec import scala.reflect.ClassTag - import akka.actor.InvalidMessageException import akka.actor.typed.internal.BehaviorImpl import akka.actor.typed.internal.BehaviorImpl.DeferredBehavior @@ -15,6 +14,7 @@ import akka.actor.typed.internal.BehaviorImpl.StoppedBehavior import akka.actor.typed.internal.BehaviorTags import akka.actor.typed.internal.CachedProps import akka.actor.typed.internal.InterceptorImpl +import akka.actor.typed.scaladsl.Behaviors import akka.annotation.DoNotInherit import akka.annotation.InternalApi import akka.util.OptionVal @@ -146,6 +146,10 @@ object Behavior { def transformMessages[Outer: ClassTag](matcher: PartialFunction[Outer, Inner]): Behavior[Outer] = BehaviorImpl.transformMessages(behavior, matcher) + /** Specify the [[SupervisorStrategy]] to be invoked when the wrapped behavior throws. */ + def onFailure[Thr <: Throwable](strategy: SupervisorStrategy)(implicit tag: ClassTag[Thr]): Behavior[Inner] = + Behaviors.supervise(behavior).onFailure(strategy)(tag) + } /**