Adds explicit ! method (#30004)

Needed for Scala 3
This commit is contained in:
Nicolas Vollmar 2021-02-10 13:20:29 +01:00 committed by GitHub
parent b41d6a0c43
commit 278a36d036
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
66 changed files with 62 additions and 64 deletions

View file

@ -12,7 +12,7 @@ import scala.concurrent.duration._
import language.postfixOps
import akka.actor.{ actorRef2Scala, Actor, Props }
import akka.actor.{ Actor, Props }
import akka.pattern.ask
import akka.testkit.AkkaSpec
import akka.testkit.DefaultTimeout

View file

@ -10,7 +10,7 @@ import scala.concurrent.Await
import org.scalatest.BeforeAndAfterEach
import akka.actor.{ actorRef2Scala, Actor, Props }
import akka.actor.{ Actor, Props }
import akka.pattern.ask
import akka.testkit._
import akka.testkit.AkkaSpec

View file

@ -6,7 +6,6 @@ package akka.actor.dungeon
import akka.actor.Actor
import akka.actor.Props
import akka.actor.actorRef2Scala
import akka.testkit._
object DispatchSpec {

View file

@ -4,7 +4,7 @@
package akka.dispatch
import akka.actor.{ actorRef2Scala, Actor, Props }
import akka.actor.{ Actor, Props }
import akka.testkit.{ AkkaSpec, DefaultTimeout }
object ControlAwareDispatcherSpec {

View file

@ -13,7 +13,6 @@ import scala.concurrent.duration._
import akka.actor.Actor
import akka.actor.Props
import akka.actor.actorRef2Scala
import akka.testkit.{ AkkaSpec, DefaultTimeout, TestLatch }
import akka.testkit.CallingThreadDispatcher
import akka.testkit.TestActorRef

View file

@ -6,7 +6,7 @@ package akka.dispatch
import com.typesafe.config.ConfigFactory
import akka.actor.{ actorRef2Scala, Actor, Props }
import akka.actor.{ Actor, Props }
import akka.testkit.{ AkkaSpec, ImplicitSender }
object ForkJoinPoolStarvationSpec {

View file

@ -9,7 +9,7 @@ import scala.concurrent.duration._
import com.typesafe.config.Config
import language.postfixOps
import akka.actor.{ actorRef2Scala, Actor, ActorSystem, Props }
import akka.actor.{ Actor, ActorSystem, Props }
import akka.testkit.{ AkkaSpec, DefaultTimeout }
import akka.util.unused

View file

@ -9,7 +9,7 @@ import scala.concurrent.duration._
import com.typesafe.config.Config
import language.postfixOps
import akka.actor.{ actorRef2Scala, Actor, ActorSystem, Props }
import akka.actor.{ Actor, ActorSystem, Props }
import akka.testkit.{ AkkaSpec, DefaultTimeout }
import akka.util.unused

View file

@ -10,7 +10,6 @@ import akka.actor.Actor
import akka.actor.ActorRef
import akka.actor.ActorSystem
import akka.actor.Props
import akka.actor.actorRef2Scala
import akka.testkit._
object AddressTerminatedTopicBenchSpec {

View file

@ -10,7 +10,7 @@ import com.typesafe.config.{ Config, ConfigFactory }
import language.postfixOps
import org.scalatest.BeforeAndAfterEach
import akka.actor.{ actorRef2Scala, Actor, ActorRef, ActorSystem, PoisonPill, Props }
import akka.actor.{ Actor, ActorRef, ActorSystem, PoisonPill, Props }
import akka.japi.Procedure
import akka.testkit._

View file

@ -10,7 +10,7 @@ import scala.util.control.NoStackTrace
import com.typesafe.config.ConfigFactory
import akka.actor.{ actorRef2Scala, Actor, ActorLogging, Props }
import akka.actor.{ Actor, ActorLogging, Props }
import akka.testkit.AkkaSpec
@deprecated("Use SLF4J instead.", "2.6.0")

View file

@ -11,7 +11,6 @@ import Tcp._
import akka.actor.ActorRef
import akka.actor.ActorSystem
import akka.actor.actorRef2Scala
import akka.dispatch.ExecutionContexts
import akka.io.Inet.SocketOption
import akka.testkit.{ AkkaSpec, TestProbe }

View file

@ -9,7 +9,6 @@ import java.net.InetSocketAddress
import scala.concurrent.duration._
import akka.actor.ActorRef
import akka.actor.actorRef2Scala
import akka.testkit.AkkaSpec
import akka.testkit.ImplicitSender
import akka.testkit.SocketUtil.temporaryServerAddresses

View file

@ -8,7 +8,6 @@ import java.net.DatagramSocket
import java.net.InetSocketAddress
import akka.actor.ActorRef
import akka.actor.actorRef2Scala
import akka.io.Inet._
import akka.io.Udp._
import akka.testkit.{ AkkaSpec, ImplicitSender, TestProbe }

View file

@ -10,7 +10,6 @@ import scala.collection.immutable.Seq
import scala.annotation.nowarn
import akka.actor.actorRef2Scala
import akka.io.Dns
import akka.io.dns.AAAARecord
import akka.io.dns.CachePolicy.Ttl

View file

@ -11,7 +11,7 @@ import scala.concurrent.duration._
import com.typesafe.config.{ Config, ConfigFactory, ConfigValueFactory }
import akka.actor.{ actorRef2Scala, ActorRef, ExtendedActorSystem, Props }
import akka.actor.{ ActorRef, ExtendedActorSystem, Props }
import akka.actor.Status.Failure
import akka.io.SimpleDnsCache
import akka.io.dns.{ AAAARecord, ARecord, DnsSettings, SRVRecord }

View file

@ -10,7 +10,6 @@ import java.util.concurrent.atomic.AtomicBoolean
import scala.collection.immutable.Seq
import akka.actor.Props
import akka.actor.actorRef2Scala
import akka.io.Udp
import akka.io.dns.{ RecordClass, RecordType }
import akka.io.dns.internal.DnsClient.{ Answer, Question4 }

View file

@ -9,7 +9,6 @@ import java.net.InetSocketAddress
import scala.collection.immutable.Seq
import akka.actor.Props
import akka.actor.actorRef2Scala
import akka.io.Tcp
import akka.io.Tcp.{ Connected, PeerClosed, Register }
import akka.io.dns.{ RecordClass, RecordType }

View file

@ -16,7 +16,6 @@ import scala.util.Success
import scala.util.Try
import akka.actor.ActorSystem
import akka.actor.actorRef2Scala
import akka.testkit._
object CircuitBreakerSpec {

View file

@ -14,7 +14,6 @@ import akka.actor.Actor
import akka.actor.ActorLogging
import akka.actor.Props
import akka.actor.Status.Failure
import akka.actor.actorRef2Scala
import akka.testkit.AkkaSpec
import akka.testkit.ImplicitSender

View file

@ -10,7 +10,7 @@ import scala.concurrent.duration._
import language.postfixOps
import akka.actor.{ actorRef2Scala, Actor, Props }
import akka.actor.{ Actor, Props }
import akka.testkit.{ AkkaSpec, TestLatch }
object PatternSpec {

View file

@ -10,7 +10,6 @@ import scala.concurrent.duration._
import org.scalatest.concurrent.ScalaFutures
import akka.Done
import akka.actor.actorRef2Scala
import akka.testkit.AkkaSpec
import akka.testkit.TestException
import akka.testkit.TestProbe

View file

@ -12,7 +12,7 @@ import scala.concurrent.duration._
import org.scalatest.BeforeAndAfterEach
import akka.actor.{ actorRef2Scala, Actor, Props }
import akka.actor.{ Actor, Props }
import akka.actor.ActorRef
import akka.testkit.{ AkkaSpec, ImplicitSender, TestLatch }

View file

@ -8,7 +8,7 @@ import java.util.concurrent.atomic.AtomicInteger
import scala.concurrent.Await
import akka.actor.{ actorRef2Scala, Actor, Props }
import akka.actor.{ Actor, Props }
import akka.pattern.ask
import akka.testkit.{ AkkaSpec, DefaultTimeout, ImplicitSender, TestLatch }

View file

@ -13,7 +13,7 @@ import com.typesafe.config.Config
import language.postfixOps
import akka.ConfigurationException
import akka.actor.{ actorRef2Scala, Actor, ActorRef, Deploy, Props }
import akka.actor.{ Actor, ActorRef, Deploy, Props }
import akka.actor.ActorPath
import akka.actor.ActorSystem
import akka.actor.ExtendedActorSystem

View file

@ -10,7 +10,6 @@ import scala.concurrent.ExecutionContextExecutor
import akka.actor.Actor
import akka.actor.ActorRef
import akka.actor.Props
import akka.actor.actorRef2Scala
import akka.pattern.ask
import akka.routing.ConsistentHashingRouter.ConsistentHashMapping
import akka.routing.ConsistentHashingRouter.ConsistentHashable

View file

@ -11,7 +11,7 @@ import scala.concurrent.duration._
import language.postfixOps
import akka.actor.{ actorRef2Scala, Actor, Props }
import akka.actor.{ Actor, Props }
import akka.pattern.ask
import akka.testkit.{ AkkaSpec, DefaultTimeout, ImplicitSender, TestLatch }

View file

@ -10,7 +10,7 @@ import scala.concurrent.duration._
import com.typesafe.config.{ Config, ConfigFactory }
import language.postfixOps
import akka.actor.{ actorRef2Scala, Actor, ActorRef, ActorSystem, Props }
import akka.actor.{ Actor, ActorRef, ActorSystem, Props }
import akka.pattern.ask
import akka.testkit._
import akka.testkit.TestEvent._

View file

@ -15,7 +15,6 @@ import akka.actor.Actor
import akka.actor.ActorRef
import akka.actor.Props
import akka.actor.Terminated
import akka.actor.actorRef2Scala
import akka.pattern.ask
import akka.testkit._

View file

@ -10,7 +10,6 @@ import akka.actor.Actor
import akka.actor.ActorIdentity
import akka.actor.Identify
import akka.actor.Props
import akka.actor.actorRef2Scala
import akka.testkit.AkkaSpec
class RouteeCreationSpec extends AkkaSpec {

View file

@ -10,7 +10,7 @@ import java.util.concurrent.atomic.AtomicInteger
import scala.concurrent.Await
import scala.concurrent.duration._
import akka.actor.{ actorRef2Scala, Actor, Props }
import akka.actor.{ Actor, Props }
import akka.actor.ActorSystem
import akka.actor.Status
import akka.pattern.ask

View file

@ -8,7 +8,7 @@ import java.util.concurrent.ConcurrentHashMap
import scala.concurrent.Await
import akka.actor.{ actorRef2Scala, Actor, Props }
import akka.actor.{ Actor, Props }
import akka.testkit.{ AkkaSpec, DefaultTimeout, ImplicitSender, TestLatch }
class SmallestMailboxSpec extends AkkaSpec with DefaultTimeout with ImplicitSender {

View file

@ -9,7 +9,7 @@ import java.util.concurrent.atomic.AtomicInteger
import scala.concurrent.Await
import scala.concurrent.duration._
import akka.actor.{ actorRef2Scala, Actor, ActorRef, ActorSystem, Props }
import akka.actor.{ Actor, ActorRef, ActorSystem, Props }
import akka.actor.Status.Failure
import akka.pattern.{ ask, AskTimeoutException }
import akka.testkit._

View file

@ -9,7 +9,6 @@ import java.nio.{ ByteBuffer, ByteOrder }
import scala.concurrent.duration._
import akka.actor.ExtendedActorSystem
import akka.actor.actorRef2Scala
import akka.testkit._
object DisabledJavaSerializerWarningSpec {

View file

@ -0,0 +1 @@
ProblemFilters.exclude[ReversedMissingMethodProblem]("akka.actor.ActorRef.!")

View file

@ -7,6 +7,7 @@ package akka.actor
import java.util.concurrent.ConcurrentHashMap
import scala.annotation.tailrec
import scala.annotation.nowarn
import scala.collection.immutable
import scala.util.control.NonFatal
@ -103,6 +104,7 @@ object ActorRef {
* about the exact actor incarnation you can use the ``ActorPath`` as key because
* the unique id of the actor is not taken into account when comparing actor paths.
*/
@nowarn("msg=deprecated")
abstract class ActorRef extends java.lang.Comparable[ActorRef] with Serializable {
scalaRef: InternalActorRef with ActorRefScope =>
@ -128,6 +130,22 @@ abstract class ActorRef extends java.lang.Comparable[ActorRef] with Serializable
*/
final def tell(msg: Any, sender: ActorRef): Unit = this.!(msg)(sender)
/**
* Scala API: Sends a one-way asynchronous message. E.g. fire-and-forget semantics.
* <p/>
*
* If invoked from within an actor then the actor reference is implicitly passed on as the implicit 'sender' argument.
* <p/>
*
* This actor 'sender' reference is then available in the receiving actor in the 'sender()' member variable,
* if invoked from within an Actor. If not then no sender is available.
* <pre>
* actor ! message
* </pre>
* <p/>
*/
def !(message: Any)(implicit sender: ActorRef = Actor.noSender): Unit
/**
* Forwards the message and passes the original sender actor as the sender.
*
@ -167,6 +185,7 @@ abstract class ActorRef extends java.lang.Comparable[ActorRef] with Serializable
* There are implicit conversions in package.scala
* from ActorRef -&gt; ScalaActorRef and back
*/
@deprecated("tell method is now provided by ActorRef trait", "2.6.13")
trait ScalaActorRef { ref: ActorRef with InternalActorRef with ActorRefScope =>
/**
@ -184,7 +203,6 @@ trait ScalaActorRef { ref: ActorRef with InternalActorRef with ActorRefScope =>
* <p/>
*/
def !(message: Any)(implicit sender: ActorRef = Actor.noSender): Unit
}
/**
@ -233,6 +251,7 @@ private[akka] trait RepointableRef extends ActorRefScope {
*
* DO NOT USE THIS UNLESS INTERNALLY WITHIN AKKA!
*/
@nowarn("msg=deprecated")
@InternalApi private[akka] abstract class InternalActorRef extends ActorRef with ScalaActorRef { this: ActorRefScope =>
/*
* Actor life-cycle management, invoked only internally (in response to user requests via ActorContext).

View file

@ -179,7 +179,7 @@ private[akka] class RepointableActorRef(
def children: immutable.Iterable[ActorRef] = lookup.childrenRefs.children
def !(message: Any)(implicit sender: ActorRef = Actor.noSender) = underlying.sendMessage(message, sender)
def !(message: Any)(implicit sender: ActorRef = Actor.noSender): Unit = underlying.sendMessage(message, sender)
def sendSystemMessage(message: SystemMessage) = underlying.sendSystemMessage(message)

View file

@ -7,6 +7,8 @@ package akka
import language.implicitConversions
package object actor {
@deprecated("implicit conversion is obsolete", "2.6.13")
@inline implicit final def actorRef2Scala(ref: ActorRef): ScalaActorRef = ref.asInstanceOf[ScalaActorRef]
@deprecated("implicit conversion is obsolete", "2.6.13")
@inline implicit final def scala2ActorRef(ref: ScalaActorRef): ActorRef = ref.asInstanceOf[ActorRef]
}

View file

@ -15,7 +15,7 @@ import scala.util.control.NonFatal
import com.typesafe.config.{ Config, ConfigFactory }
import akka.ConfigurationException
import akka.actor.{ actorRef2Scala, Actor, ActorRef, ActorSystem, DeadLetter, Deploy, DynamicAccess, Props }
import akka.actor.{ Actor, ActorRef, ActorSystem, DeadLetter, Deploy, DynamicAccess, Props }
import akka.dispatch.sysmsg.{
EarliestFirstSystemMessageList,
LatestFirstSystemMessageList,

View file

@ -10,7 +10,7 @@ import java.util.concurrent.atomic.AtomicReference
import scala.collection.immutable
import akka.actor.{ actorRef2Scala, ActorRef, ActorSystem }
import akka.actor.{ ActorRef, ActorSystem }
import akka.util.{ Subclassification, SubclassifiedIndex }
import akka.util.Index

View file

@ -10,7 +10,7 @@ import scala.annotation.tailrec
import scala.annotation.nowarn
import akka.actor.{ actorRef2Scala, ActorRef, ActorSystem }
import akka.actor.{ ActorRef, ActorSystem }
import akka.event.Logging.simpleName
import akka.util.Subclassification

View file

@ -8,7 +8,6 @@ import java.util.logging
import akka.actor.Actor
import akka.actor.ActorSystem
import akka.actor.actorRef2Scala
import akka.dispatch.RequiresMessageQueue
import akka.event.DummyClassForStringSources
import akka.event.EventStream

View file

@ -17,7 +17,7 @@ import scala.util.{ Failure, Success, Try }
import scala.annotation.nowarn
import com.typesafe.config.Config
import akka.actor.{ actorRef2Scala, Actor, ActorLogging }
import akka.actor.{ Actor, ActorLogging }
import akka.actor.Status
import akka.annotation.InternalApi
import akka.io.dns.AAAARecord

View file

@ -12,7 +12,7 @@ import java.nio.channels.SelectionKey._
import scala.annotation.tailrec
import scala.util.control.NonFatal
import akka.actor.{ actorRef2Scala, Actor, ActorLogging, ActorRef }
import akka.actor.{ Actor, ActorLogging, ActorRef }
import akka.actor.Status.Failure
import akka.dispatch.{ RequiresMessageQueue, UnboundedMessageQueueSemantics }
import akka.io.SelectionHandler._

View file

@ -11,7 +11,7 @@ import java.nio.channels.SelectionKey._
import scala.annotation.tailrec
import scala.util.control.NonFatal
import akka.actor.{ actorRef2Scala, Actor, ActorLogging, ActorRef }
import akka.actor.{ Actor, ActorLogging, ActorRef }
import akka.dispatch.{ RequiresMessageQueue, UnboundedMessageQueueSemantics }
import akka.io.Inet.DatagramChannelCreator
import akka.io.SelectionHandler._

View file

@ -9,7 +9,7 @@ import java.nio.channels.{ DatagramChannel, SelectionKey }
import scala.util.control.NonFatal
import akka.actor.{ actorRef2Scala, Actor, ActorLogging, ActorRef }
import akka.actor.{ Actor, ActorLogging, ActorRef }
import akka.io.SelectionHandler._
import akka.io.Udp.{ CommandFailed, Send }
import akka.io.dns.DnsProtocol

View file

@ -13,7 +13,7 @@ import scala.concurrent.duration.Duration
import scala.annotation.nowarn
import com.typesafe.config.Config
import akka.actor.{ actorRef2Scala, Actor, ActorLogging, ActorRefFactory, Deploy, ExtendedActorSystem, Props, Timers }
import akka.actor.{ Actor, ActorLogging, ActorRefFactory, Deploy, ExtendedActorSystem, Props, Timers }
import akka.annotation.InternalApi
import akka.dispatch.{ RequiresMessageQueue, UnboundedMessageQueueSemantics }
import akka.io.{ Dns, DnsExt, DnsProvider }

View file

@ -12,7 +12,7 @@ import scala.concurrent.Future
import scala.util.Try
import scala.util.control.NonFatal
import akka.actor.{ actorRef2Scala, Actor, ActorLogging, ActorRef, ActorRefFactory }
import akka.actor.{ Actor, ActorLogging, ActorRef, ActorRefFactory }
import akka.annotation.InternalApi
import akka.io.SimpleDnsCache
import akka.io.dns._

View file

@ -12,7 +12,7 @@ import scala.util.Try
import scala.annotation.nowarn
import akka.actor.{ actorRef2Scala, Actor, ActorLogging, ActorRef, NoSerializationVerificationNeeded, Props, Stash }
import akka.actor.{ Actor, ActorLogging, ActorRef, NoSerializationVerificationNeeded, Props, Stash }
import akka.actor.Status.Failure
import akka.annotation.InternalApi
import akka.io.{ IO, Tcp, Udp }

View file

@ -7,7 +7,7 @@ package akka.io.dns.internal
import java.net.InetSocketAddress
import akka.AkkaException
import akka.actor.{ actorRef2Scala, Actor, ActorLogging, ActorRef, Stash }
import akka.actor.{ Actor, ActorLogging, ActorRef, Stash }
import akka.annotation.InternalApi
import akka.io.Tcp
import akka.io.dns.internal.DnsClient.Answer

View file

@ -4,7 +4,7 @@
package akka.pattern
import akka.actor.{ actorRef2Scala, Actor, ActorRef, Props }
import akka.actor.{ Actor, ActorRef, Props }
import akka.annotation.InternalApi
/**

View file

@ -12,7 +12,7 @@ import scala.util.{ Failure, Success }
import language.implicitConversions
import akka.actor.{ actorRef2Scala, Actor, ActorRef, Status }
import akka.actor.{ Actor, ActorRef, Status }
import akka.actor.ActorSelection
import akka.util.unused

View file

@ -6,7 +6,7 @@ package akka.pattern.internal
import scala.concurrent.duration.FiniteDuration
import akka.actor.{ actorRef2Scala, Actor, ActorLogging, OneForOneStrategy, Props, SupervisorStrategy, Terminated }
import akka.actor.{ Actor, ActorLogging, OneForOneStrategy, Props, SupervisorStrategy, Terminated }
import akka.actor.SupervisorStrategy.{ Directive, Escalate }
import akka.annotation.InternalApi
import akka.pattern.{

View file

@ -6,7 +6,7 @@ package akka.routing
import java.util.{ Set, TreeSet }
import akka.actor.{ actorRef2Scala, Actor, ActorRef }
import akka.actor.{ Actor, ActorRef }
sealed trait ListenerMessage
final case class Listen(listener: ActorRef) extends ListenerMessage

View file

@ -18,7 +18,6 @@ import akka.actor.PoisonPill
import akka.actor.Props
import akka.actor.SupervisorStrategy
import akka.actor.Terminated
import akka.actor.actorRef2Scala
import akka.dispatch.Envelope
import akka.dispatch.MessageDispatcher
import akka.util.ccompat._

View file

@ -4,7 +4,7 @@
package akka.util
import akka.actor.{ actorRef2Scala, ActorRef, Dropped }
import akka.actor.{ ActorRef, Dropped }
import akka.annotation.InternalApi
import akka.japi.function.Procedure2

View file

@ -7,7 +7,6 @@ package akka.cluster.metrics
import scala.concurrent.duration._
import scala.language.postfixOps
import akka.actor._
import akka.cluster.Cluster
import akka.cluster.metrics.StandardMetrics._
import akka.testkit._

View file

@ -6,7 +6,6 @@ package akka.cluster.sharding
import scala.concurrent.duration._
import akka.actor._
import akka.cluster.MemberStatus
import akka.cluster.sharding.ShardCoordinator.ShardAllocationStrategy
import akka.cluster.sharding.ShardRegion.{ ClusterShardingStats, GetClusterShardingStats }

View file

@ -8,7 +8,6 @@ import scala.concurrent.duration._
import com.typesafe.config.{ Config, ConfigFactory }
import akka.actor._
import akka.cluster.sharding.ShardRegion.{ ClusterShardingStats, GetClusterShardingStats }
import akka.testkit._

View file

@ -1,5 +1,5 @@
/*
* Copyright (C) 2009-2020 Lightbend Inc. <https://www.lightbend.com>
* Copyright (C) 2009-2021 Lightbend Inc. <https://www.lightbend.com>
*/
package akka.cluster

View file

@ -1,5 +1,5 @@
/*
* Copyright (C) 2009-2020 Lightbend Inc. <https://www.lightbend.com>
* Copyright (C) 2009-2021 Lightbend Inc. <https://www.lightbend.com>
*/
package akka.cluster

View file

@ -4,7 +4,6 @@
package akka.persistence.journal
import akka.actor._
import akka.persistence.JournalProtocol
import akka.persistence.PersistentRepr
import akka.testkit._

View file

@ -16,7 +16,6 @@ import com.typesafe.config.ConfigFactory
import org.reactivestreams.{ Publisher, Subscriber }
import akka.NotUsed
import akka.actor._
import akka.stream._
import akka.stream.impl._
import akka.stream.testkit._

View file

@ -4,7 +4,7 @@
package akka.testkit
import akka.actor.{ actorRef2Scala, Actor, ActorRef, Props }
import akka.actor.{ Actor, ActorRef, Props }
/**
* A collection of common actor patterns used in tests.

View file

@ -11,7 +11,7 @@ import scala.concurrent.duration.Duration
import scala.reflect.ClassTag
import scala.util.matching.Regex
import akka.actor.{ actorRef2Scala, ActorSystem, DeadLetter, UnhandledMessage }
import akka.actor.{ ActorSystem, DeadLetter, UnhandledMessage }
import akka.actor.Dropped
import akka.actor.NoSerializationVerificationNeeded
import akka.dispatch.sysmsg.{ SystemMessage, Terminate }

View file

@ -4,7 +4,6 @@
package akka.testkit
import akka.actor.actorRef2Scala
class TestActorsSpec extends AkkaSpec with ImplicitSender {
import TestActors.{ echoActorProps, forwardActorProps }