From c3f7aac8f3342c5b47e9dac6988b422ff7cbe289 Mon Sep 17 00:00:00 2001 From: Roland Date: Mon, 7 May 2012 18:21:26 +0200 Subject: [PATCH] make transform DSL nicer, see #1966 --- .../src/test/scala/akka/actor/FSMActorSpec.scala | 2 +- akka-actor/src/main/scala/akka/actor/FSM.scala | 12 ++++++++---- .../scala/code/akka/docs/actor/FSMDocSpec.scala | 4 ++-- akka-docs/scala/fsm.rst | 2 -- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/akka-actor-tests/src/test/scala/akka/actor/FSMActorSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/FSMActorSpec.scala index a84e23799a..ef49cbc18d 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/FSMActorSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/FSMActorSpec.scala @@ -268,7 +268,7 @@ class FSMActorSpec extends AkkaSpec(Map("akka.actor.debug.fsm" -> true)) with Im startWith(0, 0) when(0)(transform { case Event("go", _) ⇒ stay - } { + } using { case x ⇒ goto(1) }) when(1) { diff --git a/akka-actor/src/main/scala/akka/actor/FSM.scala b/akka-actor/src/main/scala/akka/actor/FSM.scala index fbe6622c68..db89f58946 100644 --- a/akka-actor/src/main/scala/akka/actor/FSM.scala +++ b/akka-actor/src/main/scala/akka/actor/FSM.scala @@ -217,8 +217,8 @@ trait FSM[S, D] extends Listeners with ActorLogging { * @param timeout state timeout for the initial state, overriding the default timeout for that state */ protected final def startWith(stateName: S, - stateData: D, - timeout: Timeout = None): Unit = + stateData: D, + timeout: Timeout = None): Unit = currentState = FSM.State(stateName, stateData, timeout) /** @@ -253,8 +253,12 @@ trait FSM[S, D] extends Listeners with ActorLogging { */ protected final def stop(reason: Reason, stateData: D): State = stay using stateData withStopReason (reason) - protected final def transform(func: StateFunction)(andThen: PartialFunction[State, State]): StateFunction = - func andThen (andThen orElse { case x ⇒ x }) + protected final class TransformHelper(func: StateFunction) { + def using(andThen: PartialFunction[State, State]): StateFunction = + func andThen (andThen orElse { case x ⇒ x }) + } + + protected final def transform(func: StateFunction): TransformHelper = new TransformHelper(func) /** * Schedule named timer to deliver message after given delay, possibly repeating. diff --git a/akka-docs/scala/code/akka/docs/actor/FSMDocSpec.scala b/akka-docs/scala/code/akka/docs/actor/FSMDocSpec.scala index 3e17c38cc4..158f8979a0 100644 --- a/akka-docs/scala/code/akka/docs/actor/FSMDocSpec.scala +++ b/akka-docs/scala/code/akka/docs/actor/FSMDocSpec.scala @@ -128,7 +128,7 @@ class FSMDocSpec extends AkkaSpec { when(SomeState)(transform { case Event(bytes: Array[Byte], read) ⇒ stay using (read + bytes.length) case Event(bytes: List[Byte], read) ⇒ stay using (read + bytes.size) - } { + } using { case s @ FSM.State(state, read, timeout, stopReason, replies) if read > 1000 ⇒ goto(Processing) }) @@ -143,7 +143,7 @@ class FSMDocSpec extends AkkaSpec { when(SomeState)(transform { case Event(bytes: Array[Byte], read) ⇒ stay using (read + bytes.length) case Event(bytes: List[Byte], read) ⇒ stay using (read + bytes.size) - }(processingTrigger)) + } using processingTrigger) //#alt-transform-syntax //#termination-syntax diff --git a/akka-docs/scala/fsm.rst b/akka-docs/scala/fsm.rst index 3b60058701..807cd7567c 100644 --- a/akka-docs/scala/fsm.rst +++ b/akka-docs/scala/fsm.rst @@ -329,8 +329,6 @@ be used several times, e.g. when applying the same transformation to several .. includecode:: code/akka/docs/actor/FSMDocSpec.scala :include: alt-transform-syntax -The parentheses are required by Scala’s syntax rules. - Timers ------