From 4afff4875776961fade4fd245e930e088f7912e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Antonsson?= Date: Tue, 21 Aug 2012 12:37:08 +0200 Subject: [PATCH] Renamed childExists to child and return Option[ActorRef]. See #2343 --- .../src/test/scala/akka/actor/ActorRefSpec.scala | 2 +- akka-actor/src/main/scala/akka/actor/ActorCell.scala | 8 +++++++- akka-actor/src/main/scala/akka/actor/cell/Children.scala | 6 +++++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/akka-actor-tests/src/test/scala/akka/actor/ActorRefSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/ActorRefSpec.scala index ae2e5ab71b..a95e2d84b8 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/ActorRefSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/ActorRefSpec.scala @@ -418,7 +418,7 @@ class ActorRefSpec extends AkkaSpec with DefaultTimeout { def receive = { case _ ⇒ } }), "child") - def receive = { case name: String ⇒ sender ! context.childExists(name) } + def receive = { case name: String ⇒ sender ! context.child(name).isDefined } }), "parent") assert(Await.result((parent ? "child"), remaining) === true) diff --git a/akka-actor/src/main/scala/akka/actor/ActorCell.scala b/akka-actor/src/main/scala/akka/actor/ActorCell.scala index 96023c26ac..d34e4aeb14 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorCell.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorCell.scala @@ -105,7 +105,7 @@ trait ActorContext extends ActorRefFactory { /** * Returns true if a child with the given name exists. */ - def childExists(name: String): Boolean + def child(name: String): Option[ActorRef] /** * Returns the dispatcher (MessageDispatcher) that is used for this Actor. @@ -155,6 +155,12 @@ trait UntypedActorContext extends ActorContext { */ def getChildren(): java.lang.Iterable[ActorRef] + /** + * Returns a reference to the named child or null if no child with + * that name exists. + */ + def getChild(name: String): ActorRef + /** * Changes the Actor's behavior to become the new 'Procedure' handler. * Puts the behavior on top of the hotswap stack. diff --git a/akka-actor/src/main/scala/akka/actor/cell/Children.scala b/akka-actor/src/main/scala/akka/actor/cell/Children.scala index 32ccaa9035..dfb1ac9671 100644 --- a/akka-actor/src/main/scala/akka/actor/cell/Children.scala +++ b/akka-actor/src/main/scala/akka/actor/cell/Children.scala @@ -27,7 +27,11 @@ private[akka] trait Children { this: ActorCell ⇒ final def children: Iterable[ActorRef] = childrenRefs.children final def getChildren(): java.lang.Iterable[ActorRef] = children.asJava - final def childExists(name: String): Boolean = childrenRefs.getByName(name).isDefined + final def child(name: String): Option[ActorRef] = childrenRefs.getByName(name).flatMap({ + case s: ChildRestartStats ⇒ Some(s.child) + case ChildNameReserved ⇒ None + }) + final def getChild(name: String): ActorRef = child(name).getOrElse(null) def actorOf(props: Props): ActorRef = makeChild(this, props, randomName(), async = false, systemService = false)