diff --git a/akka-actor-tests/src/test/scala/akka/actor/ActorLifeCycleSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/ActorLifeCycleSpec.scala index ffbc1244c8..d151e6987d 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/ActorLifeCycleSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/ActorLifeCycleSpec.scala @@ -128,7 +128,7 @@ class ActorLifeCycleSpec extends AkkaSpec("akka.actor.serialize-messages=off") w } "clear the behavior stack upon restart" in { - case class Become(recv: ActorContext ⇒ Receive) + final case class Become(recv: ActorContext ⇒ Receive) val a = system.actorOf(Props(new Actor { def receive = { case Become(beh) ⇒ { context.become(beh(context), discardOld = false); sender() ! "ok" } diff --git a/akka-actor-tests/src/test/scala/akka/actor/ActorLookupSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/ActorLookupSpec.scala index a9bf0dbf6b..92a9d09f3c 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/ActorLookupSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/ActorLookupSpec.scala @@ -12,13 +12,13 @@ import akka.pattern.ask object ActorLookupSpec { - case class Create(child: String) + final case class Create(child: String) trait Query - case class LookupElems(path: Iterable[String]) extends Query - case class LookupString(path: String) extends Query - case class LookupPath(path: ActorPath) extends Query - case class GetSender(to: ActorRef) extends Query + final case class LookupElems(path: Iterable[String]) extends Query + final case class LookupString(path: String) extends Query + final case class LookupPath(path: ActorPath) extends Query + final case class GetSender(to: ActorRef) extends Query val p = Props[Node] diff --git a/akka-actor-tests/src/test/scala/akka/actor/ActorMailboxSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/ActorMailboxSpec.scala index 5cdf5010f9..583237ffaf 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/ActorMailboxSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/ActorMailboxSpec.scala @@ -171,7 +171,7 @@ object ActorMailboxSpec { classOf[BoundedDequeBasedMessageQueueSemantics]) trait MCBoundedMessageQueueSemantics extends MessageQueue with MultipleConsumerSemantics - case class MCBoundedMailbox(val capacity: Int, val pushTimeOut: FiniteDuration) + final case class MCBoundedMailbox(val capacity: Int, val pushTimeOut: FiniteDuration) extends MailboxType with ProducesMessageQueue[MCBoundedMessageQueueSemantics] { def this(settings: ActorSystem.Settings, config: Config) = this(config.getInt("mailbox-capacity"), diff --git a/akka-actor-tests/src/test/scala/akka/actor/ActorPerfSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/ActorPerfSpec.scala index 7fe54a59e3..9cc7f802b7 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/ActorPerfSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/ActorPerfSpec.scala @@ -13,11 +13,11 @@ import scala.util.Try object ActorPerfSpec { - case class Create(number: Int, props: () ⇒ Props) + final case class Create(number: Int, props: () ⇒ Props) case object Created case object IsAlive case object Alive - case class WaitForChildren(number: Int) + final case class WaitForChildren(number: Int) case object Waited class EmptyActor extends Actor { 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 abe7e865a6..1afaaf2e8a 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/ActorRefSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/ActorRefSpec.scala @@ -18,7 +18,7 @@ import akka.TestUtils.verifyActorTermination object ActorRefSpec { - case class ReplyTo(sender: ActorRef) + final case class ReplyTo(sender: ActorRef) class ReplyActor extends Actor { var replyTo: ActorRef = null diff --git a/akka-actor-tests/src/test/scala/akka/actor/ActorSelectionSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/ActorSelectionSpec.scala index 577d4723e7..f45b7b5e4f 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/ActorSelectionSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/ActorSelectionSpec.scala @@ -12,13 +12,13 @@ import akka.pattern.ask object ActorSelectionSpec { - case class Create(child: String) + final case class Create(child: String) trait Query - case class SelectString(path: String) extends Query - case class SelectPath(path: ActorPath) extends Query - case class GetSender(to: ActorRef) extends Query - case class Forward(path: String, msg: Any) extends Query + final case class SelectString(path: String) extends Query + final case class SelectPath(path: ActorPath) extends Query + final case class GetSender(to: ActorRef) extends Query + final case class Forward(path: String, msg: Any) extends Query val p = Props[Node] diff --git a/akka-actor-tests/src/test/scala/akka/actor/ActorSystemSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/ActorSystemSpec.scala index d0e3486417..5f03bc6c89 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/ActorSystemSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/ActorSystemSpec.scala @@ -71,7 +71,7 @@ object ActorSystemSpec { } } - case class FastActor(latch: TestLatch, testActor: ActorRef) extends Actor { + final case class FastActor(latch: TestLatch, testActor: ActorRef) extends Actor { val ref1 = context.actorOf(Props.empty) val ref2 = context.actorFor(ref1.path.toString) testActor ! ref2.getClass diff --git a/akka-actor-tests/src/test/scala/akka/actor/Bench.scala b/akka-actor-tests/src/test/scala/akka/actor/Bench.scala index 92b019492d..e5e65aeaa6 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/Bench.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/Bench.scala @@ -8,9 +8,9 @@ package akka.actor object Chameneos { sealed trait ChameneosEvent - case class Meet(from: ActorRef, colour: Colour) extends ChameneosEvent - case class Change(colour: Colour) extends ChameneosEvent - case class MeetingCount(count: Int) extends ChameneosEvent + final case class Meet(from: ActorRef, colour: Colour) extends ChameneosEvent + final case class Change(colour: Colour) extends ChameneosEvent + final case class MeetingCount(count: Int) extends ChameneosEvent case object Exit extends ChameneosEvent abstract class Colour diff --git a/akka-actor-tests/src/test/scala/akka/actor/DeathWatchSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/DeathWatchSpec.scala index ce81ed0e84..a6a1cb75fc 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/DeathWatchSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/DeathWatchSpec.scala @@ -27,13 +27,13 @@ object DeathWatchSpec { * Forwarding `Terminated` to non-watching testActor is not possible, * and therefore the `Terminated` message is wrapped. */ - case class WrappedTerminated(t: Terminated) + final case class WrappedTerminated(t: Terminated) - case class W(ref: ActorRef) - case class U(ref: ActorRef) - case class FF(fail: Failed) + final case class W(ref: ActorRef) + final case class U(ref: ActorRef) + final case class FF(fail: Failed) - case class Latches(t1: TestLatch, t2: TestLatch) extends NoSerializationVerificationNeeded + final case class Latches(t1: TestLatch, t2: TestLatch) extends NoSerializationVerificationNeeded } trait DeathWatchSpec { this: AkkaSpec with ImplicitSender with DefaultTimeout ⇒ 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 97b2ced440..0d130c220a 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/FSMActorSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/FSMActorSpec.scala @@ -101,7 +101,7 @@ object FSMActorSpec { private def doUnlock(): Unit = unlockedLatch.open() } - case class CodeState(soFar: String, code: String) + final case class CodeState(soFar: String, code: String) } @org.junit.runner.RunWith(classOf[org.scalatest.junit.JUnitRunner]) diff --git a/akka-actor-tests/src/test/scala/akka/actor/FSMTimingSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/FSMTimingSpec.scala index 4b2bd2a18b..1228c646c3 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/FSMTimingSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/FSMTimingSpec.scala @@ -170,7 +170,7 @@ object FSMTimingSpec { case object Cancel case object SetHandler - case class Unhandled(msg: AnyRef) + final case class Unhandled(msg: AnyRef) class StateMachine(tester: ActorRef) extends Actor with FSM[State, Int] { import FSM._ diff --git a/akka-actor-tests/src/test/scala/akka/actor/SchedulerSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/SchedulerSpec.scala index adccd57480..b82380f1c8 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/SchedulerSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/SchedulerSpec.scala @@ -192,7 +192,7 @@ trait SchedulerSpec extends BeforeAndAfterEach with DefaultTimeout with Implicit "never fire prematurely" taggedAs TimingTest in { val ticks = new TestLatch(300) - case class Msg(ts: Long) + final case class Msg(ts: Long) val actor = system.actorOf(Props(new Actor { def receive = { diff --git a/akka-actor-tests/src/test/scala/akka/actor/SupervisorHierarchySpec.scala b/akka-actor-tests/src/test/scala/akka/actor/SupervisorHierarchySpec.scala index 183712d889..a2ca564e8f 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/SupervisorHierarchySpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/SupervisorHierarchySpec.scala @@ -53,18 +53,18 @@ object SupervisorHierarchySpec { } } - case class Ready(ref: ActorRef) - case class Died(path: ActorPath) + final case class Ready(ref: ActorRef) + final case class Died(path: ActorPath) case object Abort case object PingOfDeath case object PongOfDeath - case class Event(msg: Any, identity: Long) { val time: Long = System.nanoTime } - case class ErrorLog(msg: String, log: Vector[Event]) - case class Failure(directive: Directive, stop: Boolean, depth: Int, var failPre: Int, var failPost: Int, val failConstr: Int, stopKids: Int) + final case class Event(msg: Any, identity: Long) { val time: Long = System.nanoTime } + final case class ErrorLog(msg: String, log: Vector[Event]) + final case class Failure(directive: Directive, stop: Boolean, depth: Int, var failPre: Int, var failPost: Int, val failConstr: Int, stopKids: Int) extends RuntimeException("Failure") with NoStackTrace { override def toString = productPrefix + productIterator.mkString("(", ",", ")") } - case class Dump(level: Int) + final case class Dump(level: Int) val config = ConfigFactory.parseString(""" hierarchy { @@ -112,7 +112,7 @@ object SupervisorHierarchySpec { * upon Restart or would have to be managed by the highest supervisor (which * is undesirable). */ - case class HierarchyState(log: Vector[Event], kids: Map[ActorPath, Int], failConstr: Failure) + final case class HierarchyState(log: Vector[Event], kids: Map[ActorPath, Int], failConstr: Failure) val stateCache = new ConcurrentHashMap[ActorPath, HierarchyState]() @volatile var ignoreFailConstr = false @@ -320,11 +320,11 @@ object SupervisorHierarchySpec { } case object Work - case class GCcheck(kids: Vector[WeakReference[ActorRef]]) + final case class GCcheck(kids: Vector[WeakReference[ActorRef]]) sealed trait Action - case class Ping(ref: ActorRef) extends Action - case class Fail(ref: ActorRef, directive: Directive) extends Action + final case class Ping(ref: ActorRef) extends Action + final case class Fail(ref: ActorRef, directive: Directive) extends Action sealed trait State case object Idle extends State diff --git a/akka-actor-tests/src/test/scala/akka/actor/dispatch/ActorModelSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/dispatch/ActorModelSpec.scala index 601173af0b..5ec6a34aee 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/dispatch/ActorModelSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/dispatch/ActorModelSpec.scala @@ -31,35 +31,35 @@ object ActorModelSpec { sealed trait ActorModelMessage extends NoSerializationVerificationNeeded - case class TryReply(expect: Any) extends ActorModelMessage + final case class TryReply(expect: Any) extends ActorModelMessage - case class Reply(expect: Any) extends ActorModelMessage + final case class Reply(expect: Any) extends ActorModelMessage - case class Forward(to: ActorRef, msg: Any) extends ActorModelMessage + final case class Forward(to: ActorRef, msg: Any) extends ActorModelMessage - case class CountDown(latch: CountDownLatch) extends ActorModelMessage + final case class CountDown(latch: CountDownLatch) extends ActorModelMessage - case class Increment(counter: AtomicLong) extends ActorModelMessage + final case class Increment(counter: AtomicLong) extends ActorModelMessage - case class AwaitLatch(latch: CountDownLatch) extends ActorModelMessage + final case class AwaitLatch(latch: CountDownLatch) extends ActorModelMessage - case class Meet(acknowledge: CountDownLatch, waitFor: CountDownLatch) extends ActorModelMessage + final case class Meet(acknowledge: CountDownLatch, waitFor: CountDownLatch) extends ActorModelMessage - case class CountDownNStop(latch: CountDownLatch) extends ActorModelMessage + final case class CountDownNStop(latch: CountDownLatch) extends ActorModelMessage - case class Wait(time: Long) extends ActorModelMessage + final case class Wait(time: Long) extends ActorModelMessage - case class WaitAck(time: Long, latch: CountDownLatch) extends ActorModelMessage + final case class WaitAck(time: Long, latch: CountDownLatch) extends ActorModelMessage case object Interrupt extends ActorModelMessage - case class InterruptNicely(expect: Any) extends ActorModelMessage + final case class InterruptNicely(expect: Any) extends ActorModelMessage case object Restart extends ActorModelMessage case object DoubleStop extends ActorModelMessage - case class ThrowException(e: Throwable) extends ActorModelMessage + final case class ThrowException(e: Throwable) extends ActorModelMessage val Ping = "Ping" val Pong = "Pong" diff --git a/akka-actor-tests/src/test/scala/akka/dispatch/FutureSpec.scala b/akka-actor-tests/src/test/scala/akka/dispatch/FutureSpec.scala index ccff96a2cb..559e35d870 100644 --- a/akka-actor-tests/src/test/scala/akka/dispatch/FutureSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/dispatch/FutureSpec.scala @@ -49,8 +49,8 @@ object FutureSpec { } } - case class Req[T](req: T) - case class Res[T](res: T) + final case class Req[T](req: T) + final case class Res[T](res: T) } class JavaFutureSpec extends JavaFutureTests with JUnitSuiteLike @@ -704,22 +704,22 @@ class FutureSpec extends AkkaSpec with Checkers with BeforeAndAfterAll with Defa } sealed trait IntAction { def apply(that: Int): Int } - case class IntAdd(n: Int) extends IntAction { def apply(that: Int) = that + n } - case class IntSub(n: Int) extends IntAction { def apply(that: Int) = that - n } - case class IntMul(n: Int) extends IntAction { def apply(that: Int) = that * n } - case class IntDiv(n: Int) extends IntAction { def apply(that: Int) = that / n } + final case class IntAdd(n: Int) extends IntAction { def apply(that: Int) = that + n } + final case class IntSub(n: Int) extends IntAction { def apply(that: Int) = that - n } + final case class IntMul(n: Int) extends IntAction { def apply(that: Int) = that * n } + final case class IntDiv(n: Int) extends IntAction { def apply(that: Int) = that / n } sealed trait FutureAction { def /:(that: Try[Int]): Try[Int] def /:(that: Future[Int]): Future[Int] } - case class MapAction(action: IntAction) extends FutureAction { + final case class MapAction(action: IntAction) extends FutureAction { def /:(that: Try[Int]): Try[Int] = that map action.apply def /:(that: Future[Int]): Future[Int] = that map action.apply } - case class FlatMapAction(action: IntAction) extends FutureAction { + final case class FlatMapAction(action: IntAction) extends FutureAction { def /:(that: Try[Int]): Try[Int] = that map action.apply def /:(that: Future[Int]): Future[Int] = that flatMap (n ⇒ Future.successful(action(n))) } diff --git a/akka-actor-tests/src/test/scala/akka/event/EventStreamSpec.scala b/akka-actor-tests/src/test/scala/akka/event/EventStreamSpec.scala index 2b29b61375..8302d5b80e 100644 --- a/akka-actor-tests/src/test/scala/akka/event/EventStreamSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/event/EventStreamSpec.scala @@ -33,9 +33,9 @@ object EventStreamSpec { } """) - case class M(i: Int) + final case class M(i: Int) - case class SetTarget(ref: ActorRef) + final case class SetTarget(ref: ActorRef) class MyLog extends Actor { var dst: ActorRef = context.system.deadLetters diff --git a/akka-actor-tests/src/test/scala/akka/event/LoggerSpec.scala b/akka-actor-tests/src/test/scala/akka/event/LoggerSpec.scala index 8fb2b6c613..fed90d381a 100644 --- a/akka-actor-tests/src/test/scala/akka/event/LoggerSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/event/LoggerSpec.scala @@ -69,7 +69,7 @@ object LoggerSpec { } """).withFallback(AkkaSpec.testConf) - case class SetTarget(ref: ActorRef, qualifier: Int) + final case class SetTarget(ref: ActorRef, qualifier: Int) class TestLogger1 extends TestLogger(1) class TestLogger2 extends TestLogger(2) diff --git a/akka-actor-tests/src/test/scala/akka/io/TcpConnectionSpec.scala b/akka-actor-tests/src/test/scala/akka/io/TcpConnectionSpec.scala index 655925e1e4..b130ead288 100644 --- a/akka-actor-tests/src/test/scala/akka/io/TcpConnectionSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/io/TcpConnectionSpec.scala @@ -27,7 +27,7 @@ import java.util.Random object TcpConnectionSpec { case class Ack(i: Int) extends Event object Ack extends Ack(0) - case class Registration(channel: SelectableChannel, initialOps: Int) extends NoSerializationVerificationNeeded + final case class Registration(channel: SelectableChannel, initialOps: Int) extends NoSerializationVerificationNeeded } class TcpConnectionSpec extends AkkaSpec(""" diff --git a/akka-actor-tests/src/test/scala/akka/oldrouting/ConsistentHashingRouterSpec.scala b/akka-actor-tests/src/test/scala/akka/oldrouting/ConsistentHashingRouterSpec.scala index 9444a10f32..02215b2d83 100644 --- a/akka-actor-tests/src/test/scala/akka/oldrouting/ConsistentHashingRouterSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/oldrouting/ConsistentHashingRouterSpec.scala @@ -39,13 +39,13 @@ object ConsistentHashingRouterSpec { } } - case class Msg(key: Any, data: String) extends ConsistentHashable { + final case class Msg(key: Any, data: String) extends ConsistentHashable { override def consistentHashKey = key } - case class MsgKey(name: String) + final case class MsgKey(name: String) - case class Msg2(key: Any, data: String) + final case class Msg2(key: Any, data: String) } @org.junit.runner.RunWith(classOf[org.scalatest.junit.JUnitRunner]) diff --git a/akka-actor-tests/src/test/scala/akka/oldrouting/RoutingSpec.scala b/akka-actor-tests/src/test/scala/akka/oldrouting/RoutingSpec.scala index 45b942aa5d..7e6e7a985b 100644 --- a/akka-actor-tests/src/test/scala/akka/oldrouting/RoutingSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/oldrouting/RoutingSpec.scala @@ -105,7 +105,7 @@ class RoutingSpec extends AkkaSpec(RoutingSpec.config) with DefaultTimeout with } "be able to send their routees" in { - case class TestRun(id: String, names: immutable.Iterable[String], actors: Int) + final case class TestRun(id: String, names: immutable.Iterable[String], actors: Int) val actor = system.actorOf(Props(new Actor { def receive = { case TestRun(id, names, actors) ⇒ @@ -543,7 +543,7 @@ class RoutingSpec extends AkkaSpec(RoutingSpec.config) with DefaultTimeout with Await.result(routedActor ? Broadcast(0), timeout.duration) should be(14) } - case class Stop(id: Option[Int] = None) + final case class Stop(id: Option[Int] = None) def newActor(id: Int, shudownLatch: Option[TestLatch] = None) = system.actorOf(Props(new Actor { def receive = { diff --git a/akka-actor-tests/src/test/scala/akka/pattern/PatternSpec.scala b/akka-actor-tests/src/test/scala/akka/pattern/PatternSpec.scala index a8c629d175..300f9f212d 100644 --- a/akka-actor-tests/src/test/scala/akka/pattern/PatternSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/pattern/PatternSpec.scala @@ -13,7 +13,7 @@ import scala.concurrent.{ Future, Promise, Await } import scala.concurrent.duration._ object PatternSpec { - case class Work(duration: Duration) + final case class Work(duration: Duration) class TargetActor extends Actor { def receive = { case (testLatch: TestLatch, duration: FiniteDuration) ⇒ diff --git a/akka-actor-tests/src/test/scala/akka/performance/microbench/TellLatencyPerformanceSpec.scala b/akka-actor-tests/src/test/scala/akka/performance/microbench/TellLatencyPerformanceSpec.scala index 0f3a86af61..07ea7d5ce2 100644 --- a/akka-actor-tests/src/test/scala/akka/performance/microbench/TellLatencyPerformanceSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/performance/microbench/TellLatencyPerformanceSpec.scala @@ -83,7 +83,7 @@ object TellLatencyPerformanceSpec { val random: Random = new Random(0) case object Run - case class Msg(nanoTime: Long = System.nanoTime) + final case class Msg(nanoTime: Long = System.nanoTime) class Waypoint(next: ActorRef) extends Actor { def receive = { diff --git a/akka-actor-tests/src/test/scala/akka/performance/trading/domain/Order.scala b/akka-actor-tests/src/test/scala/akka/performance/trading/domain/Order.scala index f8919d05e7..15a73a0e36 100644 --- a/akka-actor-tests/src/test/scala/akka/performance/trading/domain/Order.scala +++ b/akka-actor-tests/src/test/scala/akka/performance/trading/domain/Order.scala @@ -8,7 +8,7 @@ trait Order { def withNanoTime: Order } -case class Bid( +final case class Bid( orderbookSymbol: String, price: Long, volume: Long, @@ -22,7 +22,7 @@ case class Bid( def withNanoTime: Bid = copy(nanoTime = System.nanoTime) } -case class Ask( +final case class Ask( orderbookSymbol: String, price: Long, volume: Long, diff --git a/akka-actor-tests/src/test/scala/akka/performance/trading/system/OrderReceiver.scala b/akka-actor-tests/src/test/scala/akka/performance/trading/system/OrderReceiver.scala index bfa8fdb54b..2dacb20c29 100644 --- a/akka-actor-tests/src/test/scala/akka/performance/trading/system/OrderReceiver.scala +++ b/akka-actor-tests/src/test/scala/akka/performance/trading/system/OrderReceiver.scala @@ -46,4 +46,4 @@ class AkkaOrderReceiver extends Actor with OrderReceiver with ActorLogging { } } -case class MatchingEngineRouting[ME](mapping: Map[ME, List[String]]) +final case class MatchingEngineRouting[ME](mapping: Map[ME, List[String]]) diff --git a/akka-actor-tests/src/test/scala/akka/performance/trading/system/Rsp.scala b/akka-actor-tests/src/test/scala/akka/performance/trading/system/Rsp.scala index 3151462e33..e71625bacb 100644 --- a/akka-actor-tests/src/test/scala/akka/performance/trading/system/Rsp.scala +++ b/akka-actor-tests/src/test/scala/akka/performance/trading/system/Rsp.scala @@ -2,4 +2,4 @@ package akka.performance.trading.system import akka.performance.trading.domain.Order -case class Rsp(order: Order, status: Boolean) +final case class Rsp(order: Order, status: Boolean) diff --git a/akka-actor-tests/src/test/scala/akka/performance/trading/system/TradingSystem.scala b/akka-actor-tests/src/test/scala/akka/performance/trading/system/TradingSystem.scala index be0cd105a0..dcff294eca 100644 --- a/akka-actor-tests/src/test/scala/akka/performance/trading/system/TradingSystem.scala +++ b/akka-actor-tests/src/test/scala/akka/performance/trading/system/TradingSystem.scala @@ -31,7 +31,7 @@ trait TradingSystem { def shutdown() - case class MatchingEngineInfo(primary: ME, standby: Option[ME], orderbooks: List[Orderbook]) + final case class MatchingEngineInfo(primary: ME, standby: Option[ME], orderbooks: List[Orderbook]) } class AkkaTradingSystem(val system: ActorSystem) extends TradingSystem { diff --git a/akka-actor-tests/src/test/scala/akka/performance/workbench/BenchResultRepository.scala b/akka-actor-tests/src/test/scala/akka/performance/workbench/BenchResultRepository.scala index 7bc3fec9d1..1e8d129860 100644 --- a/akka-actor-tests/src/test/scala/akka/performance/workbench/BenchResultRepository.scala +++ b/akka-actor-tests/src/test/scala/akka/performance/workbench/BenchResultRepository.scala @@ -49,7 +49,7 @@ class FileBenchResultRepository extends BenchResultRepository { private def htmlDirExists: Boolean = new File(htmlDir).exists protected val maxHistorical = 7 - case class Key(name: String, load: Int) + final case class Key(name: String, load: Int) def add(stats: Stats): Unit = synchronized { val values = statsByName.getOrElseUpdate(stats.name, Vector.empty) diff --git a/akka-actor-tests/src/test/scala/akka/performance/workbench/Stats.scala b/akka-actor-tests/src/test/scala/akka/performance/workbench/Stats.scala index ac351ad961..7385dd5cbd 100644 --- a/akka-actor-tests/src/test/scala/akka/performance/workbench/Stats.scala +++ b/akka-actor-tests/src/test/scala/akka/performance/workbench/Stats.scala @@ -3,7 +3,7 @@ package akka.performance.workbench import scala.collection.immutable.TreeMap @SerialVersionUID(1L) -case class Stats( +final case class Stats( name: String, load: Int, timestamp: Long = System.currentTimeMillis, diff --git a/akka-actor-tests/src/test/scala/akka/routing/ConfiguredLocalRoutingSpec.scala b/akka-actor-tests/src/test/scala/akka/routing/ConfiguredLocalRoutingSpec.scala index d8021853f9..bccc4b350b 100644 --- a/akka-actor-tests/src/test/scala/akka/routing/ConfiguredLocalRoutingSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/routing/ConfiguredLocalRoutingSpec.scala @@ -60,12 +60,12 @@ object ConfiguredLocalRoutingSpec { override def createRouter(system: ActorSystem): Router = Router(MyRoutingLogic(config)) } - case class MyRoutingLogic(config: Config) extends RoutingLogic { + final case class MyRoutingLogic(config: Config) extends RoutingLogic { override def select(message: Any, routees: immutable.IndexedSeq[Routee]): Routee = MyRoutee(config.getString(message.toString)) } - case class MyRoutee(reply: String) extends Routee { + final case class MyRoutee(reply: String) extends Routee { override def send(message: Any, sender: ActorRef): Unit = sender ! reply } diff --git a/akka-actor-tests/src/test/scala/akka/routing/ConsistentHashingRouterSpec.scala b/akka-actor-tests/src/test/scala/akka/routing/ConsistentHashingRouterSpec.scala index 8e1aaddfcb..77c0b4658d 100644 --- a/akka-actor-tests/src/test/scala/akka/routing/ConsistentHashingRouterSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/routing/ConsistentHashingRouterSpec.scala @@ -37,13 +37,13 @@ object ConsistentHashingRouterSpec { } } - case class Msg(key: Any, data: String) extends ConsistentHashable { + final case class Msg(key: Any, data: String) extends ConsistentHashable { override def consistentHashKey = key } - case class MsgKey(name: String) + final case class MsgKey(name: String) - case class Msg2(key: Any, data: String) + final case class Msg2(key: Any, data: String) } @org.junit.runner.RunWith(classOf[org.scalatest.junit.JUnitRunner]) diff --git a/akka-actor-tests/src/test/scala/akka/routing/ScatterGatherFirstCompletedSpec.scala b/akka-actor-tests/src/test/scala/akka/routing/ScatterGatherFirstCompletedSpec.scala index b867062828..a59645a497 100644 --- a/akka-actor-tests/src/test/scala/akka/routing/ScatterGatherFirstCompletedSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/routing/ScatterGatherFirstCompletedSpec.scala @@ -16,7 +16,7 @@ object ScatterGatherFirstCompletedSpec { def receive = { case _ ⇒ } } - case class Stop(id: Option[Int] = None) + final case class Stop(id: Option[Int] = None) def newActor(id: Int, shudownLatch: Option[TestLatch] = None)(implicit system: ActorSystem) = system.actorOf(Props(new Actor { diff --git a/akka-actor-tests/src/test/scala/akka/serialization/SerializeSpec.scala b/akka-actor-tests/src/test/scala/akka/serialization/SerializeSpec.scala index ee25bebdb6..366cd46dc2 100644 --- a/akka-actor-tests/src/test/scala/akka/serialization/SerializeSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/serialization/SerializeSpec.scala @@ -42,11 +42,11 @@ object SerializationTests { """ @BeanInfo - case class Address(no: String, street: String, city: String, zip: String) { def this() = this("", "", "", "") } + final case class Address(no: String, street: String, city: String, zip: String) { def this() = this("", "", "", "") } @BeanInfo - case class Person(name: String, age: Int, address: Address) { def this() = this("", 0, null) } + final case class Person(name: String, age: Int, address: Address) { def this() = this("", 0, null) } - case class Record(id: Int, person: Person) + final case class Record(id: Int, person: Person) class SimpleMessage(s: String) extends TestSerializable @@ -424,6 +424,6 @@ protected[akka] class TestSerializer extends Serializer { } @SerialVersionUID(1) -protected[akka] case class FakeThrowable(msg: String) extends Throwable(msg) with Serializable { +protected[akka] final case class FakeThrowable(msg: String) extends Throwable(msg) with Serializable { override def fillInStackTrace = null } diff --git a/akka-actor/src/main/scala/akka/actor/Actor.scala b/akka-actor/src/main/scala/akka/actor/Actor.scala index 55c7e2a3d0..58f891d6d9 100644 --- a/akka-actor/src/main/scala/akka/actor/Actor.scala +++ b/akka-actor/src/main/scala/akka/actor/Actor.scala @@ -60,7 +60,7 @@ case object Kill extends Kill { * is returned in the `ActorIdentity` message as `correlationId`. */ @SerialVersionUID(1L) -case class Identify(messageId: Any) extends AutoReceivedMessage +final case class Identify(messageId: Any) extends AutoReceivedMessage /** * Reply to [[akka.actor.Identify]]. Contains @@ -70,7 +70,7 @@ case class Identify(messageId: Any) extends AutoReceivedMessage * the `Identify` message. */ @SerialVersionUID(1L) -case class ActorIdentity(correlationId: Any, ref: Option[ActorRef]) { +final case class ActorIdentity(correlationId: Any, ref: Option[ActorRef]) { /** * Java API: `ActorRef` of the actor replying to the request or * null if no actor matched the request. @@ -93,7 +93,7 @@ case class ActorIdentity(correlationId: Any, ref: Option[ActorRef]) { * that the remote node hosting the watched actor was detected as unreachable */ @SerialVersionUID(1L) -case class Terminated private[akka] (@BeanProperty actor: ActorRef)( +final case class Terminated private[akka] (@BeanProperty actor: ActorRef)( @BeanProperty val existenceConfirmed: Boolean, @BeanProperty val addressTerminated: Boolean) extends AutoReceivedMessage with PossiblyHarmful @@ -107,7 +107,7 @@ case class Terminated private[akka] (@BeanProperty actor: ActorRef)( * and translates this event to [[akka.actor.Terminated]], which is sent itself. */ @SerialVersionUID(1L) -private[akka] case class AddressTerminated(address: Address) extends AutoReceivedMessage with PossiblyHarmful +private[akka] final case class AddressTerminated(address: Address) extends AutoReceivedMessage with PossiblyHarmful abstract class ReceiveTimeout extends PossiblyHarmful @@ -128,20 +128,20 @@ case object ReceiveTimeout extends ReceiveTimeout { * For instance, if you try to create an Actor that doesn't extend Actor. */ @SerialVersionUID(1L) -case class IllegalActorStateException private[akka] (message: String) extends AkkaException(message) +final case class IllegalActorStateException private[akka] (message: String) extends AkkaException(message) /** * ActorKilledException is thrown when an Actor receives the [[akka.actor.Kill]] message */ @SerialVersionUID(1L) -case class ActorKilledException private[akka] (message: String) extends AkkaException(message) with NoStackTrace +final case class ActorKilledException private[akka] (message: String) extends AkkaException(message) with NoStackTrace /** * An InvalidActorNameException is thrown when you try to convert something, usually a String, to an Actor name * which doesn't validate. */ @SerialVersionUID(1L) -case class InvalidActorNameException(message: String) extends AkkaException(message) +final case class InvalidActorNameException(message: String) extends AkkaException(message) /** * An ActorInitializationException is thrown when the the initialization logic for an Actor fails. @@ -178,7 +178,7 @@ object ActorInitializationException { * @param messageOption is the message which was optionally passed into preRestart() */ @SerialVersionUID(1L) -case class PreRestartException private[akka] (actor: ActorRef, cause: Throwable, originalCause: Throwable, messageOption: Option[Any]) +final case class PreRestartException private[akka] (actor: ActorRef, cause: Throwable, originalCause: Throwable, messageOption: Option[Any]) extends ActorInitializationException(actor, "exception in preRestart(" + (if (originalCause == null) "null" else originalCause.getClass) + ", " + @@ -194,7 +194,7 @@ case class PreRestartException private[akka] (actor: ActorRef, cause: Throwable, * @param originalCause is the exception which caused the restart in the first place */ @SerialVersionUID(1L) -case class PostRestartException private[akka] (actor: ActorRef, cause: Throwable, originalCause: Throwable) +final case class PostRestartException private[akka] (actor: ActorRef, cause: Throwable, originalCause: Throwable) extends ActorInitializationException(actor, "exception post restart (" + (if (originalCause == null) "null" else originalCause.getClass) + ")", cause) @@ -220,14 +220,14 @@ object OriginalRestartException { * Currently only `null` is an invalid message. */ @SerialVersionUID(1L) -case class InvalidMessageException private[akka] (message: String) extends AkkaException(message) +final case class InvalidMessageException private[akka] (message: String) extends AkkaException(message) /** * A DeathPactException is thrown by an Actor that receives a Terminated(someActor) message * that it doesn't handle itself, effectively crashing the Actor and escalating to the supervisor. */ @SerialVersionUID(1L) -case class DeathPactException private[akka] (dead: ActorRef) +final case class DeathPactException private[akka] (dead: ActorRef) extends AkkaException("Monitored actor [" + dead + "] terminated") with NoStackTrace @@ -242,7 +242,7 @@ class ActorInterruptedException private[akka] (cause: Throwable) extends AkkaExc * This message is published to the EventStream whenever an Actor receives a message it doesn't understand */ @SerialVersionUID(1L) -case class UnhandledMessage(@BeanProperty message: Any, @BeanProperty sender: ActorRef, @BeanProperty recipient: ActorRef) +final case class UnhandledMessage(@BeanProperty message: Any, @BeanProperty sender: ActorRef, @BeanProperty recipient: ActorRef) /** * Classes for passing status back to the sender. @@ -255,14 +255,14 @@ object Status { * This class/message type is preferably used to indicate success of some operation performed. */ @SerialVersionUID(1L) - case class Success(status: Any) extends Status + final case class Success(status: Any) extends Status /** * This class/message type is preferably used to indicate failure of some operation performed. * As an example, it is used to signal failure with AskSupport is used (ask/?). */ @SerialVersionUID(1L) - case class Failure(cause: Throwable) extends Status + final case class Failure(cause: Throwable) extends Status } /** diff --git a/akka-actor/src/main/scala/akka/actor/ActorRef.scala b/akka-actor/src/main/scala/akka/actor/ActorRef.scala index db65def88a..3d1d06f3a1 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorRef.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorRef.scala @@ -394,7 +394,7 @@ private[akka] class LocalActorRef private[akka] ( * INTERNAL API */ @SerialVersionUID(1L) -private[akka] case class SerializedActorRef private (path: String) { +private[akka] final case class SerializedActorRef private (path: String) { import akka.serialization.JavaSerializer.currentSystem def this(actorRef: ActorRef) = { @@ -451,7 +451,7 @@ private[akka] trait MinimalActorRef extends InternalActorRef with LocalRef { * to the ActorSystem's EventStream */ @SerialVersionUID(1L) -case class DeadLetter(message: Any, sender: ActorRef, recipient: ActorRef) { +final case class DeadLetter(message: Any, sender: ActorRef, recipient: ActorRef) { require(sender ne null, "DeadLetter sender may not be null") require(recipient ne null, "DeadLetter recipient may not be null") } diff --git a/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala b/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala index 58658d6780..03c42250f6 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorRefProvider.scala @@ -340,7 +340,7 @@ trait ActorRefFactory { /** * Internal Akka use only, used in implementation of system.stop(child). */ -private[akka] case class StopChild(child: ActorRef) +private[akka] final case class StopChild(child: ActorRef) /** * INTERNAL API diff --git a/akka-actor/src/main/scala/akka/actor/ActorSelection.scala b/akka-actor/src/main/scala/akka/actor/ActorSelection.scala index 7d410344d4..35333e7087 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorSelection.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorSelection.scala @@ -239,7 +239,7 @@ trait ScalaActorSelection { * message is delivered by traversing the various actor paths involved. */ @SerialVersionUID(1L) -private[akka] case class ActorSelectionMessage(msg: Any, elements: immutable.Iterable[SelectionPathElement]) +private[akka] final case class ActorSelectionMessage(msg: Any, elements: immutable.Iterable[SelectionPathElement]) extends AutoReceivedMessage with PossiblyHarmful { def identifyRequest: Option[Identify] = msg match { @@ -258,7 +258,7 @@ private[akka] sealed trait SelectionPathElement * INTERNAL API */ @SerialVersionUID(2L) -private[akka] case class SelectChildName(name: String) extends SelectionPathElement { +private[akka] final case class SelectChildName(name: String) extends SelectionPathElement { override def toString: String = name } @@ -266,7 +266,7 @@ private[akka] case class SelectChildName(name: String) extends SelectionPathElem * INTERNAL API */ @SerialVersionUID(2L) -private[akka] case class SelectChildPattern(patternStr: String) extends SelectionPathElement { +private[akka] final case class SelectChildPattern(patternStr: String) extends SelectionPathElement { val pattern: Pattern = Helpers.makePattern(patternStr) override def toString: String = patternStr } @@ -284,5 +284,5 @@ private[akka] case object SelectParent extends SelectionPathElement { * `Future` is completed with this failure. */ @SerialVersionUID(1L) -case class ActorNotFound(selection: ActorSelection) extends RuntimeException("Actor not found for: " + selection) +final case class ActorNotFound(selection: ActorSelection) extends RuntimeException("Actor not found for: " + selection) diff --git a/akka-actor/src/main/scala/akka/actor/FSM.scala b/akka-actor/src/main/scala/akka/actor/FSM.scala index f084b42f13..3206c35023 100644 --- a/akka-actor/src/main/scala/akka/actor/FSM.scala +++ b/akka-actor/src/main/scala/akka/actor/FSM.scala @@ -29,26 +29,26 @@ object FSM { * [[akka.actor.FSM.SubscribeTransitionCallBack]] before sending any * [[akka.actor.FSM.Transition]] messages. */ - case class CurrentState[S](fsmRef: ActorRef, state: S) + final case class CurrentState[S](fsmRef: ActorRef, state: S) /** * Message type which is used to communicate transitions between states to * all subscribed listeners (use [[akka.actor.FSM.SubscribeTransitionCallBack]]). */ - case class Transition[S](fsmRef: ActorRef, from: S, to: S) + final case class Transition[S](fsmRef: ActorRef, from: S, to: S) /** * Send this to an [[akka.actor.FSM]] to request first the [[FSM.CurrentState]] * and then a series of [[FSM.Transition]] updates. Cancel the subscription * using [[FSM.UnsubscribeTransitionCallBack]]. */ - case class SubscribeTransitionCallBack(actorRef: ActorRef) + final case class SubscribeTransitionCallBack(actorRef: ActorRef) /** * Unsubscribe from [[akka.actor.FSM.Transition]] notifications which was * effected by sending the corresponding [[akka.actor.FSM.SubscribeTransitionCallBack]]. */ - case class UnsubscribeTransitionCallBack(actorRef: ActorRef) + final case class UnsubscribeTransitionCallBack(actorRef: ActorRef) /** * Reason why this [[akka.actor.FSM]] is shutting down. @@ -71,7 +71,7 @@ object FSM { * an error, e.g. if the state to transition into does not exist. You can use * this to communicate a more precise cause to the [[akka.actor.FSM.onTermination]] block. */ - case class Failure(cause: Any) extends Reason + final case class Failure(cause: Any) extends Reason /** * This case object is received in case of a state timeout. @@ -81,13 +81,13 @@ object FSM { /** * INTERNAL API */ - private case class TimeoutMarker(generation: Long) + private final case class TimeoutMarker(generation: Long) /** * INTERNAL API */ // FIXME: what about the cancellable? - private[akka] case class Timer(name: String, msg: Any, repeat: Boolean, generation: Int)(context: ActorContext) + private[akka] final case class Timer(name: String, msg: Any, repeat: Boolean, generation: Int)(context: ActorContext) extends NoSerializationVerificationNeeded { private var ref: Option[Cancellable] = _ private val scheduler = context.system.scheduler @@ -116,14 +116,14 @@ object FSM { /** * Log Entry of the [[akka.actor.LoggingFSM]], can be obtained by calling `getLog`. */ - case class LogEntry[S, D](stateName: S, stateData: D, event: Any) + final case class LogEntry[S, D](stateName: S, stateData: D, event: Any) /** * This captures all of the managed state of the [[akka.actor.FSM]]: the state * name, the state data, possibly custom timeout, stop reason and replies * accumulated while processing the last message. */ - case class State[S, D](stateName: S, stateData: D, timeout: Option[FiniteDuration] = None, stopReason: Option[Reason] = None, replies: List[Any] = Nil) { + final case class State[S, D](stateName: S, stateData: D, timeout: Option[FiniteDuration] = None, stopReason: Option[Reason] = None, replies: List[Any] = Nil) { /** * Modify state transition descriptor to include a state timeout for the @@ -165,13 +165,13 @@ object FSM { * All messages sent to the [[akka.actor.FSM]] will be wrapped inside an * `Event`, which allows pattern matching to extract both state and data. */ - case class Event[D](event: Any, stateData: D) extends NoSerializationVerificationNeeded + final case class Event[D](event: Any, stateData: D) extends NoSerializationVerificationNeeded /** * Case class representing the state of the [[akka.actor.FSM]] whithin the * `onTermination` block. */ - case class StopEvent[S, D](reason: Reason, currentState: S, stateData: D) extends NoSerializationVerificationNeeded + final case class StopEvent[S, D](reason: Reason, currentState: S, stateData: D) extends NoSerializationVerificationNeeded } diff --git a/akka-actor/src/main/scala/akka/actor/FaultHandling.scala b/akka-actor/src/main/scala/akka/actor/FaultHandling.scala index cd31ffa7c9..b8d3ccd2ee 100644 --- a/akka-actor/src/main/scala/akka/actor/FaultHandling.scala +++ b/akka-actor/src/main/scala/akka/actor/FaultHandling.scala @@ -29,7 +29,7 @@ private[akka] case object ChildNameReserved extends ChildStats * ChildRestartStats is the statistics kept by every parent Actor for every child Actor * and is used for SupervisorStrategies to know how to deal with problems that occur for the children. */ -case class ChildRestartStats(child: ActorRef, var maxNrOfRetriesCount: Int = 0, var restartTimeWindowStartNanos: Long = 0L) +final case class ChildRestartStats(child: ActorRef, var maxNrOfRetriesCount: Int = 0, var restartTimeWindowStartNanos: Long = 0L) extends ChildStats { def uid: Int = child.path.uid @@ -459,4 +459,3 @@ case class OneForOneStrategy( context.stop(child) //TODO optimization to drop child here already? } } - diff --git a/akka-actor/src/main/scala/akka/actor/Scheduler.scala b/akka-actor/src/main/scala/akka/actor/Scheduler.scala index a4803242a4..faaadbf538 100644 --- a/akka-actor/src/main/scala/akka/actor/Scheduler.scala +++ b/akka-actor/src/main/scala/akka/actor/Scheduler.scala @@ -22,7 +22,7 @@ import akka.dispatch.AbstractNodeQueue * This exception is thrown by Scheduler.schedule* when scheduling is not * possible, e.g. after shutting down the Scheduler. */ -private case class SchedulerException(msg: String) extends akka.AkkaException(msg) with NoStackTrace +private final case class SchedulerException(msg: String) extends akka.AkkaException(msg) with NoStackTrace // The Scheduler trait is included in the documentation. KEEP THE LINES SHORT!!! //#scheduler diff --git a/akka-actor/src/main/scala/akka/actor/TypedActor.scala b/akka-actor/src/main/scala/akka/actor/TypedActor.scala index 23aa97bc19..af0b41ab25 100644 --- a/akka-actor/src/main/scala/akka/actor/TypedActor.scala +++ b/akka-actor/src/main/scala/akka/actor/TypedActor.scala @@ -128,7 +128,7 @@ object TypedActor extends ExtensionId[TypedActorExtension] with ExtensionIdProvi * This class represents a Method call, and has a reference to the Method to be called and the parameters to supply * It's sent to the ActorRef backing the TypedActor and can be serialized and deserialized */ - case class MethodCall(method: Method, parameters: Array[AnyRef]) { + final case class MethodCall(method: Method, parameters: Array[AnyRef]) { def isOneWay = method.getReturnType == java.lang.Void.TYPE def returnsFuture = classOf[Future[_]] isAssignableFrom method.getReturnType @@ -170,7 +170,7 @@ object TypedActor extends ExtensionId[TypedActorExtension] with ExtensionIdProvi * * Represents the serialized form of a MethodCall, uses readResolve and writeReplace to marshall the call */ - private[akka] case class SerializedMethodCall(ownerType: Class[_], methodName: String, parameterTypes: Array[Class[_]], serializedParameters: Array[(Int, Class[_], Array[Byte])]) { + private[akka] final case class SerializedMethodCall(ownerType: Class[_], methodName: String, parameterTypes: Array[Class[_]], serializedParameters: Array[(Int, Class[_], Array[Byte])]) { //TODO implement writeObject and readObject to serialize //TODO Possible optimization is to special encode the parameter-types to conserve space @@ -442,7 +442,7 @@ object TypedActor extends ExtensionId[TypedActorExtension] with ExtensionIdProvi /** * INTERNAL API */ - private[akka] case class SerializedTypedActorInvocationHandler(val actor: ActorRef, val timeout: FiniteDuration) { + private[akka] final case class SerializedTypedActorInvocationHandler(val actor: ActorRef, val timeout: FiniteDuration) { @throws(classOf[ObjectStreamException]) private def readResolve(): AnyRef = JavaSerializer.currentSystem.value match { case null ⇒ throw new IllegalStateException("SerializedTypedActorInvocationHandler.readResolve requires that JavaSerializer.currentSystem.value is set to a non-null value") case some ⇒ toTypedActorInvocationHandler(some) @@ -522,7 +522,7 @@ object TypedProps { * It's used in TypedActorFactory.typedActorOf to configure a TypedActor instance. */ @SerialVersionUID(1L) -case class TypedProps[T <: AnyRef] protected[TypedProps] ( +final case class TypedProps[T <: AnyRef] protected[TypedProps] ( interfaces: immutable.Seq[Class[_]], creator: () ⇒ T, dispatcher: String = TypedProps.defaultDispatcherId, @@ -626,7 +626,7 @@ case class TypedProps[T <: AnyRef] protected[TypedProps] ( * ContextualTypedActorFactory allows TypedActors to create children, effectively forming the same Actor Supervision Hierarchies * as normal Actors can. */ -case class ContextualTypedActorFactory(typedActor: TypedActorExtension, actorFactory: ActorContext) extends TypedActorFactory { +final case class ContextualTypedActorFactory(typedActor: TypedActorExtension, actorFactory: ActorContext) extends TypedActorFactory { override def getActorRefFor(proxy: AnyRef): ActorRef = typedActor.getActorRefFor(proxy) override def isTypedActor(proxyOrNot: AnyRef): Boolean = typedActor.isTypedActor(proxyOrNot) } diff --git a/akka-actor/src/main/scala/akka/actor/dsl/Inbox.scala b/akka-actor/src/main/scala/akka/actor/dsl/Inbox.scala index 72f2a86435..38d35e3ba2 100644 --- a/akka-actor/src/main/scala/akka/actor/dsl/Inbox.scala +++ b/akka-actor/src/main/scala/akka/actor/dsl/Inbox.scala @@ -31,13 +31,13 @@ private[akka] object Inbox { def withClient(c: ActorRef): Query def client: ActorRef } - private case class Get(deadline: Deadline, client: ActorRef = null) extends Query { + private final case class Get(deadline: Deadline, client: ActorRef = null) extends Query { def withClient(c: ActorRef) = copy(client = c) } - private case class Select(deadline: Deadline, predicate: PartialFunction[Any, Any], client: ActorRef = null) extends Query { + private final case class Select(deadline: Deadline, predicate: PartialFunction[Any, Any], client: ActorRef = null) extends Query { def withClient(c: ActorRef) = copy(client = c) } - private case class StartWatch(target: ActorRef) + private final case class StartWatch(target: ActorRef) private case object Kick } diff --git a/akka-actor/src/main/scala/akka/actor/dungeon/ChildrenContainer.scala b/akka-actor/src/main/scala/akka/actor/dungeon/ChildrenContainer.scala index 1f4980fa97..0c9035d6e7 100644 --- a/akka-actor/src/main/scala/akka/actor/dungeon/ChildrenContainer.scala +++ b/akka-actor/src/main/scala/akka/actor/dungeon/ChildrenContainer.scala @@ -46,8 +46,8 @@ private[akka] object ChildrenContainer { sealed trait SuspendReason case object UserRequest extends SuspendReason // careful with those system messages, all handling to be taking place in ActorCell.scala! - case class Recreation(cause: Throwable) extends SuspendReason with WaitingForChildren - case class Creation() extends SuspendReason with WaitingForChildren + final case class Recreation(cause: Throwable) extends SuspendReason with WaitingForChildren + final case class Creation() extends SuspendReason with WaitingForChildren case object Termination extends SuspendReason class ChildRestartsIterable(stats: immutable.MapLike[_, ChildStats, _]) extends PartialImmutableValuesIterable[ChildStats, ChildRestartStats] { @@ -156,7 +156,7 @@ private[akka] object ChildrenContainer { * type of container, depending on whether or not children are left and whether or not * the reason was “Terminating”. */ - case class TerminatingChildrenContainer(c: immutable.TreeMap[String, ChildStats], toDie: Set[ActorRef], reason: SuspendReason) + final case class TerminatingChildrenContainer(c: immutable.TreeMap[String, ChildStats], toDie: Set[ActorRef], reason: SuspendReason) extends ChildrenContainer { override def add(name: String, stats: ChildRestartStats): ChildrenContainer = copy(c.updated(name, stats)) diff --git a/akka-actor/src/main/scala/akka/dispatch/CachingConfig.scala b/akka-actor/src/main/scala/akka/dispatch/CachingConfig.scala index f7c6bdde8d..7ab8575845 100644 --- a/akka-actor/src/main/scala/akka/dispatch/CachingConfig.scala +++ b/akka-actor/src/main/scala/akka/dispatch/CachingConfig.scala @@ -20,8 +20,8 @@ private[akka] object CachingConfig { val exists: Boolean val config: Config } - case class ValuePathEntry(valid: Boolean, exists: Boolean, config: Config = emptyConfig) extends PathEntry - case class StringPathEntry(valid: Boolean, exists: Boolean, config: Config, value: String) extends PathEntry + final case class ValuePathEntry(valid: Boolean, exists: Boolean, config: Config = emptyConfig) extends PathEntry + final case class StringPathEntry(valid: Boolean, exists: Boolean, config: Config, value: String) extends PathEntry val invalidPathEntry = ValuePathEntry(false, true) val nonExistingPathEntry = ValuePathEntry(true, false) diff --git a/akka-actor/src/main/scala/akka/dispatch/Dispatchers.scala b/akka-actor/src/main/scala/akka/dispatch/Dispatchers.scala index 7f2d9c0703..413658e386 100644 --- a/akka-actor/src/main/scala/akka/dispatch/Dispatchers.scala +++ b/akka-actor/src/main/scala/akka/dispatch/Dispatchers.scala @@ -31,7 +31,7 @@ trait DispatcherPrerequisites { /** * INTERNAL API */ -private[akka] case class DefaultDispatcherPrerequisites( +private[akka] final case class DefaultDispatcherPrerequisites( val threadFactory: ThreadFactory, val eventStream: EventStream, val scheduler: Scheduler, diff --git a/akka-actor/src/main/scala/akka/dispatch/Mailbox.scala b/akka-actor/src/main/scala/akka/dispatch/Mailbox.scala index 5832bb24fb..b6e481cdde 100644 --- a/akka-actor/src/main/scala/akka/dispatch/Mailbox.scala +++ b/akka-actor/src/main/scala/akka/dispatch/Mailbox.scala @@ -547,7 +547,7 @@ trait ProducesMessageQueue[T <: MessageQueue] /** * UnboundedMailbox is the default unbounded MailboxType used by Akka Actors. */ -case class UnboundedMailbox() extends MailboxType with ProducesMessageQueue[UnboundedMailbox.MessageQueue] { +final case class UnboundedMailbox() extends MailboxType with ProducesMessageQueue[UnboundedMailbox.MessageQueue] { def this(settings: ActorSystem.Settings, config: Config) = this() @@ -566,7 +566,7 @@ object UnboundedMailbox { * the only drawback is that you can't have multiple consumers, * which rules out using it with BalancingPool (BalancingDispatcher) for instance. */ -case class SingleConsumerOnlyUnboundedMailbox() extends MailboxType with ProducesMessageQueue[NodeMessageQueue] { +final case class SingleConsumerOnlyUnboundedMailbox() extends MailboxType with ProducesMessageQueue[NodeMessageQueue] { def this(settings: ActorSystem.Settings, config: Config) = this() @@ -576,7 +576,7 @@ case class SingleConsumerOnlyUnboundedMailbox() extends MailboxType with Produce /** * BoundedMailbox is the default bounded MailboxType used by Akka Actors. */ -case class BoundedMailbox(val capacity: Int, val pushTimeOut: FiniteDuration) +final case class BoundedMailbox(val capacity: Int, val pushTimeOut: FiniteDuration) extends MailboxType with ProducesMessageQueue[BoundedMailbox.MessageQueue] { def this(settings: ActorSystem.Settings, config: Config) = this(config.getInt("mailbox-capacity"), @@ -639,7 +639,7 @@ object BoundedPriorityMailbox { /** * UnboundedDequeBasedMailbox is an unbounded MailboxType, backed by a Deque. */ -case class UnboundedDequeBasedMailbox() extends MailboxType with ProducesMessageQueue[UnboundedDequeBasedMailbox.MessageQueue] { +final case class UnboundedDequeBasedMailbox() extends MailboxType with ProducesMessageQueue[UnboundedDequeBasedMailbox.MessageQueue] { def this(settings: ActorSystem.Settings, config: Config) = this() diff --git a/akka-actor/src/main/scala/akka/dispatch/ThreadPoolBuilder.scala b/akka-actor/src/main/scala/akka/dispatch/ThreadPoolBuilder.scala index 75aadcd81a..23fc2f85b4 100644 --- a/akka-actor/src/main/scala/akka/dispatch/ThreadPoolBuilder.scala +++ b/akka-actor/src/main/scala/akka/dispatch/ThreadPoolBuilder.scala @@ -65,12 +65,12 @@ trait ExecutorServiceFactoryProvider { /** * A small configuration DSL to create ThreadPoolExecutors that can be provided as an ExecutorServiceFactoryProvider to Dispatcher */ -case class ThreadPoolConfig(allowCorePoolTimeout: Boolean = ThreadPoolConfig.defaultAllowCoreThreadTimeout, - corePoolSize: Int = ThreadPoolConfig.defaultCorePoolSize, - maxPoolSize: Int = ThreadPoolConfig.defaultMaxPoolSize, - threadTimeout: Duration = ThreadPoolConfig.defaultTimeout, - queueFactory: ThreadPoolConfig.QueueFactory = ThreadPoolConfig.linkedBlockingQueue(), - rejectionPolicy: RejectedExecutionHandler = ThreadPoolConfig.defaultRejectionPolicy) +final case class ThreadPoolConfig(allowCorePoolTimeout: Boolean = ThreadPoolConfig.defaultAllowCoreThreadTimeout, + corePoolSize: Int = ThreadPoolConfig.defaultCorePoolSize, + maxPoolSize: Int = ThreadPoolConfig.defaultMaxPoolSize, + threadTimeout: Duration = ThreadPoolConfig.defaultTimeout, + queueFactory: ThreadPoolConfig.QueueFactory = ThreadPoolConfig.linkedBlockingQueue(), + rejectionPolicy: RejectedExecutionHandler = ThreadPoolConfig.defaultRejectionPolicy) extends ExecutorServiceFactoryProvider { class ThreadPoolExecutorServiceFactory(val threadFactory: ThreadFactory) extends ExecutorServiceFactory { def createExecutorService: ExecutorService = { @@ -102,7 +102,7 @@ case class ThreadPoolConfig(allowCorePoolTimeout: Boolean = ThreadPoolConfig.def /** * A DSL to configure and create a MessageDispatcher with a ThreadPoolExecutor */ -case class ThreadPoolConfigBuilder(config: ThreadPoolConfig) { +final case class ThreadPoolConfigBuilder(config: ThreadPoolConfig) { import ThreadPoolConfig._ def withNewThreadPoolWithCustomBlockingQueue(newQueueFactory: QueueFactory): ThreadPoolConfigBuilder = @@ -176,11 +176,11 @@ object MonitorableThreadFactory { } } -case class MonitorableThreadFactory(name: String, - daemonic: Boolean, - contextClassLoader: Option[ClassLoader], - exceptionHandler: Thread.UncaughtExceptionHandler = MonitorableThreadFactory.doNothing, - protected val counter: AtomicLong = new AtomicLong) +final case class MonitorableThreadFactory(name: String, + daemonic: Boolean, + contextClassLoader: Option[ClassLoader], + exceptionHandler: Thread.UncaughtExceptionHandler = MonitorableThreadFactory.doNothing, + protected val counter: AtomicLong = new AtomicLong) extends ThreadFactory with ForkJoinPool.ForkJoinWorkerThreadFactory { def newThread(pool: ForkJoinPool): ForkJoinWorkerThread = { diff --git a/akka-actor/src/main/scala/akka/dispatch/sysmsg/SystemMessage.scala b/akka-actor/src/main/scala/akka/dispatch/sysmsg/SystemMessage.scala index da78873b0b..75e2fb0804 100644 --- a/akka-actor/src/main/scala/akka/dispatch/sysmsg/SystemMessage.scala +++ b/akka-actor/src/main/scala/akka/dispatch/sysmsg/SystemMessage.scala @@ -207,32 +207,32 @@ private[akka] trait StashWhenFailed * INTERNAL API */ @SerialVersionUID(1L) -private[akka] case class Create(failure: Option[ActorInitializationException]) extends SystemMessage // sent to self from Dispatcher.register +private[akka] final case class Create(failure: Option[ActorInitializationException]) extends SystemMessage // sent to self from Dispatcher.register /** * INTERNAL API */ @SerialVersionUID(1L) -private[akka] case class Recreate(cause: Throwable) extends SystemMessage with StashWhenWaitingForChildren // sent to self from ActorCell.restart +private[akka] final case class Recreate(cause: Throwable) extends SystemMessage with StashWhenWaitingForChildren // sent to self from ActorCell.restart /** * INTERNAL API */ @SerialVersionUID(1L) -private[akka] case class Suspend() extends SystemMessage with StashWhenWaitingForChildren // sent to self from ActorCell.suspend +private[akka] final case class Suspend() extends SystemMessage with StashWhenWaitingForChildren // sent to self from ActorCell.suspend /** * INTERNAL API */ @SerialVersionUID(1L) -private[akka] case class Resume(causedByFailure: Throwable) extends SystemMessage with StashWhenWaitingForChildren // sent to self from ActorCell.resume +private[akka] final case class Resume(causedByFailure: Throwable) extends SystemMessage with StashWhenWaitingForChildren // sent to self from ActorCell.resume /** * INTERNAL API */ @SerialVersionUID(1L) -private[akka] case class Terminate() extends SystemMessage // sent to self from ActorCell.stop +private[akka] final case class Terminate() extends SystemMessage // sent to self from ActorCell.stop /** * INTERNAL API */ @SerialVersionUID(1L) -private[akka] case class Supervise(child: ActorRef, async: Boolean) extends SystemMessage // sent to supervisor ActorRef from ActorCell.start +private[akka] final case class Supervise(child: ActorRef, async: Boolean) extends SystemMessage // sent to supervisor ActorRef from ActorCell.start /** * INTERNAL API */ @@ -242,7 +242,7 @@ private[akka] case class Watch(watchee: InternalActorRef, watcher: InternalActor * INTERNAL API */ @SerialVersionUID(1L) -private[akka] case class Unwatch(watchee: ActorRef, watcher: ActorRef) extends SystemMessage // sent to tear down a DeathWatch +private[akka] final case class Unwatch(watchee: ActorRef, watcher: ActorRef) extends SystemMessage // sent to tear down a DeathWatch /** * INTERNAL API */ @@ -253,12 +253,12 @@ private[akka] case object NoMessage extends SystemMessage // switched into the m * INTERNAL API */ @SerialVersionUID(1L) -private[akka] case class Failed(child: ActorRef, cause: Throwable, uid: Int) extends SystemMessage +private[akka] final case class Failed(child: ActorRef, cause: Throwable, uid: Int) extends SystemMessage with StashWhenFailed with StashWhenWaitingForChildren @SerialVersionUID(1L) -private[akka] case class DeathWatchNotification( +private[akka] final case class DeathWatchNotification( actor: ActorRef, existenceConfirmed: Boolean, addressTerminated: Boolean) extends SystemMessage diff --git a/akka-actor/src/main/scala/akka/event/Logging.scala b/akka-actor/src/main/scala/akka/event/Logging.scala index 9d1c928564..e4023275d3 100644 --- a/akka-actor/src/main/scala/akka/event/Logging.scala +++ b/akka-actor/src/main/scala/akka/event/Logging.scala @@ -408,7 +408,7 @@ object Logging { /** * Marker trait for annotating LogLevel, which must be Int after erasure. */ - case class LogLevel(asInt: Int) extends AnyVal { + final case class LogLevel(asInt: Int) extends AnyVal { @inline final def >=(other: LogLevel): Boolean = asInt >= other.asInt @inline final def <=(other: LogLevel): Boolean = asInt <= other.asInt @inline final def >(other: LogLevel): Boolean = asInt > other.asInt @@ -684,7 +684,7 @@ object Logging { * message. This is necessary to ensure that additional subscriptions are in * effect when the logging system finished starting. */ - case class InitializeLogger(bus: LoggingBus) extends NoSerializationVerificationNeeded + final case class InitializeLogger(bus: LoggingBus) extends NoSerializationVerificationNeeded /** * Response message each logger must send within 1 second after receiving the diff --git a/akka-actor/src/main/scala/akka/io/Inet.scala b/akka-actor/src/main/scala/akka/io/Inet.scala index 6951cb49d5..32c9533a19 100644 --- a/akka-actor/src/main/scala/akka/io/Inet.scala +++ b/akka-actor/src/main/scala/akka/io/Inet.scala @@ -35,7 +35,7 @@ object Inet { * * For more information see [[java.net.Socket.setReceiveBufferSize]] */ - case class ReceiveBufferSize(size: Int) extends SocketOption { + final case class ReceiveBufferSize(size: Int) extends SocketOption { require(size > 0, "ReceiveBufferSize must be > 0") override def beforeServerSocketBind(s: ServerSocket): Unit = s.setReceiveBufferSize(size) override def beforeDatagramBind(s: DatagramSocket): Unit = s.setReceiveBufferSize(size) @@ -49,7 +49,7 @@ object Inet { * * For more information see [[java.net.Socket.setReuseAddress]] */ - case class ReuseAddress(on: Boolean) extends SocketOption { + final case class ReuseAddress(on: Boolean) extends SocketOption { override def beforeServerSocketBind(s: ServerSocket): Unit = s.setReuseAddress(on) override def beforeDatagramBind(s: DatagramSocket): Unit = s.setReuseAddress(on) override def beforeConnect(s: Socket): Unit = s.setReuseAddress(on) @@ -60,7 +60,7 @@ object Inet { * * For more information see [[java.net.Socket.setSendBufferSize]] */ - case class SendBufferSize(size: Int) extends SocketOption { + final case class SendBufferSize(size: Int) extends SocketOption { require(size > 0, "SendBufferSize must be > 0") override def afterConnect(s: Socket): Unit = s.setSendBufferSize(size) } @@ -72,7 +72,7 @@ object Inet { * * For more information see [[java.net.Socket.setTrafficClass]] */ - case class TrafficClass(tc: Int) extends SocketOption { + final case class TrafficClass(tc: Int) extends SocketOption { require(0 <= tc && tc <= 255, "TrafficClass needs to be in the interval [0, 255]") override def afterConnect(s: Socket): Unit = s.setTrafficClass(tc) } diff --git a/akka-actor/src/main/scala/akka/io/SelectionHandler.scala b/akka-actor/src/main/scala/akka/io/SelectionHandler.scala index bd392a16ee..7cfb2c5436 100644 --- a/akka-actor/src/main/scala/akka/io/SelectionHandler.scala +++ b/akka-actor/src/main/scala/akka/io/SelectionHandler.scala @@ -65,10 +65,10 @@ private[io] object SelectionHandler { def failureMessage: Any } - case class WorkerForCommand(apiCommand: HasFailureMessage, commander: ActorRef, childProps: ChannelRegistry ⇒ Props) + final case class WorkerForCommand(apiCommand: HasFailureMessage, commander: ActorRef, childProps: ChannelRegistry ⇒ Props) extends NoSerializationVerificationNeeded - case class Retry(command: WorkerForCommand, retriesLeft: Int) extends NoSerializationVerificationNeeded { require(retriesLeft >= 0) } + final case class Retry(command: WorkerForCommand, retriesLeft: Int) extends NoSerializationVerificationNeeded { require(retriesLeft >= 0) } case object ChannelConnectable case object ChannelAcceptable diff --git a/akka-actor/src/main/scala/akka/io/Tcp.scala b/akka-actor/src/main/scala/akka/io/Tcp.scala index bb7c4bfc80..32f11d0e01 100644 --- a/akka-actor/src/main/scala/akka/io/Tcp.scala +++ b/akka-actor/src/main/scala/akka/io/Tcp.scala @@ -55,7 +55,7 @@ object Tcp extends ExtensionId[TcpExt] with ExtensionIdProvider { * * For more information see [[java.net.Socket.setKeepAlive]] */ - case class KeepAlive(on: Boolean) extends SocketOption { + final case class KeepAlive(on: Boolean) extends SocketOption { override def afterConnect(s: Socket): Unit = s.setKeepAlive(on) } @@ -66,7 +66,7 @@ object Tcp extends ExtensionId[TcpExt] with ExtensionIdProvider { * * For more information see [[java.net.Socket.setOOBInline]] */ - case class OOBInline(on: Boolean) extends SocketOption { + final case class OOBInline(on: Boolean) extends SocketOption { override def afterConnect(s: Socket): Unit = s.setOOBInline(on) } @@ -80,7 +80,7 @@ object Tcp extends ExtensionId[TcpExt] with ExtensionIdProvider { * * For more information see [[java.net.Socket.setTcpNoDelay]] */ - case class TcpNoDelay(on: Boolean) extends SocketOption { + final case class TcpNoDelay(on: Boolean) extends SocketOption { override def afterConnect(s: Socket): Unit = s.setTcpNoDelay(on) } @@ -110,11 +110,11 @@ object Tcp extends ExtensionId[TcpExt] with ExtensionIdProvider { * @param localAddress optionally specifies a specific address to bind to * @param options Please refer to the [[SO]] object for a list of all supported options. */ - case class Connect(remoteAddress: InetSocketAddress, - localAddress: Option[InetSocketAddress] = None, - options: immutable.Traversable[SocketOption] = Nil, - timeout: Option[FiniteDuration] = None, - pullMode: Boolean = false) extends Command + final case class Connect(remoteAddress: InetSocketAddress, + localAddress: Option[InetSocketAddress] = None, + options: immutable.Traversable[SocketOption] = Nil, + timeout: Option[FiniteDuration] = None, + pullMode: Boolean = false) extends Command /** * The Bind message is send to the TCP manager actor, which is obtained via @@ -135,11 +135,11 @@ object Tcp extends ExtensionId[TcpExt] with ExtensionIdProvider { * * @param options Please refer to the [[SO]] object for a list of all supported options. */ - case class Bind(handler: ActorRef, - localAddress: InetSocketAddress, - backlog: Int = 100, - options: immutable.Traversable[SocketOption] = Nil, - pullMode: Boolean = false) extends Command + final case class Bind(handler: ActorRef, + localAddress: InetSocketAddress, + backlog: Int = 100, + options: immutable.Traversable[SocketOption] = Nil, + pullMode: Boolean = false) extends Command /** * This message must be sent to a TCP connection actor after receiving the @@ -159,7 +159,7 @@ object Tcp extends ExtensionId[TcpExt] with ExtensionIdProvider { * notification until [[ResumeWriting]] is received. This can * be used to implement NACK-based write backpressure. */ - case class Register(handler: ActorRef, keepOpenOnPeerClosed: Boolean = false, useResumeWriting: Boolean = true) extends Command + final case class Register(handler: ActorRef, keepOpenOnPeerClosed: Boolean = false, useResumeWriting: Boolean = true) extends Command /** * In order to close down a listening socket, send this message to that socket’s @@ -316,7 +316,7 @@ object Tcp extends ExtensionId[TcpExt] with ExtensionIdProvider { * or have been sent! Unfortunately there is no way to determine whether * a particular write has been sent by the O/S. */ - case class Write(data: ByteString, ack: Event) extends SimpleWriteCommand + final case class Write(data: ByteString, ack: Event) extends SimpleWriteCommand object Write { /** * The empty Write doesn't write anything and isn't acknowledged. @@ -343,7 +343,7 @@ object Tcp extends ExtensionId[TcpExt] with ExtensionIdProvider { * or have been sent! Unfortunately there is no way to determine whether * a particular write has been sent by the O/S. */ - case class WriteFile(filePath: String, position: Long, count: Long, ack: Event) extends SimpleWriteCommand { + final case class WriteFile(filePath: String, position: Long, count: Long, ack: Event) extends SimpleWriteCommand { require(position >= 0, "WriteFile.position must be >= 0") require(count > 0, "WriteFile.count must be > 0") } @@ -356,7 +356,7 @@ object Tcp extends ExtensionId[TcpExt] with ExtensionIdProvider { * If the sub commands contain `ack` requests they will be honored as soon as the * respective write has been written completely. */ - case class CompoundWrite(override val head: SimpleWriteCommand, tailCommand: WriteCommand) extends WriteCommand + final case class CompoundWrite(override val head: SimpleWriteCommand, tailCommand: WriteCommand) extends WriteCommand with immutable.Iterable[SimpleWriteCommand] { def iterator: Iterator[SimpleWriteCommand] = @@ -399,7 +399,7 @@ object Tcp extends ExtensionId[TcpExt] with ExtensionIdProvider { * for connection actors. * @param batchSize The number of connections to accept before waiting for the next resume command */ - case class ResumeAccepting(batchSize: Int) extends Command + final case class ResumeAccepting(batchSize: Int) extends Command /// EVENTS /** @@ -411,7 +411,7 @@ object Tcp extends ExtensionId[TcpExt] with ExtensionIdProvider { * Whenever data are read from a socket they will be transferred within this * class to the handler actor which was designated in the [[Register]] message. */ - case class Received(data: ByteString) extends Event + final case class Received(data: ByteString) extends Event /** * The connection actor sends this message either to the sender of a [[Connect]] @@ -419,13 +419,13 @@ object Tcp extends ExtensionId[TcpExt] with ExtensionIdProvider { * in the [[Bind]] message. The connection is characterized by the `remoteAddress` * and `localAddress` TCP endpoints. */ - case class Connected(remoteAddress: InetSocketAddress, localAddress: InetSocketAddress) extends Event + final case class Connected(remoteAddress: InetSocketAddress, localAddress: InetSocketAddress) extends Event /** * Whenever a command cannot be completed, the queried actor will reply with * this message, wrapping the original command which failed. */ - case class CommandFailed(cmd: Command) extends Event + final case class CommandFailed(cmd: Command) extends Event /** * When `useResumeWriting` is in effect as indicated in the [[Register]] message, @@ -442,7 +442,7 @@ object Tcp extends ExtensionId[TcpExt] with ExtensionIdProvider { * in this form. If the bind address indicated a 0 port number, then the contained * `localAddress` can be used to find out which port was automatically assigned. */ - case class Bound(localAddress: InetSocketAddress) extends Event + final case class Bound(localAddress: InetSocketAddress) extends Event /** * The sender of an [[Unbind]] command will receive confirmation through this @@ -507,7 +507,7 @@ object Tcp extends ExtensionId[TcpExt] with ExtensionIdProvider { /** * The connection has been closed due to an IO error. */ - case class ErrorClosed(cause: String) extends ConnectionClosed { + final case class ErrorClosed(cause: String) extends ConnectionClosed { override def isErrorClosed = true override def getErrorCause = cause } diff --git a/akka-actor/src/main/scala/akka/io/TcpConnection.scala b/akka-actor/src/main/scala/akka/io/TcpConnection.scala index 92103de285..592a09f1ae 100644 --- a/akka-actor/src/main/scala/akka/io/TcpConnection.scala +++ b/akka-actor/src/main/scala/akka/io/TcpConnection.scala @@ -443,20 +443,20 @@ private[io] object TcpConnection { * Used to transport information to the postStop method to notify * interested party about a connection close. */ - case class CloseInformation(notificationsTo: Set[ActorRef], closedEvent: Event) + final case class CloseInformation(notificationsTo: Set[ActorRef], closedEvent: Event) /** * Groups required connection-related data that are only available once the connection has been fully established. */ - case class ConnectionInfo(registration: ChannelRegistration, - handler: ActorRef, - keepOpenOnPeerClosed: Boolean, - useResumeWriting: Boolean) + final case class ConnectionInfo(registration: ChannelRegistration, + handler: ActorRef, + keepOpenOnPeerClosed: Boolean, + useResumeWriting: Boolean) // INTERNAL MESSAGES - case class UpdatePendingWrite(remainingWrite: PendingWrite) extends NoSerializationVerificationNeeded - case class WriteFileFailed(e: IOException) + final case class UpdatePendingWrite(remainingWrite: PendingWrite) extends NoSerializationVerificationNeeded + final case class WriteFileFailed(e: IOException) sealed abstract class PendingWrite { def commander: ActorRef diff --git a/akka-actor/src/main/scala/akka/io/TcpListener.scala b/akka-actor/src/main/scala/akka/io/TcpListener.scala index e11b605d2e..fc293411e2 100644 --- a/akka-actor/src/main/scala/akka/io/TcpListener.scala +++ b/akka-actor/src/main/scala/akka/io/TcpListener.scala @@ -18,11 +18,11 @@ import akka.dispatch.{ UnboundedMessageQueueSemantics, RequiresMessageQueue } */ private[io] object TcpListener { - case class RegisterIncoming(channel: SocketChannel) extends HasFailureMessage with NoSerializationVerificationNeeded { + final case class RegisterIncoming(channel: SocketChannel) extends HasFailureMessage with NoSerializationVerificationNeeded { def failureMessage = FailedRegisterIncoming(channel) } - case class FailedRegisterIncoming(channel: SocketChannel) extends NoSerializationVerificationNeeded + final case class FailedRegisterIncoming(channel: SocketChannel) extends NoSerializationVerificationNeeded } diff --git a/akka-actor/src/main/scala/akka/io/Udp.scala b/akka-actor/src/main/scala/akka/io/Udp.scala index c80e162e0c..280ab2ba17 100644 --- a/akka-actor/src/main/scala/akka/io/Udp.scala +++ b/akka-actor/src/main/scala/akka/io/Udp.scala @@ -77,7 +77,7 @@ object Udp extends ExtensionId[UdpExt] with ExtensionIdProvider { * sending using this mechanism is not suitable if replies are expected, use * [[Bind]] in that case. */ - case class Send(payload: ByteString, target: InetSocketAddress, ack: Event) extends Command { + final case class Send(payload: ByteString, target: InetSocketAddress, ack: Event) extends Command { require(ack != null, "ack must be non-null. Use NoAck if you don't want acks.") def wantsAck: Boolean = !ack.isInstanceOf[NoAck] @@ -92,9 +92,9 @@ object Udp extends ExtensionId[UdpExt] with ExtensionIdProvider { * The listener actor for the newly bound port will reply with a [[Bound]] * message, or the manager will reply with a [[CommandFailed]] message. */ - case class Bind(handler: ActorRef, - localAddress: InetSocketAddress, - options: immutable.Traversable[SocketOption] = Nil) extends Command + final case class Bind(handler: ActorRef, + localAddress: InetSocketAddress, + options: immutable.Traversable[SocketOption] = Nil) extends Command /** * Send this message to the listener actor that previously sent a [[Bound]] @@ -139,20 +139,20 @@ object Udp extends ExtensionId[UdpExt] with ExtensionIdProvider { * When a listener actor receives a datagram from its socket it will send * it to the handler designated in the [[Bind]] message using this message type. */ - case class Received(data: ByteString, sender: InetSocketAddress) extends Event + final case class Received(data: ByteString, sender: InetSocketAddress) extends Event /** * When a command fails it will be replied to with this message type, * wrapping the failing command object. */ - case class CommandFailed(cmd: Command) extends Event + final case class CommandFailed(cmd: Command) extends Event /** * This message is sent by the listener actor in response to a [[Bind]] command. * If the address to bind to specified a port number of zero, then this message * can be inspected to find out which port was automatically assigned. */ - case class Bound(localAddress: InetSocketAddress) extends Event + final case class Bound(localAddress: InetSocketAddress) extends Event /** * The “simple sender” sends this message type in response to a [[SimpleSender]] query. @@ -179,7 +179,7 @@ object Udp extends ExtensionId[UdpExt] with ExtensionIdProvider { * * For more information see [[java.net.DatagramSocket#setBroadcast]] */ - case class Broadcast(on: Boolean) extends SocketOption { + final case class Broadcast(on: Boolean) extends SocketOption { override def beforeDatagramBind(s: DatagramSocket): Unit = s.setBroadcast(on) } diff --git a/akka-actor/src/main/scala/akka/io/UdpConnected.scala b/akka-actor/src/main/scala/akka/io/UdpConnected.scala index 8260ac1ad0..54b98b0432 100644 --- a/akka-actor/src/main/scala/akka/io/UdpConnected.scala +++ b/akka-actor/src/main/scala/akka/io/UdpConnected.scala @@ -68,7 +68,7 @@ object UdpConnected extends ExtensionId[UdpConnectedExt] with ExtensionIdProvide * the connection actor will reply with the given object as soon as the datagram * has been successfully enqueued to the O/S kernel. */ - case class Send(payload: ByteString, ack: Any) extends Command { + final case class Send(payload: ByteString, ack: Any) extends Command { require(ack != null, "ack must be non-null. Use NoAck if you don't want acks.") @@ -84,10 +84,10 @@ object UdpConnected extends ExtensionId[UdpConnectedExt] with ExtensionIdProvide * which is restricted to sending to and receiving from the given `remoteAddress`. * All received datagrams will be sent to the designated `handler` actor. */ - case class Connect(handler: ActorRef, - remoteAddress: InetSocketAddress, - localAddress: Option[InetSocketAddress] = None, - options: immutable.Traversable[SocketOption] = Nil) extends Command + final case class Connect(handler: ActorRef, + remoteAddress: InetSocketAddress, + localAddress: Option[InetSocketAddress] = None, + options: immutable.Traversable[SocketOption] = Nil) extends Command /** * Send this message to a connection actor (which had previously sent the @@ -119,13 +119,13 @@ object UdpConnected extends ExtensionId[UdpConnectedExt] with ExtensionIdProvide * When a connection actor receives a datagram from its socket it will send * it to the handler designated in the [[Udp.Bind]] message using this message type. */ - case class Received(data: ByteString) extends Event + final case class Received(data: ByteString) extends Event /** * When a command fails it will be replied to with this message type, * wrapping the failing command object. */ - case class CommandFailed(cmd: Command) extends Event + final case class CommandFailed(cmd: Command) extends Event /** * This message is sent by the connection actor to the actor which sent the diff --git a/akka-actor/src/main/scala/akka/pattern/AskSupport.scala b/akka-actor/src/main/scala/akka/pattern/AskSupport.scala index 75fccf240b..3291d9766c 100644 --- a/akka-actor/src/main/scala/akka/pattern/AskSupport.scala +++ b/akka-actor/src/main/scala/akka/pattern/AskSupport.scala @@ -322,7 +322,7 @@ private[akka] final class PromiseActorRef private (val provider: ActorRefProvide private[akka] object PromiseActorRef { private case object Registering private case object Stopped - private case class StoppedWithPath(path: ActorPath) + private final case class StoppedWithPath(path: ActorPath) def apply(provider: ActorRefProvider, timeout: Timeout, targetName: String): PromiseActorRef = { val result = Promise[Any]() diff --git a/akka-actor/src/main/scala/akka/routing/ConsistentHashing.scala b/akka-actor/src/main/scala/akka/routing/ConsistentHashing.scala index be8c23132d..e55d4c9912 100644 --- a/akka-actor/src/main/scala/akka/routing/ConsistentHashing.scala +++ b/akka-actor/src/main/scala/akka/routing/ConsistentHashing.scala @@ -414,7 +414,7 @@ final case class ConsistentHashingGroup( * isn't a good representation, because LocalActorRef doesn't include the * host and port. */ -private[akka] case class ConsistentRoutee(routee: Routee, selfAddress: Address) { +private[akka] final case class ConsistentRoutee(routee: Routee, selfAddress: Address) { override def toString: String = routee match { case ActorRefRoutee(ref) ⇒ toStringWithfullAddress(ref.path) @@ -481,7 +481,7 @@ private[akka] case class ConsistentRoutee(routee: Routee, selfAddress: Address) */ @SerialVersionUID(1L) @deprecated("Use ConsistentHashingPool or ConsistentHashingGroup", "2.3") -case class ConsistentHashingRouter( +final case class ConsistentHashingRouter( nrOfInstances: Int = 0, routees: immutable.Iterable[String] = Nil, override val resizer: Option[Resizer] = None, val routerDispatcher: String = Dispatchers.DefaultDispatcherId, val supervisorStrategy: SupervisorStrategy = Pool.defaultSupervisorStrategy, @@ -561,7 +561,7 @@ case class ConsistentHashingRouter( * host and port. */ @deprecated("Replaced by ConsistentRoutee", "2.3") -private[akka] case class ConsistentActorRef(actorRef: ActorRef, selfAddress: Address) { +private[akka] final case class ConsistentActorRef(actorRef: ActorRef, selfAddress: Address) { override def toString: String = { actorRef.path.address match { case Address(_, _, None, None) ⇒ actorRef.path.toStringWithAddress(selfAddress) diff --git a/akka-actor/src/main/scala/akka/routing/DeprecatedRouting.scala b/akka-actor/src/main/scala/akka/routing/DeprecatedRouting.scala index 94e949605a..9250e1678e 100644 --- a/akka-actor/src/main/scala/akka/routing/DeprecatedRouting.scala +++ b/akka-actor/src/main/scala/akka/routing/DeprecatedRouting.scala @@ -42,7 +42,7 @@ import akka.dispatch.{ MailboxType, MessageDispatcher } */ @deprecated("Use GetRoutees", "2.3") @SerialVersionUID(1L) -case class RouterRoutees(routees: immutable.IndexedSeq[ActorRef]) { +final case class RouterRoutees(routees: immutable.IndexedSeq[ActorRef]) { /** * Java API */ @@ -99,9 +99,9 @@ object RoundRobinRouter { */ @SerialVersionUID(1L) @deprecated("Use RoundRobinPool or RoundRobinGroup", "2.3") -case class RoundRobinRouter(nrOfInstances: Int = 0, routees: immutable.Iterable[String] = Nil, override val resizer: Option[Resizer] = None, - val routerDispatcher: String = Dispatchers.DefaultDispatcherId, - val supervisorStrategy: SupervisorStrategy = Pool.defaultSupervisorStrategy) +final case class RoundRobinRouter(nrOfInstances: Int = 0, routees: immutable.Iterable[String] = Nil, override val resizer: Option[Resizer] = None, + val routerDispatcher: String = Dispatchers.DefaultDispatcherId, + val supervisorStrategy: SupervisorStrategy = Pool.defaultSupervisorStrategy) extends DeprecatedRouterConfig with PoolOverrideUnsetConfig[RoundRobinRouter] { /** @@ -193,9 +193,9 @@ object RandomRouter { */ @SerialVersionUID(1L) @deprecated("Use RandomPool or RandomGroup", "2.3") -case class RandomRouter(nrOfInstances: Int = 0, routees: immutable.Iterable[String] = Nil, override val resizer: Option[Resizer] = None, - val routerDispatcher: String = Dispatchers.DefaultDispatcherId, - val supervisorStrategy: SupervisorStrategy = Pool.defaultSupervisorStrategy) +final case class RandomRouter(nrOfInstances: Int = 0, routees: immutable.Iterable[String] = Nil, override val resizer: Option[Resizer] = None, + val routerDispatcher: String = Dispatchers.DefaultDispatcherId, + val supervisorStrategy: SupervisorStrategy = Pool.defaultSupervisorStrategy) extends DeprecatedRouterConfig with PoolOverrideUnsetConfig[RandomRouter] { /** @@ -297,9 +297,9 @@ object SmallestMailboxRouter { */ @SerialVersionUID(1L) @deprecated("Use SmallestMailboxPool", "2.3") -case class SmallestMailboxRouter(nrOfInstances: Int = 0, routees: immutable.Iterable[String] = Nil, override val resizer: Option[Resizer] = None, - val routerDispatcher: String = Dispatchers.DefaultDispatcherId, - val supervisorStrategy: SupervisorStrategy = Pool.defaultSupervisorStrategy) +final case class SmallestMailboxRouter(nrOfInstances: Int = 0, routees: immutable.Iterable[String] = Nil, override val resizer: Option[Resizer] = None, + val routerDispatcher: String = Dispatchers.DefaultDispatcherId, + val supervisorStrategy: SupervisorStrategy = Pool.defaultSupervisorStrategy) extends DeprecatedRouterConfig with PoolOverrideUnsetConfig[SmallestMailboxRouter] { /** @@ -391,9 +391,9 @@ object BroadcastRouter { */ @SerialVersionUID(1L) @deprecated("Use BroadcastPool or BroadcastGroup", "2.3") -case class BroadcastRouter(nrOfInstances: Int = 0, routees: immutable.Iterable[String] = Nil, override val resizer: Option[Resizer] = None, - val routerDispatcher: String = Dispatchers.DefaultDispatcherId, - val supervisorStrategy: SupervisorStrategy = Pool.defaultSupervisorStrategy) +final case class BroadcastRouter(nrOfInstances: Int = 0, routees: immutable.Iterable[String] = Nil, override val resizer: Option[Resizer] = None, + val routerDispatcher: String = Dispatchers.DefaultDispatcherId, + val supervisorStrategy: SupervisorStrategy = Pool.defaultSupervisorStrategy) extends DeprecatedRouterConfig with PoolOverrideUnsetConfig[BroadcastRouter] { /** @@ -488,10 +488,10 @@ object ScatterGatherFirstCompletedRouter { */ @SerialVersionUID(1L) @deprecated("Use ScatterGatherFirstCompletedPool or ScatterGatherFirstCompletedGroup", "2.3") -case class ScatterGatherFirstCompletedRouter(nrOfInstances: Int = 0, routees: immutable.Iterable[String] = Nil, within: FiniteDuration, - override val resizer: Option[Resizer] = None, - val routerDispatcher: String = Dispatchers.DefaultDispatcherId, - val supervisorStrategy: SupervisorStrategy = Pool.defaultSupervisorStrategy) +final case class ScatterGatherFirstCompletedRouter(nrOfInstances: Int = 0, routees: immutable.Iterable[String] = Nil, within: FiniteDuration, + override val resizer: Option[Resizer] = None, + val routerDispatcher: String = Dispatchers.DefaultDispatcherId, + val supervisorStrategy: SupervisorStrategy = Pool.defaultSupervisorStrategy) extends DeprecatedRouterConfig with PoolOverrideUnsetConfig[ScatterGatherFirstCompletedRouter] { if (within <= Duration.Zero) throw new IllegalArgumentException( diff --git a/akka-actor/src/main/scala/akka/routing/Listeners.scala b/akka-actor/src/main/scala/akka/routing/Listeners.scala index a77eac3727..77d2c10cde 100644 --- a/akka-actor/src/main/scala/akka/routing/Listeners.scala +++ b/akka-actor/src/main/scala/akka/routing/Listeners.scala @@ -8,9 +8,9 @@ import akka.actor.{ Actor, ActorRef } import java.util.{ Set, TreeSet } sealed trait ListenerMessage -case class Listen(listener: ActorRef) extends ListenerMessage -case class Deafen(listener: ActorRef) extends ListenerMessage -case class WithListeners(f: (ActorRef) ⇒ Unit) extends ListenerMessage +final case class Listen(listener: ActorRef) extends ListenerMessage +final case class Deafen(listener: ActorRef) extends ListenerMessage +final case class WithListeners(f: (ActorRef) ⇒ Unit) extends ListenerMessage /** * Listeners is a generic trait to implement listening capability on an Actor. diff --git a/akka-actor/src/main/scala/akka/routing/Resizer.scala b/akka-actor/src/main/scala/akka/routing/Resizer.scala index bfad48a107..54a505e6c0 100644 --- a/akka-actor/src/main/scala/akka/routing/Resizer.scala +++ b/akka-actor/src/main/scala/akka/routing/Resizer.scala @@ -24,6 +24,7 @@ import akka.actor.Props import akka.actor.SupervisorStrategy import akka.dispatch.Envelope import akka.dispatch.MessageDispatcher +import java.lang.{ Double ⇒ JDouble } /** * [[Pool]] routers with dynamically resizable number of routees are implemented by providing a Resizer @@ -86,12 +87,12 @@ case class DefaultResizer( /** * The fewest number of routees the router should ever have. */ - lowerBound: Int = 1, + val lowerBound: Int = 1, /** * The most number of routees the router should ever have. * Must be greater than or equal to `lowerBound`. */ - upperBound: Int = 10, + val upperBound: Int = 10, /** * Threshold to evaluate if routee is considered to be busy (under pressure). * Implementation depends on this value (default is 1). @@ -104,13 +105,13 @@ case class DefaultResizer( * default UnboundedMailbox is O(N) operation. * */ - pressureThreshold: Int = 1, + val pressureThreshold: Int = 1, /** * Percentage to increase capacity whenever all routees are busy. * For example, 0.2 would increase 20% (rounded up), i.e. if current * capacity is 6 it will request an increase of 2 more routees. */ - rampupRate: Double = 0.2, + val rampupRate: Double = 0.2, /** * Minimum fraction of busy routees before backing off. * For example, if this is 0.3, then we'll remove some routees only when @@ -120,19 +121,19 @@ case class DefaultResizer( * * Use 0.0 or negative to avoid removal of routees. */ - backoffThreshold: Double = 0.3, + val backoffThreshold: Double = 0.3, /** * Fraction of routees to be removed when the resizer reaches the * backoffThreshold. * For example, 0.1 would decrease 10% (rounded up), i.e. if current * capacity is 9 it will request an decrease of 1 routee. */ - backoffRate: Double = 0.1, + val backoffRate: Double = 0.1, /** * Number of messages between resize operation. * Use 1 to resize before each message. */ - messagesPerResize: Int = 10) extends Resizer { + val messagesPerResize: Int = 10) extends Resizer { /** * Java API constructor for default values except bounds. @@ -240,7 +241,6 @@ case class DefaultResizer( if (backoffThreshold > 0.0 && backoffRate > 0.0 && capacity > 0 && pressure.toDouble / capacity < backoffThreshold) math.floor(-1.0 * backoffRate * capacity).toInt else 0 - } /** diff --git a/akka-actor/src/main/scala/akka/routing/Router.scala b/akka-actor/src/main/scala/akka/routing/Router.scala index 06b14cc16a..d9431ab293 100644 --- a/akka-actor/src/main/scala/akka/routing/Router.scala +++ b/akka-actor/src/main/scala/akka/routing/Router.scala @@ -40,7 +40,7 @@ trait Routee { /** * [[Routee]] that sends the messages to an [[akka.actor.ActorRef]]. */ -case class ActorRefRoutee(ref: ActorRef) extends Routee { +final case class ActorRefRoutee(ref: ActorRef) extends Routee { override def send(message: Any, sender: ActorRef): Unit = ref.tell(message, sender) } @@ -48,7 +48,7 @@ case class ActorRefRoutee(ref: ActorRef) extends Routee { /** * [[Routee]] that sends the messages to an [[akka.actor.ActorSelection]]. */ -case class ActorSelectionRoutee(selection: ActorSelection) extends Routee { +final case class ActorSelectionRoutee(selection: ActorSelection) extends Routee { override def send(message: Any, sender: ActorRef): Unit = selection.tell(message, sender) } @@ -65,7 +65,7 @@ object NoRoutee extends Routee { /** * [[Routee]] that sends each message to all `routees`. */ -case class SeveralRoutees(routees: immutable.IndexedSeq[Routee]) extends Routee { +final case class SeveralRoutees(routees: immutable.IndexedSeq[Routee]) extends Routee { /** * Java API @@ -175,7 +175,7 @@ final case class Router(val logic: RoutingLogic, val routees: immutable.IndexedS * envelope will be stripped off. */ @SerialVersionUID(1L) -case class Broadcast(message: Any) extends RouterEnvelope +final case class Broadcast(message: Any) extends RouterEnvelope /** * Only the contained message will be forwarded to the diff --git a/akka-actor/src/main/scala/akka/routing/RouterConfig.scala b/akka-actor/src/main/scala/akka/routing/RouterConfig.scala index b4935de954..ae6895d77e 100644 --- a/akka-actor/src/main/scala/akka/routing/RouterConfig.scala +++ b/akka-actor/src/main/scala/akka/routing/RouterConfig.scala @@ -376,7 +376,7 @@ case object NoRouter extends NoRouter { * Message used to carry information about what routees the router is currently using. */ @SerialVersionUID(1L) -case class Routees(routees: immutable.IndexedSeq[Routee]) { +final case class Routees(routees: immutable.IndexedSeq[Routee]) { /** * Java API */ @@ -391,7 +391,7 @@ case class Routees(routees: immutable.IndexedSeq[Routee]) { * It may be handled after other messages. */ @SerialVersionUID(1L) -case class AddRoutee(routee: Routee) extends RouterManagementMesssage +final case class AddRoutee(routee: Routee) extends RouterManagementMesssage /** * Remove a specific routee by sending this message to the router. @@ -403,7 +403,7 @@ case class AddRoutee(routee: Routee) extends RouterManagementMesssage * */ @SerialVersionUID(1L) -case class RemoveRoutee(routee: Routee) extends RouterManagementMesssage +final case class RemoveRoutee(routee: Routee) extends RouterManagementMesssage /** * Increase or decrease the number of routees in a [[Pool]]. @@ -417,4 +417,4 @@ case class RemoveRoutee(routee: Routee) extends RouterManagementMesssage * lost. */ @SerialVersionUID(1L) -case class AdjustPoolSize(change: Int) extends RouterManagementMesssage +final case class AdjustPoolSize(change: Int) extends RouterManagementMesssage diff --git a/akka-actor/src/main/scala/akka/routing/ScatterGatherFirstCompleted.scala b/akka-actor/src/main/scala/akka/routing/ScatterGatherFirstCompleted.scala index 3f5877a504..fb5dbcd41d 100644 --- a/akka-actor/src/main/scala/akka/routing/ScatterGatherFirstCompleted.scala +++ b/akka-actor/src/main/scala/akka/routing/ScatterGatherFirstCompleted.scala @@ -39,7 +39,7 @@ final case class ScatterGatherFirstCompletedRoutingLogic(within: FiniteDuration) * INTERNAL API */ @SerialVersionUID(1L) -private[akka] case class ScatterGatherFirstCompletedRoutees( +private[akka] final case class ScatterGatherFirstCompletedRoutees( routees: immutable.IndexedSeq[Routee], within: FiniteDuration) extends Routee { override def send(message: Any, sender: ActorRef): Unit = { diff --git a/akka-actor/src/main/scala/akka/serialization/Serialization.scala b/akka-actor/src/main/scala/akka/serialization/Serialization.scala index ce5bc8dd42..15858aa236 100644 --- a/akka-actor/src/main/scala/akka/serialization/Serialization.scala +++ b/akka-actor/src/main/scala/akka/serialization/Serialization.scala @@ -42,7 +42,7 @@ object Serialization { * Serialization information needed for serializing local actor refs. * INTERNAL API */ - private[akka] case class Information(address: Address, system: ActorSystem) + private[akka] final case class Information(address: Address, system: ActorSystem) /** * The serialized path of an actorRef, based on the current transport serialization information. diff --git a/akka-actor/src/main/scala/akka/util/WildcardTree.scala b/akka-actor/src/main/scala/akka/util/WildcardTree.scala index 054de1b8d7..5fb088bc45 100644 --- a/akka-actor/src/main/scala/akka/util/WildcardTree.scala +++ b/akka-actor/src/main/scala/akka/util/WildcardTree.scala @@ -11,7 +11,7 @@ private[akka] object WildcardTree { private val empty = new WildcardTree[Nothing]() def apply[T](): WildcardTree[T] = empty.asInstanceOf[WildcardTree[T]] } -private[akka] case class WildcardTree[T](data: Option[T] = None, children: Map[String, WildcardTree[T]] = HashMap[String, WildcardTree[T]]()) { +private[akka] final case class WildcardTree[T](data: Option[T] = None, children: Map[String, WildcardTree[T]] = HashMap[String, WildcardTree[T]]()) { def insert(elems: Iterator[String], d: T): WildcardTree[T] = if (!elems.hasNext) { diff --git a/akka-camel/src/main/scala/akka/camel/Producer.scala b/akka-camel/src/main/scala/akka/camel/Producer.scala index b3ea83eb3c..cedeb6247c 100644 --- a/akka-camel/src/main/scala/akka/camel/Producer.scala +++ b/akka-camel/src/main/scala/akka/camel/Producer.scala @@ -158,12 +158,12 @@ trait Producer extends ProducerSupport { this: Actor ⇒ /** * INTERNAL API */ -private case class MessageResult(message: CamelMessage) extends NoSerializationVerificationNeeded +private final case class MessageResult(message: CamelMessage) extends NoSerializationVerificationNeeded /** * INTERNAL API */ -private case class FailureResult(cause: Throwable, headers: Map[String, Any] = Map.empty) extends NoSerializationVerificationNeeded +private final case class FailureResult(cause: Throwable, headers: Map[String, Any] = Map.empty) extends NoSerializationVerificationNeeded /** * A one-way producer. diff --git a/akka-camel/src/main/scala/akka/camel/internal/ActivationTracker.scala b/akka-camel/src/main/scala/akka/camel/internal/ActivationTracker.scala index 24d6e7d1e9..6ceb85ede3 100644 --- a/akka-camel/src/main/scala/akka/camel/internal/ActivationTracker.scala +++ b/akka-camel/src/main/scala/akka/camel/internal/ActivationTracker.scala @@ -113,11 +113,11 @@ private[camel] class ActivationTracker extends Actor with ActorLogging { * A request message to the ActivationTracker for the status of activation. * @param ref the actorRef */ -private[camel] case class AwaitActivation(ref: ActorRef) extends ActivationMessage(ref) +private[camel] final case class AwaitActivation(ref: ActorRef) extends ActivationMessage(ref) /** * INTERNAL API * A request message to the ActivationTracker for the status of de-activation. * @param ref the actorRef */ -private[camel] case class AwaitDeActivation(ref: ActorRef) extends ActivationMessage(ref) +private[camel] final case class AwaitDeActivation(ref: ActorRef) extends ActivationMessage(ref) diff --git a/akka-camel/src/main/scala/akka/camel/internal/CamelSupervisor.scala b/akka-camel/src/main/scala/akka/camel/internal/CamelSupervisor.scala index e2e3f01960..1b832a18f1 100644 --- a/akka-camel/src/main/scala/akka/camel/internal/CamelSupervisor.scala +++ b/akka-camel/src/main/scala/akka/camel/internal/CamelSupervisor.scala @@ -49,27 +49,27 @@ private[camel] object CamelSupervisor { * INTERNAL API * Registers a consumer or a producer. */ - case class Register(actorRef: ActorRef, endpointUri: String, config: Option[ConsumerConfig] = None) extends NoSerializationVerificationNeeded + final case class Register(actorRef: ActorRef, endpointUri: String, config: Option[ConsumerConfig] = None) extends NoSerializationVerificationNeeded /** * INTERNAL API * De-registers a producer or a consumer. */ @SerialVersionUID(1L) - case class DeRegister(actorRef: ActorRef) extends CamelSupervisorMessage + final case class DeRegister(actorRef: ActorRef) extends CamelSupervisorMessage /** * INTERNAL API * Adds a watch for the actor */ @SerialVersionUID(1L) - case class AddWatch(actorRef: ActorRef) extends CamelSupervisorMessage + final case class AddWatch(actorRef: ActorRef) extends CamelSupervisorMessage /** * INTERNAL API * Provides a Producer with the required camel objects to function. */ - case class CamelProducerObjects(endpoint: Endpoint, processor: SendProcessor) extends NoSerializationVerificationNeeded + final case class CamelProducerObjects(endpoint: Endpoint, processor: SendProcessor) extends NoSerializationVerificationNeeded } /** diff --git a/akka-camel/src/test/scala/akka/camel/ConcurrentActivationTest.scala b/akka-camel/src/test/scala/akka/camel/ConcurrentActivationTest.scala index 00ae2bf0a5..5648862c95 100644 --- a/akka-camel/src/test/scala/akka/camel/ConcurrentActivationTest.scala +++ b/akka-camel/src/test/scala/akka/camel/ConcurrentActivationTest.scala @@ -103,11 +103,11 @@ class ConsumerBroadcast(promise: Promise[(Future[List[List[ActorRef]]], Future[L } } -case class CreateRegistrars(number: Int) -case class RegisterConsumersAndProducers(endpointUri: String) -case class DeRegisterConsumersAndProducers() -case class Activations() -case class DeActivations() +final case class CreateRegistrars(number: Int) +final case class RegisterConsumersAndProducers(endpointUri: String) +final case class DeRegisterConsumersAndProducers() +final case class Activations() +final case class DeActivations() class Registrar(val start: Int, val number: Int, activationsPromise: Promise[List[ActorRef]], deActivationsPromise: Promise[List[ActorRef]]) extends Actor with ActorLogging { diff --git a/akka-cluster/src/main/scala/akka/cluster/AutoDown.scala b/akka-cluster/src/main/scala/akka/cluster/AutoDown.scala index deaf0c1b1a..83e7658b45 100644 --- a/akka-cluster/src/main/scala/akka/cluster/AutoDown.scala +++ b/akka-cluster/src/main/scala/akka/cluster/AutoDown.scala @@ -20,7 +20,7 @@ private[cluster] object AutoDown { def props(autoDownUnreachableAfter: FiniteDuration): Props = Props(classOf[AutoDown], autoDownUnreachableAfter) - case class UnreachableTimeout(node: UniqueAddress) + final case class UnreachableTimeout(node: UniqueAddress) } /** diff --git a/akka-cluster/src/main/scala/akka/cluster/ClusterDaemon.scala b/akka-cluster/src/main/scala/akka/cluster/ClusterDaemon.scala index be5057f697..d2b91e3f12 100644 --- a/akka-cluster/src/main/scala/akka/cluster/ClusterDaemon.scala +++ b/akka-cluster/src/main/scala/akka/cluster/ClusterDaemon.scala @@ -35,19 +35,19 @@ private[cluster] object ClusterUserAction { * Join will be sent to the other node. */ @SerialVersionUID(1L) - case class JoinTo(address: Address) + final case class JoinTo(address: Address) /** * Command to leave the cluster. */ @SerialVersionUID(1L) - case class Leave(address: Address) extends ClusterMessage + final case class Leave(address: Address) extends ClusterMessage /** * Command to mark node as temporary down. */ @SerialVersionUID(1L) - case class Down(address: Address) extends ClusterMessage + final case class Down(address: Address) extends ClusterMessage } @@ -61,20 +61,20 @@ private[cluster] object InternalClusterAction { * @param node the node that wants to join the cluster */ @SerialVersionUID(1L) - case class Join(node: UniqueAddress, roles: Set[String]) extends ClusterMessage + final case class Join(node: UniqueAddress, roles: Set[String]) extends ClusterMessage /** * Reply to Join * @param from the sender node in the cluster, i.e. the node that received the Join command */ @SerialVersionUID(1L) - case class Welcome(from: UniqueAddress, gossip: Gossip) extends ClusterMessage + final case class Welcome(from: UniqueAddress, gossip: Gossip) extends ClusterMessage /** * Command to initiate the process to join the specified * seed nodes. */ - case class JoinSeedNodes(seedNodes: immutable.IndexedSeq[Address]) + final case class JoinSeedNodes(seedNodes: immutable.IndexedSeq[Address]) /** * Start message of the process to join one of the seed nodes. @@ -96,13 +96,13 @@ private[cluster] object InternalClusterAction { * @see JoinSeedNode */ @SerialVersionUID(1L) - case class InitJoinAck(address: Address) extends ClusterMessage + final case class InitJoinAck(address: Address) extends ClusterMessage /** * @see JoinSeedNode */ @SerialVersionUID(1L) - case class InitJoinNack(address: Address) extends ClusterMessage + final case class InitJoinNack(address: Address) extends ClusterMessage /** * Marker interface for periodic tick messages @@ -121,30 +121,30 @@ private[cluster] object InternalClusterAction { case object PublishStatsTick extends Tick - case class SendGossipTo(address: Address) + final case class SendGossipTo(address: Address) case object GetClusterCoreRef - case class PublisherCreated(publisher: ActorRef) + final case class PublisherCreated(publisher: ActorRef) /** * Comand to [[akka.cluster.ClusterDaemon]] to create a * [[akka.cluster.OnMemberUpListener]]. */ - case class AddOnMemberUpListener(callback: Runnable) extends NoSerializationVerificationNeeded + final case class AddOnMemberUpListener(callback: Runnable) extends NoSerializationVerificationNeeded sealed trait SubscriptionMessage - case class Subscribe(subscriber: ActorRef, initialStateMode: SubscriptionInitialStateMode, to: Set[Class[_]]) extends SubscriptionMessage - case class Unsubscribe(subscriber: ActorRef, to: Option[Class[_]]) extends SubscriptionMessage + final case class Subscribe(subscriber: ActorRef, initialStateMode: SubscriptionInitialStateMode, to: Set[Class[_]]) extends SubscriptionMessage + final case class Unsubscribe(subscriber: ActorRef, to: Option[Class[_]]) extends SubscriptionMessage /** * @param receiver if `receiver` is defined the event will only be sent to that * actor, otherwise it will be sent to all subscribers via the `eventStream`. */ - case class PublishCurrentClusterState(receiver: Option[ActorRef]) extends SubscriptionMessage + final case class PublishCurrentClusterState(receiver: Option[ActorRef]) extends SubscriptionMessage sealed trait PublishMessage - case class PublishChanges(newGossip: Gossip) extends PublishMessage - case class PublishEvent(event: ClusterDomainEvent) extends PublishMessage + final case class PublishChanges(newGossip: Gossip) extends PublishMessage + final case class PublishEvent(event: ClusterDomainEvent) extends PublishMessage } /** @@ -1134,7 +1134,7 @@ private[cluster] class OnMemberUpListener(callback: Runnable) extends Actor with * INTERNAL API */ @SerialVersionUID(1L) -private[cluster] case class GossipStats( +private[cluster] final case class GossipStats( receivedGossipCount: Long = 0L, mergeCount: Long = 0L, sameCount: Long = 0L, @@ -1177,7 +1177,7 @@ private[cluster] case class GossipStats( * INTERNAL API */ @SerialVersionUID(1L) -private[cluster] case class VectorClockStats( +private[cluster] final case class VectorClockStats( versionSize: Int = 0, seenLatest: Int = 0) diff --git a/akka-cluster/src/main/scala/akka/cluster/ClusterEvent.scala b/akka-cluster/src/main/scala/akka/cluster/ClusterEvent.scala index a8a636f037..f90261a65a 100644 --- a/akka-cluster/src/main/scala/akka/cluster/ClusterEvent.scala +++ b/akka-cluster/src/main/scala/akka/cluster/ClusterEvent.scala @@ -53,7 +53,7 @@ object ClusterEvent { /** * Current snapshot state of the cluster. Sent to new subscriber. */ - case class CurrentClusterState( + final case class CurrentClusterState( members: immutable.SortedSet[Member] = immutable.SortedSet.empty, unreachable: Set[Member] = Set.empty, seenBy: Set[Address] = Set.empty, @@ -122,7 +122,7 @@ object ClusterEvent { /** * Member status changed to Up. */ - case class MemberUp(member: Member) extends MemberEvent { + final case class MemberUp(member: Member) extends MemberEvent { if (member.status != Up) throw new IllegalArgumentException("Expected Up status, got: " + member) } @@ -130,7 +130,7 @@ object ClusterEvent { * Member status changed to [[MemberStatus.Exiting]] and will be removed * when all members have seen the `Exiting` status. */ - case class MemberExited(member: Member) extends MemberEvent { + final case class MemberExited(member: Member) extends MemberEvent { if (member.status != Exiting) throw new IllegalArgumentException("Expected Exiting status, got: " + member) } @@ -141,7 +141,7 @@ object ClusterEvent { * When `previousStatus` is `MemberStatus.Exiting` the node was removed * after graceful leaving and exiting. */ - case class MemberRemoved(member: Member, previousStatus: MemberStatus) extends MemberEvent { + final case class MemberRemoved(member: Member, previousStatus: MemberStatus) extends MemberEvent { if (member.status != Removed) throw new IllegalArgumentException("Expected Removed status, got: " + member) } @@ -149,7 +149,7 @@ object ClusterEvent { * Leader of the cluster members changed. Published when the state change * is first seen on a node. */ - case class LeaderChanged(leader: Option[Address]) extends ClusterDomainEvent { + final case class LeaderChanged(leader: Option[Address]) extends ClusterDomainEvent { /** * Java API * @return address of current leader, or null if none @@ -161,7 +161,7 @@ object ClusterEvent { * First member (leader) of the members within a role set changed. * Published when the state change is first seen on a node. */ - case class RoleLeaderChanged(role: String, leader: Option[Address]) extends ClusterDomainEvent { + final case class RoleLeaderChanged(role: String, leader: Option[Address]) extends ClusterDomainEvent { /** * Java API * @return address of current leader, or null if none @@ -178,19 +178,19 @@ object ClusterEvent { /** * A member is considered as unreachable by the failure detector. */ - case class UnreachableMember(member: Member) extends ReachabilityEvent + final case class UnreachableMember(member: Member) extends ReachabilityEvent /** * A member is considered as reachable by the failure detector * after having been unreachable. * @see [[UnreachableMember]] */ - case class ReachableMember(member: Member) extends ReachabilityEvent + final case class ReachableMember(member: Member) extends ReachabilityEvent /** * Current snapshot of cluster node metrics. Published to subscribers. */ - case class ClusterMetricsChanged(nodeMetrics: Set[NodeMetrics]) extends ClusterDomainEvent { + final case class ClusterMetricsChanged(nodeMetrics: Set[NodeMetrics]) extends ClusterDomainEvent { /** * Java API */ @@ -202,17 +202,17 @@ object ClusterEvent { * INTERNAL API * The nodes that have seen current version of the Gossip. */ - private[cluster] case class SeenChanged(convergence: Boolean, seenBy: Set[Address]) extends ClusterDomainEvent + private[cluster] final case class SeenChanged(convergence: Boolean, seenBy: Set[Address]) extends ClusterDomainEvent /** * INTERNAL API */ - private[cluster] case class ReachabilityChanged(reachability: Reachability) extends ClusterDomainEvent + private[cluster] final case class ReachabilityChanged(reachability: Reachability) extends ClusterDomainEvent /** * INTERNAL API */ - private[cluster] case class CurrentInternalStats( + private[cluster] final case class CurrentInternalStats( gossipStats: GossipStats, vclockStats: VectorClockStats) extends ClusterDomainEvent diff --git a/akka-cluster/src/main/scala/akka/cluster/ClusterHeartbeat.scala b/akka-cluster/src/main/scala/akka/cluster/ClusterHeartbeat.scala index 9fdfc819d1..8c4daddd63 100644 --- a/akka-cluster/src/main/scala/akka/cluster/ClusterHeartbeat.scala +++ b/akka-cluster/src/main/scala/akka/cluster/ClusterHeartbeat.scala @@ -34,16 +34,16 @@ private[cluster] object ClusterHeartbeatSender { /** * Sent at regular intervals for failure detection. */ - case class Heartbeat(from: Address) extends ClusterMessage + final case class Heartbeat(from: Address) extends ClusterMessage /** * Sent as reply to [[Heartbeat]] messages. */ - case class HeartbeatRsp(from: UniqueAddress) extends ClusterMessage + final case class HeartbeatRsp(from: UniqueAddress) extends ClusterMessage // sent to self only case object HeartbeatTick - case class ExpectedFirstHeartbeat(from: UniqueAddress) + final case class ExpectedFirstHeartbeat(from: UniqueAddress) } @@ -164,7 +164,7 @@ private[cluster] final class ClusterHeartbeatSender extends Actor with ActorLogg * State of [[ClusterHeartbeatSender]]. Encapsulated to facilitate unit testing. * It is immutable, but it updates the failureDetector. */ -private[cluster] case class ClusterHeartbeatSenderState( +private[cluster] final case class ClusterHeartbeatSenderState( ring: HeartbeatNodeRing, unreachable: Set[UniqueAddress], failureDetector: FailureDetectorRegistry[Address]) { @@ -224,7 +224,7 @@ private[cluster] case class ClusterHeartbeatSenderState( * * It is immutable, i.e. the methods return new instances. */ -private[cluster] case class HeartbeatNodeRing(selfAddress: UniqueAddress, nodes: Set[UniqueAddress], monitoredByNrOfMembers: Int) { +private[cluster] final case class HeartbeatNodeRing(selfAddress: UniqueAddress, nodes: Set[UniqueAddress], monitoredByNrOfMembers: Int) { require(nodes contains selfAddress, s"nodes [${nodes.mkString(", ")}] must contain selfAddress [${selfAddress}]") diff --git a/akka-cluster/src/main/scala/akka/cluster/ClusterMetricsCollector.scala b/akka-cluster/src/main/scala/akka/cluster/ClusterMetricsCollector.scala index db601b14b2..3cc10bc815 100644 --- a/akka-cluster/src/main/scala/akka/cluster/ClusterMetricsCollector.scala +++ b/akka-cluster/src/main/scala/akka/cluster/ClusterMetricsCollector.scala @@ -184,7 +184,7 @@ private[cluster] object MetricsGossip { * @param nodes metrics per node */ @SerialVersionUID(1L) -private[cluster] case class MetricsGossip(nodes: Set[NodeMetrics]) { +private[cluster] final case class MetricsGossip(nodes: Set[NodeMetrics]) { /** * Removes nodes if their correlating node ring members are not [[akka.cluster.MemberStatus.Up]] @@ -224,7 +224,7 @@ private[cluster] case class MetricsGossip(nodes: Set[NodeMetrics]) { * Envelope adding a sender address to the gossip. */ @SerialVersionUID(1L) -private[cluster] case class MetricsGossipEnvelope(from: Address, gossip: MetricsGossip, reply: Boolean) +private[cluster] final case class MetricsGossipEnvelope(from: Address, gossip: MetricsGossip, reply: Boolean) extends ClusterMessage private[cluster] object EWMA { @@ -272,7 +272,7 @@ private[cluster] object EWMA { * */ @SerialVersionUID(1L) -private[cluster] case class EWMA(value: Double, alpha: Double) { +private[cluster] final case class EWMA(value: Double, alpha: Double) { require(0.0 <= alpha && alpha <= 1.0, "alpha must be between 0.0 and 1.0") @@ -302,7 +302,7 @@ private[cluster] case class EWMA(value: Double, alpha: Double) { * averages (e.g. system load average) or finite (e.g. as number of processors), are not trended. */ @SerialVersionUID(1L) -case class Metric private[cluster] (name: String, value: Number, private[cluster] val average: Option[EWMA]) +final case class Metric private[cluster] (name: String, value: Number, private[cluster] val average: Option[EWMA]) extends MetricNumericConverter { require(defined(value), s"Invalid Metric [$name] value [$value]") @@ -385,7 +385,7 @@ object Metric extends MetricNumericConverter { * @param metrics the set of sampled [[akka.actor.Metric]] */ @SerialVersionUID(1L) -case class NodeMetrics(address: Address, timestamp: Long, metrics: Set[Metric] = Set.empty[Metric]) { +final case class NodeMetrics(address: Address, timestamp: Long, metrics: Set[Metric] = Set.empty[Metric]) { /** * Returns the most recent data. @@ -481,7 +481,7 @@ object StandardMetrics { * Can be undefined on some OS. */ @SerialVersionUID(1L) - case class HeapMemory(address: Address, timestamp: Long, used: Long, committed: Long, max: Option[Long]) { + final case class HeapMemory(address: Address, timestamp: Long, used: Long, committed: Long, max: Option[Long]) { require(committed > 0L, "committed heap expected to be > 0 bytes") require(max.isEmpty || max.get > 0L, "max heap expected to be > 0 bytes") } @@ -525,7 +525,7 @@ object StandardMetrics { * @param processors the number of available processors */ @SerialVersionUID(1L) - case class Cpu( + final case class Cpu( address: Address, timestamp: Long, systemLoadAverage: Option[Double], diff --git a/akka-cluster/src/main/scala/akka/cluster/Gossip.scala b/akka-cluster/src/main/scala/akka/cluster/Gossip.scala index e0258cac32..d5054f3978 100644 --- a/akka-cluster/src/main/scala/akka/cluster/Gossip.scala +++ b/akka-cluster/src/main/scala/akka/cluster/Gossip.scala @@ -60,7 +60,7 @@ private[cluster] object Gossip { * removed node telling it to shut itself down. */ @SerialVersionUID(1L) -private[cluster] case class Gossip( +private[cluster] final case class Gossip( members: immutable.SortedSet[Member], // sorted set of members with their status, sorted by address overview: GossipOverview = GossipOverview(), version: VectorClock = VectorClock()) { // vector clock version @@ -212,7 +212,7 @@ private[cluster] case class Gossip( * Represents the overview of the cluster, holds the cluster convergence table and set with unreachable nodes. */ @SerialVersionUID(1L) -private[cluster] case class GossipOverview( +private[cluster] final case class GossipOverview( seen: Set[UniqueAddress] = Set.empty, reachability: Reachability = Reachability.empty) { @@ -275,4 +275,4 @@ private[cluster] class GossipEnvelope private ( * it replies with its `GossipStatus`. Same versions ends the chat immediately. */ @SerialVersionUID(1L) -private[cluster] case class GossipStatus(from: UniqueAddress, version: VectorClock) extends ClusterMessage +private[cluster] final case class GossipStatus(from: UniqueAddress, version: VectorClock) extends ClusterMessage diff --git a/akka-cluster/src/main/scala/akka/cluster/Member.scala b/akka-cluster/src/main/scala/akka/cluster/Member.scala index ff5cbd194b..5bc0d0cae3 100644 --- a/akka-cluster/src/main/scala/akka/cluster/Member.scala +++ b/akka-cluster/src/main/scala/akka/cluster/Member.scala @@ -219,7 +219,7 @@ object MemberStatus { * INTERNAL API */ @SerialVersionUID(1L) -private[cluster] case class UniqueAddress(address: Address, uid: Int) extends Ordered[UniqueAddress] { +private[cluster] final case class UniqueAddress(address: Address, uid: Int) extends Ordered[UniqueAddress] { override def hashCode = uid def compare(that: UniqueAddress): Int = { diff --git a/akka-cluster/src/main/scala/akka/cluster/Reachability.scala b/akka-cluster/src/main/scala/akka/cluster/Reachability.scala index fb77c5a033..64211f488a 100644 --- a/akka-cluster/src/main/scala/akka/cluster/Reachability.scala +++ b/akka-cluster/src/main/scala/akka/cluster/Reachability.scala @@ -23,7 +23,7 @@ private[cluster] object Reachability { } @SerialVersionUID(1L) - case class Record(observer: UniqueAddress, subject: UniqueAddress, status: ReachabilityStatus, version: Long) + final case class Record(observer: UniqueAddress, subject: UniqueAddress, status: ReachabilityStatus, version: Long) sealed trait ReachabilityStatus @SerialVersionUID(1L) case object Reachable extends ReachabilityStatus diff --git a/akka-cluster/src/main/scala/akka/cluster/VectorClock.scala b/akka-cluster/src/main/scala/akka/cluster/VectorClock.scala index 75cc4329cf..b4145b227b 100644 --- a/akka-cluster/src/main/scala/akka/cluster/VectorClock.scala +++ b/akka-cluster/src/main/scala/akka/cluster/VectorClock.scala @@ -70,7 +70,7 @@ private[cluster] object VectorClock { * Based on code from the 'vlock' VectorClock library by Coda Hale. */ @SerialVersionUID(1L) -case class VectorClock( +final case class VectorClock( versions: TreeMap[VectorClock.Node, Long] = TreeMap.empty[VectorClock.Node, Long]) { import VectorClock._ diff --git a/akka-cluster/src/main/scala/akka/cluster/routing/AdaptiveLoadBalancing.scala b/akka-cluster/src/main/scala/akka/cluster/routing/AdaptiveLoadBalancing.scala index 50e39290c1..9bff4aaaaf 100644 --- a/akka-cluster/src/main/scala/akka/cluster/routing/AdaptiveLoadBalancing.scala +++ b/akka-cluster/src/main/scala/akka/cluster/routing/AdaptiveLoadBalancing.scala @@ -329,7 +329,7 @@ object MixMetricsSelector extends MixMetricsSelectorBase( * [akka.cluster.routing.CpuMetricsSelector], and [akka.cluster.routing.SystemLoadAverageMetricsSelector] */ @SerialVersionUID(1L) -case class MixMetricsSelector( +final case class MixMetricsSelector( selectors: immutable.IndexedSeq[CapacityMetricsSelector]) extends MixMetricsSelectorBase(selectors) @@ -548,7 +548,7 @@ private[akka] class AdaptiveLoadBalancingMetricsListener(routingLogic: AdaptiveL */ @SerialVersionUID(1L) @deprecated("Use AdaptiveLoadBalancingPool or AdaptiveLoadBalancingGroup", "2.3") -case class AdaptiveLoadBalancingRouter( +final case class AdaptiveLoadBalancingRouter( metricsSelector: MetricsSelector = MixMetricsSelector, nrOfInstances: Int = 0, routees: immutable.Iterable[String] = Nil, override val resizer: Option[Resizer] = None, diff --git a/akka-cluster/src/main/scala/akka/cluster/routing/ClusterRouterConfig.scala b/akka-cluster/src/main/scala/akka/cluster/routing/ClusterRouterConfig.scala index cdba1accdf..93027ea6af 100644 --- a/akka-cluster/src/main/scala/akka/cluster/routing/ClusterRouterConfig.scala +++ b/akka-cluster/src/main/scala/akka/cluster/routing/ClusterRouterConfig.scala @@ -55,7 +55,7 @@ object ClusterRouterGroupSettings { * `totalInstances` of cluster router must be > 0 */ @SerialVersionUID(1L) -case class ClusterRouterGroupSettings( +final case class ClusterRouterGroupSettings( totalInstances: Int, routeesPaths: immutable.Seq[String], allowLocalRoutees: Boolean, @@ -109,7 +109,7 @@ object ClusterRouterPoolSettings { * `maxInstancesPerNode` of cluster router must be 1 when routeesPath is defined */ @SerialVersionUID(1L) -case class ClusterRouterPoolSettings( +final case class ClusterRouterPoolSettings( totalInstances: Int, maxInstancesPerNode: Int, allowLocalRoutees: Boolean, diff --git a/akka-cluster/src/main/scala/akka/cluster/routing/DeprecatedClusterRouterConfig.scala b/akka-cluster/src/main/scala/akka/cluster/routing/DeprecatedClusterRouterConfig.scala index 635ebb58e6..7da845f184 100644 --- a/akka-cluster/src/main/scala/akka/cluster/routing/DeprecatedClusterRouterConfig.scala +++ b/akka-cluster/src/main/scala/akka/cluster/routing/DeprecatedClusterRouterConfig.scala @@ -81,7 +81,7 @@ object ClusterRouterSettings { */ @SerialVersionUID(1L) @deprecated("Use ClusterRouterPoolSettings or ClusterRouterGroupSettings", "2.3") -case class ClusterRouterSettings private[akka] ( +final case class ClusterRouterSettings private[akka] ( totalInstances: Int, maxInstancesPerNode: Int, routeesPath: String, diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/ClientDowningNodeThatIsUnreachableSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/ClientDowningNodeThatIsUnreachableSpec.scala index fbe2528285..2eb717a775 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/ClientDowningNodeThatIsUnreachableSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/ClientDowningNodeThatIsUnreachableSpec.scala @@ -10,7 +10,7 @@ import akka.testkit._ import akka.actor.Address import scala.collection.immutable -case class ClientDowningNodeThatIsUnreachableMultiNodeConfig(failureDetectorPuppet: Boolean) extends MultiNodeConfig { +final case class ClientDowningNodeThatIsUnreachableMultiNodeConfig(failureDetectorPuppet: Boolean) extends MultiNodeConfig { val first = role("first") val second = role("second") val third = role("third") diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/ClientDowningNodeThatIsUpSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/ClientDowningNodeThatIsUpSpec.scala index ffe4045568..88fea2444f 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/ClientDowningNodeThatIsUpSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/ClientDowningNodeThatIsUpSpec.scala @@ -11,7 +11,7 @@ import akka.testkit._ import akka.actor.Address import scala.collection.immutable -case class ClientDowningNodeThatIsUpMultiNodeConfig(failureDetectorPuppet: Boolean) extends MultiNodeConfig { +final case class ClientDowningNodeThatIsUpMultiNodeConfig(failureDetectorPuppet: Boolean) extends MultiNodeConfig { val first = role("first") val second = role("second") val third = role("third") diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/ConvergenceSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/ConvergenceSpec.scala index 1ff1d08800..3376ed2197 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/ConvergenceSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/ConvergenceSpec.scala @@ -12,7 +12,7 @@ import akka.testkit._ import scala.concurrent.duration._ import akka.actor.Address -case class ConvergenceMultiNodeConfig(failureDetectorPuppet: Boolean) extends MultiNodeConfig { +final case class ConvergenceMultiNodeConfig(failureDetectorPuppet: Boolean) extends MultiNodeConfig { val first = role("first") val second = role("second") val third = role("third") diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/LeaderDowningNodeThatIsUnreachableSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/LeaderDowningNodeThatIsUnreachableSpec.scala index 8ae8b33339..bb7ded5570 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/LeaderDowningNodeThatIsUnreachableSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/LeaderDowningNodeThatIsUnreachableSpec.scala @@ -13,7 +13,7 @@ import akka.actor._ import scala.concurrent.duration._ import scala.collection.immutable -case class LeaderDowningNodeThatIsUnreachableMultiNodeConfig(failureDetectorPuppet: Boolean) extends MultiNodeConfig { +final case class LeaderDowningNodeThatIsUnreachableMultiNodeConfig(failureDetectorPuppet: Boolean) extends MultiNodeConfig { val first = role("first") val second = role("second") val third = role("third") diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/LeaderElectionSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/LeaderElectionSpec.scala index c31e8f6ece..278cbeed44 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/LeaderElectionSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/LeaderElectionSpec.scala @@ -12,7 +12,7 @@ import akka.testkit._ import scala.concurrent.duration._ import scala.collection.immutable -case class LeaderElectionMultiNodeConfig(failureDetectorPuppet: Boolean) extends MultiNodeConfig { +final case class LeaderElectionMultiNodeConfig(failureDetectorPuppet: Boolean) extends MultiNodeConfig { val controller = role("controller") val first = role("first") val second = role("second") diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/SingletonClusterSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/SingletonClusterSpec.scala index c6a35b40d8..c18edbe1db 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/SingletonClusterSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/SingletonClusterSpec.scala @@ -10,7 +10,7 @@ import akka.testkit._ import scala.concurrent.duration._ import scala.collection.immutable -case class SingletonClusterMultiNodeConfig(failureDetectorPuppet: Boolean) extends MultiNodeConfig { +final case class SingletonClusterMultiNodeConfig(failureDetectorPuppet: Boolean) extends MultiNodeConfig { val first = role("first") val second = role("second") diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/SplitBrainSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/SplitBrainSpec.scala index a6bdd37295..beb953797c 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/SplitBrainSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/SplitBrainSpec.scala @@ -15,7 +15,7 @@ import scala.concurrent.duration._ import scala.collection.immutable import akka.remote.transport.ThrottlerTransportAdapter.Direction -case class SplitBrainMultiNodeConfig(failureDetectorPuppet: Boolean) extends MultiNodeConfig { +final case class SplitBrainMultiNodeConfig(failureDetectorPuppet: Boolean) extends MultiNodeConfig { val first = role("first") val second = role("second") val third = role("third") diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/StressSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/StressSpec.scala index 9dbc7d3a70..114beb6a6b 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/StressSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/StressSpec.scala @@ -227,12 +227,12 @@ private[cluster] object StressMultiJvmSpec extends MultiNodeConfig { def form: String = d.formatted("%.2f") } - case class ClusterResult( + final case class ClusterResult( address: Address, duration: Duration, clusterStats: GossipStats) - case class AggregatedClusterResult(title: String, duration: Duration, clusterStats: GossipStats) + final case class AggregatedClusterResult(title: String, duration: Duration, clusterStats: GossipStats) /** * Central aggregator of cluster statistics and metrics. @@ -652,29 +652,29 @@ private[cluster] object StressMultiJvmSpec extends MultiNodeConfig { case object RetryTick case object ReportTick case object PhiTick - case class PhiResult(from: Address, phiValues: immutable.SortedSet[PhiValue]) - case class PhiValue(address: Address, countAboveOne: Int, count: Int, max: Double) extends Ordered[PhiValue] { + final case class PhiResult(from: Address, phiValues: immutable.SortedSet[PhiValue]) + final case class PhiValue(address: Address, countAboveOne: Int, count: Int, max: Double) extends Ordered[PhiValue] { import akka.cluster.Member.addressOrdering def compare(that: PhiValue) = addressOrdering.compare(this.address, that.address) } - case class ReportTo(ref: Option[ActorRef]) - case class StatsResult(from: Address, stats: CurrentInternalStats) + final case class ReportTo(ref: Option[ActorRef]) + final case class StatsResult(from: Address, stats: CurrentInternalStats) type JobId = Int trait Job { def id: JobId } - case class SimpleJob(id: JobId, payload: Any) extends Job - case class TreeJob(id: JobId, payload: Any, idx: Int, levels: Int, width: Int) extends Job - case class Ack(id: JobId) - case class JobState(deadline: Deadline, job: Job) - case class WorkResult(duration: Duration, sendCount: Long, ackCount: Long) { + final case class SimpleJob(id: JobId, payload: Any) extends Job + final case class TreeJob(id: JobId, payload: Any, idx: Int, levels: Int, width: Int) extends Job + final case class Ack(id: JobId) + final case class JobState(deadline: Deadline, job: Job) + final case class WorkResult(duration: Duration, sendCount: Long, ackCount: Long) { def retryCount: Long = sendCount - ackCount def jobsPerSecond: Double = ackCount * 1000.0 / duration.toMillis } case object SendBatch - case class CreateTree(levels: Int, width: Int) + final case class CreateTree(levels: Int, width: Int) case object GetChildrenCount - case class ChildrenCount(numberOfChildren: Int, numberOfChildRestarts: Int) + final case class ChildrenCount(numberOfChildren: Int, numberOfChildRestarts: Int) case object Reset } diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/oldrouting/AdaptiveLoadBalancingRouterSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/oldrouting/AdaptiveLoadBalancingRouterSpec.scala index 745a5d5f43..40a882b426 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/oldrouting/AdaptiveLoadBalancingRouterSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/oldrouting/AdaptiveLoadBalancingRouterSpec.scala @@ -50,7 +50,7 @@ object AdaptiveLoadBalancingRouterMultiJvmSpec extends MultiNodeConfig { } case object AllocateMemory - case class Reply(address: Address) + final case class Reply(address: Address) val first = role("first") val second = role("second") diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/oldrouting/ClusterRoundRobinRoutedActorSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/oldrouting/ClusterRoundRobinRoutedActorSpec.scala index 6ea072412b..7afa5217b1 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/oldrouting/ClusterRoundRobinRoutedActorSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/oldrouting/ClusterRoundRobinRoutedActorSpec.scala @@ -34,7 +34,7 @@ object ClusterRoundRobinRoutedActorMultiJvmSpec extends MultiNodeConfig { } } - case class Reply(routeeType: RouteeType, ref: ActorRef) + final case class Reply(routeeType: RouteeType, ref: ActorRef) sealed trait RouteeType extends Serializable object DeployRoutee extends RouteeType diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/routing/AdaptiveLoadBalancingRouterSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/routing/AdaptiveLoadBalancingRouterSpec.scala index 8442eab31f..cdc919846d 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/routing/AdaptiveLoadBalancingRouterSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/routing/AdaptiveLoadBalancingRouterSpec.scala @@ -50,7 +50,7 @@ object AdaptiveLoadBalancingRouterMultiJvmSpec extends MultiNodeConfig { } case object AllocateMemory - case class Reply(address: Address) + final case class Reply(address: Address) val first = role("first") val second = role("second") diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/routing/ClusterConsistentHashingGroupSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/routing/ClusterConsistentHashingGroupSpec.scala index 7289ed8eab..53e426de91 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/routing/ClusterConsistentHashingGroupSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/routing/ClusterConsistentHashingGroupSpec.scala @@ -23,7 +23,7 @@ import akka.testkit._ object ClusterConsistentHashingGroupMultiJvmSpec extends MultiNodeConfig { case object Get - case class Collected(messages: Set[Any]) + final case class Collected(messages: Set[Any]) class Destination extends Actor { var receivedMessages = Set.empty[Any] diff --git a/akka-cluster/src/multi-jvm/scala/akka/cluster/routing/ClusterRoundRobinSpec.scala b/akka-cluster/src/multi-jvm/scala/akka/cluster/routing/ClusterRoundRobinSpec.scala index 1588bffcba..e3fa6e81ab 100644 --- a/akka-cluster/src/multi-jvm/scala/akka/cluster/routing/ClusterRoundRobinSpec.scala +++ b/akka-cluster/src/multi-jvm/scala/akka/cluster/routing/ClusterRoundRobinSpec.scala @@ -37,7 +37,7 @@ object ClusterRoundRobinMultiJvmSpec extends MultiNodeConfig { } } - case class Reply(routeeType: RouteeType, ref: ActorRef) + final case class Reply(routeeType: RouteeType, ref: ActorRef) sealed trait RouteeType extends Serializable object PoolRoutee extends RouteeType diff --git a/akka-cluster/src/test/scala/akka/cluster/AutoDownSpec.scala b/akka-cluster/src/test/scala/akka/cluster/AutoDownSpec.scala index 4038a87f27..82ad48aa35 100644 --- a/akka-cluster/src/test/scala/akka/cluster/AutoDownSpec.scala +++ b/akka-cluster/src/test/scala/akka/cluster/AutoDownSpec.scala @@ -16,7 +16,7 @@ import akka.cluster.ClusterEvent._ import akka.testkit.AkkaSpec object AutoDownSpec { - case class DownCalled(address: Address) + final case class DownCalled(address: Address) val memberA = TestMember(Address("akka.tcp", "sys", "a", 2552), Up) val memberB = TestMember(Address("akka.tcp", "sys", "b", 2552), Up) diff --git a/akka-cluster/src/test/scala/akka/cluster/ClusterSpec.scala b/akka-cluster/src/test/scala/akka/cluster/ClusterSpec.scala index 04e53cbc47..58b5975d52 100644 --- a/akka-cluster/src/test/scala/akka/cluster/ClusterSpec.scala +++ b/akka-cluster/src/test/scala/akka/cluster/ClusterSpec.scala @@ -30,7 +30,7 @@ object ClusterSpec { # akka.loglevel = DEBUG """ - case class GossipTo(address: Address) + final case class GossipTo(address: Address) } @org.junit.runner.RunWith(classOf[org.scalatest.junit.JUnitRunner]) diff --git a/akka-contrib/src/main/scala/akka/contrib/pattern/ClusterClient.scala b/akka-contrib/src/main/scala/akka/contrib/pattern/ClusterClient.scala index 96a83d4d37..13f3f248a3 100644 --- a/akka-contrib/src/main/scala/akka/contrib/pattern/ClusterClient.scala +++ b/akka-contrib/src/main/scala/akka/contrib/pattern/ClusterClient.scala @@ -63,16 +63,16 @@ object ClusterClient { } @SerialVersionUID(1L) - case class Send(path: String, msg: Any, localAffinity: Boolean) { + final case class Send(path: String, msg: Any, localAffinity: Boolean) { /** * Convenience constructor with `localAffinity` false */ def this(path: String, msg: Any) = this(path, msg, localAffinity = false) } @SerialVersionUID(1L) - case class SendToAll(path: String, msg: Any) + final case class SendToAll(path: String, msg: Any) @SerialVersionUID(1L) - case class Publish(topic: String, msg: Any) + final case class Publish(topic: String, msg: Any) /** * INTERNAL API @@ -313,7 +313,7 @@ object ClusterReceptionist { @SerialVersionUID(1L) case object GetContacts @SerialVersionUID(1L) - case class Contacts(contactPoints: immutable.IndexedSeq[ActorSelection]) + final case class Contacts(contactPoints: immutable.IndexedSeq[ActorSelection]) @SerialVersionUID(1L) case object Ping diff --git a/akka-contrib/src/main/scala/akka/contrib/pattern/ClusterSharding.scala b/akka-contrib/src/main/scala/akka/contrib/pattern/ClusterSharding.scala index ac0a1aed0a..2f2c1d9ac1 100644 --- a/akka-contrib/src/main/scala/akka/contrib/pattern/ClusterSharding.scala +++ b/akka-contrib/src/main/scala/akka/contrib/pattern/ClusterSharding.scala @@ -338,10 +338,10 @@ class ClusterSharding(system: ExtendedActorSystem) extends Extension { */ private[akka] object ClusterShardingGuardian { import ShardCoordinator.ShardAllocationStrategy - case class Start(typeName: String, entryProps: Option[Props], idExtractor: ShardRegion.IdExtractor, - shardResolver: ShardRegion.ShardResolver, allocationStrategy: ShardAllocationStrategy) + final case class Start(typeName: String, entryProps: Option[Props], idExtractor: ShardRegion.IdExtractor, + shardResolver: ShardRegion.ShardResolver, allocationStrategy: ShardAllocationStrategy) extends NoSerializationVerificationNeeded - case class Started(shardRegion: ActorRef) extends NoSerializationVerificationNeeded + final case class Started(shardRegion: ActorRef) extends NoSerializationVerificationNeeded } /** @@ -542,7 +542,7 @@ object ShardRegion { * * [[akka.actor.PoisonPill]] is a perfectly fine `stopMessage`. */ - @SerialVersionUID(1L) case class Passivate(stopMessage: Any) extends ShardRegionCommand + @SerialVersionUID(1L) final case class Passivate(stopMessage: Any) extends ShardRegionCommand private case object Retry extends ShardRegionCommand @@ -978,24 +978,24 @@ object ShardCoordinator { /** * `ShardRegion` registers to `ShardCoordinator`, until it receives [[RegisterAck]].  */ - @SerialVersionUID(1L) case class Register(shardRegion: ActorRef) extends CoordinatorCommand + @SerialVersionUID(1L) final case class Register(shardRegion: ActorRef) extends CoordinatorCommand /** * `ShardRegion` in proxy only mode registers to `ShardCoordinator`, until it receives [[RegisterAck]].  */ - @SerialVersionUID(1L) case class RegisterProxy(shardRegionProxy: ActorRef) extends CoordinatorCommand + @SerialVersionUID(1L) final case class RegisterProxy(shardRegionProxy: ActorRef) extends CoordinatorCommand /** * Acknowledgement from `ShardCoordinator` that [[Register]] or [[RegisterProxy]] was sucessful. */ - @SerialVersionUID(1L) case class RegisterAck(coordinator: ActorRef) extends CoordinatorMessage + @SerialVersionUID(1L) final case class RegisterAck(coordinator: ActorRef) extends CoordinatorMessage /** * `ShardRegion` requests the location of a shard by sending this message * to the `ShardCoordinator`. */ - @SerialVersionUID(1L) case class GetShardHome(shard: ShardId) extends CoordinatorCommand + @SerialVersionUID(1L) final case class GetShardHome(shard: ShardId) extends CoordinatorCommand /** * `ShardCoordinator` replies with this message for [[GetShardHome]] requests. */ - @SerialVersionUID(1L) case class ShardHome(shard: ShardId, ref: ActorRef) extends CoordinatorMessage + @SerialVersionUID(1L) final case class ShardHome(shard: ShardId, ref: ActorRef) extends CoordinatorMessage /** * `ShardCoordinator` initiates rebalancing process by sending this message * to all registered `ShardRegion` actors (including proxy only). They are @@ -1004,31 +1004,31 @@ object ShardCoordinator { * When all have replied the `ShardCoordinator` continues by sending * [[HandOff]] to the `ShardRegion` responsible for the shard. */ - @SerialVersionUID(1L) case class BeginHandOff(shard: ShardId) extends CoordinatorMessage + @SerialVersionUID(1L) final case class BeginHandOff(shard: ShardId) extends CoordinatorMessage /** * Acknowledgement of [[BeginHandOff]] */ - @SerialVersionUID(1L) case class BeginHandOffAck(shard: ShardId) extends CoordinatorCommand + @SerialVersionUID(1L) final case class BeginHandOffAck(shard: ShardId) extends CoordinatorCommand /** * When all `ShardRegion` actors have acknoledged the [[BeginHandOff]] the * ShardCoordinator` sends this message to the `ShardRegion` responsible for the * shard. The `ShardRegion` is supposed to stop all entries in that shard and when * all entries have terminated reply with `ShardStopped` to the `ShardCoordinator`. */ - @SerialVersionUID(1L) case class HandOff(shard: ShardId) extends CoordinatorMessage + @SerialVersionUID(1L) final case class HandOff(shard: ShardId) extends CoordinatorMessage /** * Reply to [[HandOff]] when all entries in the shard have been terminated. */ - @SerialVersionUID(1L) case class ShardStopped(shard: ShardId) extends CoordinatorCommand + @SerialVersionUID(1L) final case class ShardStopped(shard: ShardId) extends CoordinatorCommand // DomainEvents for the persistent state of the event sourced ShardCoordinator sealed trait DomainEvent - @SerialVersionUID(1L) case class ShardRegionRegistered(region: ActorRef) extends DomainEvent - @SerialVersionUID(1L) case class ShardRegionProxyRegistered(regionProxy: ActorRef) extends DomainEvent - @SerialVersionUID(1L) case class ShardRegionTerminated(region: ActorRef) extends DomainEvent - @SerialVersionUID(1L) case class ShardRegionProxyTerminated(regionProxy: ActorRef) extends DomainEvent - @SerialVersionUID(1L) case class ShardHomeAllocated(shard: ShardId, region: ActorRef) extends DomainEvent - @SerialVersionUID(1L) case class ShardHomeDeallocated(shard: ShardId) extends DomainEvent + @SerialVersionUID(1L) final case class ShardRegionRegistered(region: ActorRef) extends DomainEvent + @SerialVersionUID(1L) final case class ShardRegionProxyRegistered(regionProxy: ActorRef) extends DomainEvent + @SerialVersionUID(1L) final case class ShardRegionTerminated(region: ActorRef) extends DomainEvent + @SerialVersionUID(1L) final case class ShardRegionProxyTerminated(regionProxy: ActorRef) extends DomainEvent + @SerialVersionUID(1L) final case class ShardHomeAllocated(shard: ShardId, region: ActorRef) extends DomainEvent + @SerialVersionUID(1L) final case class ShardHomeDeallocated(shard: ShardId) extends DomainEvent object State { val empty = State() @@ -1037,7 +1037,7 @@ object ShardCoordinator { /** * Persistent state of the event sourced ShardCoordinator. */ - @SerialVersionUID(1L) case class State private ( + @SerialVersionUID(1L) final case class State private ( // region for each shard val shards: Map[ShardId, ActorRef] = Map.empty, // shards for each region @@ -1080,7 +1080,7 @@ object ShardCoordinator { /** * End of rebalance process performed by [[RebalanceWorker]] */ - private case class RebalanceDone(shard: ShardId, ok: Boolean) + private final case class RebalanceDone(shard: ShardId, ok: Boolean) private case object AfterRecover diff --git a/akka-contrib/src/main/scala/akka/contrib/pattern/ClusterSingletonManager.scala b/akka-contrib/src/main/scala/akka/contrib/pattern/ClusterSingletonManager.scala index d5c8cd9c1c..6592e60ec7 100644 --- a/akka-contrib/src/main/scala/akka/contrib/pattern/ClusterSingletonManager.scala +++ b/akka-contrib/src/main/scala/akka/contrib/pattern/ClusterSingletonManager.scala @@ -105,8 +105,8 @@ object ClusterSingletonManager { */ case object TakeOverFromMe - case class HandOverRetry(count: Int) - case class TakeOverRetry(count: Int) + final case class HandOverRetry(count: Int) + final case class TakeOverRetry(count: Int) case object Cleanup case object StartOldestChangedBuffer @@ -120,12 +120,12 @@ object ClusterSingletonManager { case object End extends State case object Uninitialized extends Data - case class YoungerData(oldestOption: Option[Address]) extends Data - case class BecomingOldestData(previousOldestOption: Option[Address]) extends Data - case class OldestData(singleton: ActorRef, singletonTerminated: Boolean = false) extends Data - case class WasOldestData(singleton: ActorRef, singletonTerminated: Boolean, - newOldestOption: Option[Address]) extends Data - case class HandingOverData(singleton: ActorRef, handOverTo: Option[ActorRef]) extends Data + final case class YoungerData(oldestOption: Option[Address]) extends Data + final case class BecomingOldestData(previousOldestOption: Option[Address]) extends Data + final case class OldestData(singleton: ActorRef, singletonTerminated: Boolean = false) extends Data + final case class WasOldestData(singleton: ActorRef, singletonTerminated: Boolean, + newOldestOption: Option[Address]) extends Data + final case class HandingOverData(singleton: ActorRef, handOverTo: Option[ActorRef]) extends Data case object EndData extends Data val HandOverRetryTimer = "hand-over-retry" @@ -145,9 +145,9 @@ object ClusterSingletonManager { /** * The first event, corresponding to CurrentClusterState. */ - case class InitialOldestState(oldest: Option[Address], memberCount: Int) + final case class InitialOldestState(oldest: Option[Address], memberCount: Int) - case class OldestChanged(oldest: Option[Address]) + final case class OldestChanged(oldest: Option[Address]) } /** diff --git a/akka-contrib/src/main/scala/akka/contrib/pattern/DistributedPubSubMediator.scala b/akka-contrib/src/main/scala/akka/contrib/pattern/DistributedPubSubMediator.scala index 6a710c6293..4e28b75bde 100644 --- a/akka-contrib/src/main/scala/akka/contrib/pattern/DistributedPubSubMediator.scala +++ b/akka-contrib/src/main/scala/akka/contrib/pattern/DistributedPubSubMediator.scala @@ -63,20 +63,20 @@ object DistributedPubSubMediator { */ def defaultProps(role: String): Props = props(Internal.roleOption(role)) - @SerialVersionUID(1L) case class Put(ref: ActorRef) - @SerialVersionUID(1L) case class Remove(path: String) - @SerialVersionUID(1L) case class Subscribe(topic: String, ref: ActorRef) - @SerialVersionUID(1L) case class Unsubscribe(topic: String, ref: ActorRef) - @SerialVersionUID(1L) case class SubscribeAck(subscribe: Subscribe) - @SerialVersionUID(1L) case class UnsubscribeAck(unsubscribe: Unsubscribe) - @SerialVersionUID(1L) case class Publish(topic: String, msg: Any) extends DistributedPubSubMessage - @SerialVersionUID(1L) case class Send(path: String, msg: Any, localAffinity: Boolean) extends DistributedPubSubMessage { + @SerialVersionUID(1L) final case class Put(ref: ActorRef) + @SerialVersionUID(1L) final case class Remove(path: String) + @SerialVersionUID(1L) final case class Subscribe(topic: String, ref: ActorRef) + @SerialVersionUID(1L) final case class Unsubscribe(topic: String, ref: ActorRef) + @SerialVersionUID(1L) final case class SubscribeAck(subscribe: Subscribe) + @SerialVersionUID(1L) final case class UnsubscribeAck(unsubscribe: Unsubscribe) + @SerialVersionUID(1L) final case class Publish(topic: String, msg: Any) extends DistributedPubSubMessage + @SerialVersionUID(1L) final case class Send(path: String, msg: Any, localAffinity: Boolean) extends DistributedPubSubMessage { /** * Convenience constructor with `localAffinity` false */ def this(path: String, msg: Any) = this(path, msg, localAffinity = false) } - @SerialVersionUID(1L) case class SendToAll(path: String, msg: Any, allButSelf: Boolean = false) extends DistributedPubSubMessage { + @SerialVersionUID(1L) final case class SendToAll(path: String, msg: Any, allButSelf: Boolean = false) extends DistributedPubSubMessage { def this(path: String, msg: Any) = this(path, msg, allButSelf = false) } @@ -90,20 +90,20 @@ object DistributedPubSubMediator { case object Prune @SerialVersionUID(1L) - case class Bucket( + final case class Bucket( owner: Address, version: Long, content: Map[String, ValueHolder]) @SerialVersionUID(1L) - case class ValueHolder(version: Long, ref: Option[ActorRef]) { + final case class ValueHolder(version: Long, ref: Option[ActorRef]) { @transient lazy val routee: Option[Routee] = ref map ActorRefRoutee } @SerialVersionUID(1L) - case class Status(versions: Map[Address, Long]) extends DistributedPubSubMessage + final case class Status(versions: Map[Address, Long]) extends DistributedPubSubMessage @SerialVersionUID(1L) - case class Delta(buckets: immutable.Iterable[Bucket]) extends DistributedPubSubMessage + final case class Delta(buckets: immutable.Iterable[Bucket]) extends DistributedPubSubMessage case object GossipTick diff --git a/akka-contrib/src/main/scala/akka/contrib/pattern/ReliableProxy.scala b/akka-contrib/src/main/scala/akka/contrib/pattern/ReliableProxy.scala index 63d57d2bf5..bb39a2b2cf 100644 --- a/akka-contrib/src/main/scala/akka/contrib/pattern/ReliableProxy.scala +++ b/akka-contrib/src/main/scala/akka/contrib/pattern/ReliableProxy.scala @@ -81,8 +81,8 @@ object ReliableProxy { def receiver(target: ActorRef, currentSerial: Int): Props = Props(classOf[Receiver], target, currentSerial) // Internal messages - case class Message(msg: Any, sender: ActorRef, serial: Int) - private case class Ack(serial: Int) + final case class Message(msg: Any, sender: ActorRef, serial: Int) + private final case class Ack(serial: Int) private case object Tick private case object ReconnectTick @@ -91,14 +91,14 @@ object ReliableProxy { * the target and when the target `ActorRef` has changed (for example, the target system * crashed and has been restarted). */ - case class TargetChanged(ref: ActorRef) + final case class TargetChanged(ref: ActorRef) /** * `ProxyTerminated` is sent to transition subscribers during `postStop`. Any outstanding * unsent messages are contained the `Unsent` object. */ - case class ProxyTerminated(actor: ActorRef, outstanding: Unsent) - case class Unsent(queue: Vector[Message]) + final case class ProxyTerminated(actor: ActorRef, outstanding: Unsent) + final case class Unsent(queue: Vector[Message]) sealed trait State case object Idle extends State diff --git a/akka-contrib/src/main/scala/akka/contrib/throttle/TimerBasedThrottler.scala b/akka-contrib/src/main/scala/akka/contrib/throttle/TimerBasedThrottler.scala index edff9d6598..a11ef890da 100644 --- a/akka-contrib/src/main/scala/akka/contrib/throttle/TimerBasedThrottler.scala +++ b/akka-contrib/src/main/scala/akka/contrib/throttle/TimerBasedThrottler.scala @@ -40,7 +40,7 @@ object Throttler { * @param duration the length of the period * @see [[akka.contrib.throttle.Throttler]] */ - case class Rate(val numberOfCalls: Int, val duration: FiniteDuration) { + final case class Rate(val numberOfCalls: Int, val duration: FiniteDuration) { /** * The duration in milliseconds. */ @@ -60,7 +60,7 @@ object Throttler { * and eventually be delivered when a new target is set. If `target` is not `None`, the currently queued messages * as well as any messages received in the future will be delivered to the new target at a rate not exceeding the current throttler's rate. */ - case class SetTarget(target: Option[ActorRef]) { + final case class SetTarget(target: Option[ActorRef]) { /** * Java API: * @param target if `target` is `null`, the throttler will stop delivering messages and the messages already received @@ -79,7 +79,7 @@ object Throttler { * * @param rate the rate at which messages will be delivered to the target of the throttler */ - case class SetRate(rate: Rate) + final case class SetRate(rate: Rate) import language.implicitConversions @@ -110,12 +110,12 @@ private[throttle] object TimerBasedThrottler { case object Active extends State // Messages, as we queue them to be sent later - case class Message(message: Any, sender: ActorRef) + final case class Message(message: Any, sender: ActorRef) // The data of the FSM - case class Data(target: Option[ActorRef], - callsLeftInThisPeriod: Int, - queue: Q[Message]) + final case class Data(target: Option[ActorRef], + callsLeftInThisPeriod: Int, + queue: Q[Message]) } /** diff --git a/akka-contrib/src/multi-jvm/scala/akka/contrib/pattern/ClusterShardingSpec.scala b/akka-contrib/src/multi-jvm/scala/akka/contrib/pattern/ClusterShardingSpec.scala index f3fc476eeb..738f3de042 100644 --- a/akka-contrib/src/multi-jvm/scala/akka/contrib/pattern/ClusterShardingSpec.scala +++ b/akka-contrib/src/multi-jvm/scala/akka/contrib/pattern/ClusterShardingSpec.scala @@ -67,11 +67,11 @@ object ClusterShardingSpec extends MultiNodeConfig { //#counter-actor case object Increment case object Decrement - case class Get(counterId: Long) - case class EntryEnvelope(id: Long, payload: Any) + final case class Get(counterId: Long) + final case class EntryEnvelope(id: Long, payload: Any) case object Stop - case class CounterChanged(delta: Int) + final case class CounterChanged(delta: Int) class Counter extends EventsourcedProcessor { import ShardRegion.Passivate diff --git a/akka-contrib/src/multi-jvm/scala/akka/contrib/pattern/DistributedPubSubMediatorSpec.scala b/akka-contrib/src/multi-jvm/scala/akka/contrib/pattern/DistributedPubSubMediatorSpec.scala index 91e6eeda35..1152e902b0 100644 --- a/akka-contrib/src/multi-jvm/scala/akka/contrib/pattern/DistributedPubSubMediatorSpec.scala +++ b/akka-contrib/src/multi-jvm/scala/akka/contrib/pattern/DistributedPubSubMediatorSpec.scala @@ -35,10 +35,10 @@ object DistributedPubSubMediatorSpec extends MultiNodeConfig { """)) object TestChatUser { - case class Whisper(path: String, msg: Any) - case class Talk(path: String, msg: Any) - case class TalkToOthers(path: String, msg: Any) - case class Shout(topic: String, msg: Any) + final case class Whisper(path: String, msg: Any) + final case class Talk(path: String, msg: Any) + final case class TalkToOthers(path: String, msg: Any) + final case class Shout(topic: String, msg: Any) } class TestChatUser(mediator: ActorRef, testActor: ActorRef) extends Actor { diff --git a/akka-contrib/src/test/scala/akka/contrib/pattern/AggregatorSpec.scala b/akka-contrib/src/test/scala/akka/contrib/pattern/AggregatorSpec.scala index 9b1c51506f..574276d5f1 100644 --- a/akka-contrib/src/test/scala/akka/contrib/pattern/AggregatorSpec.scala +++ b/akka-contrib/src/test/scala/akka/contrib/pattern/AggregatorSpec.scala @@ -25,15 +25,15 @@ case object Checking extends AccountType case object Savings extends AccountType case object MoneyMarket extends AccountType -case class GetCustomerAccountBalances(id: Long, accountTypes: Set[AccountType]) -case class GetAccountBalances(id: Long) +final case class GetCustomerAccountBalances(id: Long, accountTypes: Set[AccountType]) +final case class GetAccountBalances(id: Long) -case class AccountBalances(accountType: AccountType, - balance: Option[List[(Long, BigDecimal)]]) +final case class AccountBalances(accountType: AccountType, + balance: Option[List[(Long, BigDecimal)]]) -case class CheckingAccountBalances(balances: Option[List[(Long, BigDecimal)]]) -case class SavingsAccountBalances(balances: Option[List[(Long, BigDecimal)]]) -case class MoneyMarketAccountBalances(balances: Option[List[(Long, BigDecimal)]]) +final case class CheckingAccountBalances(balances: Option[List[(Long, BigDecimal)]]) +final case class SavingsAccountBalances(balances: Option[List[(Long, BigDecimal)]]) +final case class MoneyMarketAccountBalances(balances: Option[List[(Long, BigDecimal)]]) case object TimedOut case object CantUnderstand @@ -132,11 +132,11 @@ class AccountBalanceRetriever extends Actor with Aggregator { //#demo-code //#chain-sample -case class InitialRequest(name: String) -case class Request(name: String) -case class Response(name: String, value: String) -case class EvaluationResults(name: String, eval: List[Int]) -case class FinalResponse(qualifiedValues: List[String]) +final case class InitialRequest(name: String) +final case class Request(name: String) +final case class Response(name: String, value: String) +final case class EvaluationResults(name: String, eval: List[Int]) +final case class FinalResponse(qualifiedValues: List[String]) /** * An actor sample demonstrating use of unexpect and chaining. @@ -211,7 +211,7 @@ class AggregatorSpec extends TestKit(ActorSystem("test")) with ImplicitSender wi } } -case class TestEntry(id: Int) +final case class TestEntry(id: Int) class WorkListSpec extends FunSuiteLike { diff --git a/akka-docs/rst/additional/code/docs/faq/Faq.scala b/akka-docs/rst/additional/code/docs/faq/Faq.scala index b2d9eb2b28..93ff432f27 100644 --- a/akka-docs/rst/additional/code/docs/faq/Faq.scala +++ b/akka-docs/rst/additional/code/docs/faq/Faq.scala @@ -6,12 +6,12 @@ import akka.actor.Actor object MyActor { // these are the messages we accept sealed abstract trait Message - case class FooMessage(foo: String) extends Message - case class BarMessage(bar: Int) extends Message + final case class FooMessage(foo: String) extends Message + final case class BarMessage(bar: Int) extends Message // these are the replies we send sealed abstract trait Reply - case class BazMessage(baz: String) extends Reply + final case class BazMessage(baz: String) extends Reply } class MyActor extends Actor { diff --git a/akka-docs/rst/scala/code/docs/actor/ActorDocSpec.scala b/akka-docs/rst/scala/code/docs/actor/ActorDocSpec.scala index 5342c1b7a5..4bfc1b5abd 100644 --- a/akka-docs/rst/scala/code/docs/actor/ActorDocSpec.scala +++ b/akka-docs/rst/scala/code/docs/actor/ActorDocSpec.scala @@ -31,8 +31,8 @@ class MyActor extends Actor { } //#my-actor -case class DoIt(msg: ImmutableMessage) -case class Message(s: String) +final case class DoIt(msg: ImmutableMessage) +final case class Message(s: String) //#context-actorOf class FirstActor extends Actor { @@ -216,7 +216,7 @@ class ProducerConsumer extends Actor with ActorLogging // protocol case object GiveMeThings -case class Give(thing: Any) +final case class Give(thing: Any) //#receive-orElse @@ -524,7 +524,7 @@ class ActorDocSpec extends AkkaSpec(Map("akka.loglevel" -> "INFO")) { //#ask-pipeTo import akka.pattern.{ ask, pipe } import system.dispatcher // The ExecutionContext that will be used - case class Result(x: Int, s: String, d: Double) + final case class Result(x: Int, s: String, d: Double) case object Request implicit val timeout = Timeout(5 seconds) // needed for `?` below diff --git a/akka-docs/rst/scala/code/docs/actor/FSMDocSpec.scala b/akka-docs/rst/scala/code/docs/actor/FSMDocSpec.scala index 47168601ce..5c275539f2 100644 --- a/akka-docs/rst/scala/code/docs/actor/FSMDocSpec.scala +++ b/akka-docs/rst/scala/code/docs/actor/FSMDocSpec.scala @@ -21,12 +21,12 @@ class FSMDocSpec extends MyFavoriteTestFrameWorkPlusAkkaTestKit { //#simple-imports //#simple-events // received events - case class SetTarget(ref: ActorRef) - case class Queue(obj: Any) + final case class SetTarget(ref: ActorRef) + final case class Queue(obj: Any) case object Flush // sent events - case class Batch(obj: immutable.Seq[Any]) + final case class Batch(obj: immutable.Seq[Any]) //#simple-events //#simple-state // states @@ -36,7 +36,7 @@ class FSMDocSpec extends MyFavoriteTestFrameWorkPlusAkkaTestKit { sealed trait Data case object Uninitialized extends Data - case class Todo(target: ActorRef, queue: immutable.Seq[Any]) extends Data + final case class Todo(target: ActorRef, queue: immutable.Seq[Any]) extends Data //#simple-state //#simple-fsm class Buncher extends Actor with FSM[State, Data] { diff --git a/akka-docs/rst/scala/code/docs/actor/FaultHandlingDocSample.scala b/akka-docs/rst/scala/code/docs/actor/FaultHandlingDocSample.scala index b12cdf1126..789c65ae74 100644 --- a/akka-docs/rst/scala/code/docs/actor/FaultHandlingDocSample.scala +++ b/akka-docs/rst/scala/code/docs/actor/FaultHandlingDocSample.scala @@ -67,7 +67,7 @@ class Listener extends Actor with ActorLogging { object Worker { case object Start case object Do - case class Progress(percent: Double) + final case class Progress(percent: Double) } //#messages @@ -112,9 +112,9 @@ class Worker extends Actor with ActorLogging { //#messages object CounterService { - case class Increment(n: Int) + final case class Increment(n: Int) case object GetCurrentCount - case class CurrentCount(key: String, count: Long) + final case class CurrentCount(key: String, count: Long) class ServiceUnavailable(msg: String) extends RuntimeException(msg) private case object Reconnect @@ -212,7 +212,7 @@ class CounterService extends Actor { //#messages object Counter { - case class UseStorage(storage: Option[ActorRef]) + final case class UseStorage(storage: Option[ActorRef]) } //#messages @@ -253,9 +253,9 @@ class Counter(key: String, initialValue: Long) extends Actor { //#messages object Storage { - case class Store(entry: Entry) - case class Get(key: String) - case class Entry(key: String, value: Long) + final case class Store(entry: Entry) + final case class Get(key: String) + final case class Entry(key: String, value: Long) class StorageException(msg: String) extends RuntimeException(msg) } //#messages diff --git a/akka-docs/rst/scala/code/docs/event/EventBusDocSpec.scala b/akka-docs/rst/scala/code/docs/event/EventBusDocSpec.scala index 96603fcbec..19caf087dc 100644 --- a/akka-docs/rst/scala/code/docs/event/EventBusDocSpec.scala +++ b/akka-docs/rst/scala/code/docs/event/EventBusDocSpec.scala @@ -14,7 +14,7 @@ object EventBusDocSpec { import akka.event.EventBus import akka.event.LookupClassification - case class MsgEnvelope(topic: String, payload: Any) + final case class MsgEnvelope(topic: String, payload: Any) /** * Publishes the payload of the MsgEnvelope when the topic of the @@ -124,7 +124,7 @@ object EventBusDocSpec { import akka.event.ActorClassification import akka.event.ActorClassifier - case class Notification(ref: ActorRef, id: Int) + final case class Notification(ref: ActorRef, id: Int) class ActorBusImpl extends ActorEventBus with ActorClassifier with ActorClassification { type Event = Notification diff --git a/akka-docs/rst/scala/code/docs/event/LoggingDocSpec.scala b/akka-docs/rst/scala/code/docs/event/LoggingDocSpec.scala index 074a960f5d..6afab3d028 100644 --- a/akka-docs/rst/scala/code/docs/event/LoggingDocSpec.scala +++ b/akka-docs/rst/scala/code/docs/event/LoggingDocSpec.scala @@ -51,7 +51,7 @@ object LoggingDocSpec { //#mdc-actor import Logging.MDC - case class Req(work: String, visitorId: Int) + final case class Req(work: String, visitorId: Int) class MdcActorMixin extends Actor with akka.actor.DiagnosticActorLogging { var reqId = 0 diff --git a/akka-docs/rst/scala/code/docs/io/EchoServer.scala b/akka-docs/rst/scala/code/docs/io/EchoServer.scala index 4300885c63..f63008b2cb 100644 --- a/akka-docs/rst/scala/code/docs/io/EchoServer.scala +++ b/akka-docs/rst/scala/code/docs/io/EchoServer.scala @@ -81,7 +81,7 @@ class EchoHandler(connection: ActorRef, remote: InetSocketAddress) import Tcp._ - case class Ack(offset: Int) extends Event + final case class Ack(offset: Int) extends Event // sign death pact: this actor terminates when connection breaks context watch connection diff --git a/akka-docs/rst/scala/code/docs/routing/ConsistentHashingRouterDocSpec.scala b/akka-docs/rst/scala/code/docs/routing/ConsistentHashingRouterDocSpec.scala index 77ffe70a87..262dcdd609 100644 --- a/akka-docs/rst/scala/code/docs/routing/ConsistentHashingRouterDocSpec.scala +++ b/akka-docs/rst/scala/code/docs/routing/ConsistentHashingRouterDocSpec.scala @@ -24,13 +24,13 @@ object ConsistentHashingRouterDocSpec { } } - case class Evict(key: String) + final case class Evict(key: String) - case class Get(key: String) extends ConsistentHashable { + final case class Get(key: String) extends ConsistentHashable { override def consistentHashKey: Any = key } - case class Entry(key: String, value: String) + final case class Entry(key: String, value: String) //#cache-actor } diff --git a/akka-docs/rst/scala/code/docs/routing/CustomRouterDocSpec.scala b/akka-docs/rst/scala/code/docs/routing/CustomRouterDocSpec.scala index cc8c355cdf..d2d588c320 100644 --- a/akka-docs/rst/scala/code/docs/routing/CustomRouterDocSpec.scala +++ b/akka-docs/rst/scala/code/docs/routing/CustomRouterDocSpec.scala @@ -63,7 +63,7 @@ akka.actor.deployment { } //#unit-test-logic - case class TestRoutee(n: Int) extends Routee { + final case class TestRoutee(n: Int) extends Routee { override def send(message: Any, sender: ActorRef): Unit = () } @@ -77,7 +77,7 @@ import akka.routing.Router import akka.japi.Util.immutableSeq import com.typesafe.config.Config -case class RedundancyGroup(override val paths: immutable.Iterable[String], nbrCopies: Int) extends Group { +final case class RedundancyGroup(override val paths: immutable.Iterable[String], nbrCopies: Int) extends Group { def this(config: Config) = this( paths = immutableSeq(config.getStringList("routees.paths")), diff --git a/akka-docs/rst/scala/code/docs/routing/RouterDocSpec.scala b/akka-docs/rst/scala/code/docs/routing/RouterDocSpec.scala index bde8090881..08bba9e7e8 100644 --- a/akka-docs/rst/scala/code/docs/routing/RouterDocSpec.scala +++ b/akka-docs/rst/scala/code/docs/routing/RouterDocSpec.scala @@ -200,7 +200,7 @@ akka.actor.deployment { router-dispatcher {} """ - case class Work(payload: String) + final case class Work(payload: String) //#router-in-actor import akka.routing.ActorRefRoutee diff --git a/akka-docs/rst/scala/code/docs/serialization/SerializationDocSpec.scala b/akka-docs/rst/scala/code/docs/serialization/SerializationDocSpec.scala index 62d3e03f5e..ccbaa7b719 100644 --- a/akka-docs/rst/scala/code/docs/serialization/SerializationDocSpec.scala +++ b/akka-docs/rst/scala/code/docs/serialization/SerializationDocSpec.scala @@ -49,7 +49,7 @@ package docs.serialization { //#my-own-serializer trait MyOwnSerializable - case class Customer(name: String) extends MyOwnSerializable + final case class Customer(name: String) extends MyOwnSerializable class SerializationDocSpec extends AkkaSpec { "demonstrate configuration of serialize messages" in { diff --git a/akka-docs/rst/scala/code/docs/testkit/TestkitDocSpec.scala b/akka-docs/rst/scala/code/docs/testkit/TestkitDocSpec.scala index c9f7f81a02..78d965b710 100644 --- a/akka-docs/rst/scala/code/docs/testkit/TestkitDocSpec.scala +++ b/akka-docs/rst/scala/code/docs/testkit/TestkitDocSpec.scala @@ -194,7 +194,7 @@ class TestkitDocSpec extends AkkaSpec with DefaultTimeout with ImplicitSender { //#test-probe //#test-special-probe - case class Update(id: Int, value: String) + final case class Update(id: Int, value: String) val probe = new TestProbe(system) { def expectUpdate(x: Int) = { diff --git a/akka-docs/rst/scala/code/docs/zeromq/ZeromqDocSpec.scala b/akka-docs/rst/scala/code/docs/zeromq/ZeromqDocSpec.scala index 58ea081349..047b7fc124 100644 --- a/akka-docs/rst/scala/code/docs/zeromq/ZeromqDocSpec.scala +++ b/akka-docs/rst/scala/code/docs/zeromq/ZeromqDocSpec.scala @@ -24,8 +24,8 @@ object ZeromqDocSpec { import java.lang.management.ManagementFactory case object Tick - case class Heap(timestamp: Long, used: Long, max: Long) - case class Load(timestamp: Long, loadAverage: Double) + final case class Heap(timestamp: Long, used: Long, max: Long) + final case class Load(timestamp: Long, loadAverage: Double) class HealthProbe extends Actor { diff --git a/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/BrokenItemException.scala b/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/BrokenItemException.scala index c029c98451..67ebffcf24 100644 --- a/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/BrokenItemException.scala +++ b/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/BrokenItemException.scala @@ -20,4 +20,4 @@ package akka.actor.mailbox.filebased.filequeue import java.io.IOException @deprecated("durable mailboxes are superseded by akka-persistence", "2.3") -case class BrokenItemException(lastValidPosition: Long, cause: Throwable) extends IOException(cause) +final case class BrokenItemException(lastValidPosition: Long, cause: Throwable) extends IOException(cause) diff --git a/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/Journal.scala b/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/Journal.scala index a15b78e4b9..2e7539e07a 100644 --- a/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/Journal.scala +++ b/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/Journal.scala @@ -27,12 +27,12 @@ import scala.util.control.NonFatal sealed trait JournalItem @deprecated("durable mailboxes are superseded by akka-persistence", "2.3") object JournalItem { - case class Add(item: QItem) extends JournalItem + final case class Add(item: QItem) extends JournalItem case object Remove extends JournalItem case object RemoveTentative extends JournalItem - case class SavedXid(xid: Int) extends JournalItem - case class Unremove(xid: Int) extends JournalItem - case class ConfirmRemove(xid: Int) extends JournalItem + final case class SavedXid(xid: Int) extends JournalItem + final case class Unremove(xid: Int) extends JournalItem + final case class ConfirmRemove(xid: Int) extends JournalItem case object EndOfFile extends JournalItem } diff --git a/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/QItem.scala b/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/QItem.scala index 8f0412b997..f1e0a766ea 100644 --- a/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/QItem.scala +++ b/akka-durable-mailboxes/akka-file-mailbox/src/main/scala/akka/actor/mailbox/filebased/filequeue/QItem.scala @@ -20,7 +20,7 @@ package akka.actor.mailbox.filebased.filequeue import java.nio.{ ByteBuffer, ByteOrder } @deprecated("durable mailboxes are superseded by akka-persistence", "2.3") -case class QItem(addTime: Long, expiry: Long, data: Array[Byte], var xid: Int) { +final case class QItem(addTime: Long, expiry: Long, data: Array[Byte], var xid: Int) { def pack(): Array[Byte] = { val bytes = new Array[Byte](data.length + 16) val buffer = ByteBuffer.wrap(bytes) diff --git a/akka-multi-node-testkit/src/main/scala/akka/remote/testconductor/Conductor.scala b/akka-multi-node-testkit/src/main/scala/akka/remote/testconductor/Conductor.scala index ee1ad9e06a..4b1e61bf46 100644 --- a/akka-multi-node-testkit/src/main/scala/akka/remote/testconductor/Conductor.scala +++ b/akka-multi-node-testkit/src/main/scala/akka/remote/testconductor/Conductor.scala @@ -358,13 +358,13 @@ private[akka] class ServerFSM(val controller: ActorRef, val channel: Channel) ex * INTERNAL API. */ private[akka] object Controller { - case class ClientDisconnected(name: RoleName) + final case class ClientDisconnected(name: RoleName) class ClientDisconnectedException(msg: String) extends AkkaException(msg) with NoStackTrace case object GetNodes case object GetSockAddr - case class CreateServerFSM(channel: Channel) extends NoSerializationVerificationNeeded + final case class CreateServerFSM(channel: Channel) extends NoSerializationVerificationNeeded - case class NodeInfo(name: RoleName, addr: Address, fsm: ActorRef) + final case class NodeInfo(name: RoleName, addr: Address, fsm: ActorRef) } /** @@ -478,25 +478,25 @@ private[akka] object BarrierCoordinator { case object Idle extends State case object Waiting extends State - case class RemoveClient(name: RoleName) + final case class RemoveClient(name: RoleName) - case class Data(clients: Set[Controller.NodeInfo], barrier: String, arrived: List[ActorRef], deadline: Deadline) + final case class Data(clients: Set[Controller.NodeInfo], barrier: String, arrived: List[ActorRef], deadline: Deadline) trait Printer { this: Product with Throwable with NoStackTrace ⇒ override def toString = productPrefix + productIterator.mkString("(", ", ", ")") } - case class BarrierTimeout(data: Data) + final case class BarrierTimeout(data: Data) extends RuntimeException("timeout while waiting for barrier '" + data.barrier + "'") with NoStackTrace with Printer - case class FailedBarrier(data: Data) + final case class FailedBarrier(data: Data) extends RuntimeException("failing barrier '" + data.barrier + "'") with NoStackTrace with Printer - case class DuplicateNode(data: Data, node: Controller.NodeInfo) + final case class DuplicateNode(data: Data, node: Controller.NodeInfo) extends RuntimeException(node.toString) with NoStackTrace with Printer - case class WrongBarrier(barrier: String, client: ActorRef, data: Data) + final case class WrongBarrier(barrier: String, client: ActorRef, data: Data) extends RuntimeException(data.clients.find(_.fsm == client).map(_.name.toString).getOrElse(client.toString) + " tried to enter '" + barrier + "' while we were waiting for '" + data.barrier + "'") with NoStackTrace with Printer - case class BarrierEmpty(data: Data, msg: String) extends RuntimeException(msg) with NoStackTrace with Printer - case class ClientLost(data: Data, client: RoleName) + final case class BarrierEmpty(data: Data, msg: String) extends RuntimeException(msg) with NoStackTrace with Printer + final case class ClientLost(data: Data, client: RoleName) extends RuntimeException("unannounced disconnect of " + client) with NoStackTrace with Printer } diff --git a/akka-multi-node-testkit/src/main/scala/akka/remote/testconductor/DataTypes.scala b/akka-multi-node-testkit/src/main/scala/akka/remote/testconductor/DataTypes.scala index f8d6e0c82c..03af7f8614 100644 --- a/akka-multi-node-testkit/src/main/scala/akka/remote/testconductor/DataTypes.scala +++ b/akka-multi-node-testkit/src/main/scala/akka/remote/testconductor/DataTypes.scala @@ -16,10 +16,10 @@ import scala.concurrent.duration._ import akka.remote.testconductor.TestConductorProtocol.BarrierOp import akka.remote.transport.ThrottlerTransportAdapter.Direction -case class RoleName(name: String) +final case class RoleName(name: String) -private[akka] case class ToClient(msg: ClientOp with NetworkOp) -private[akka] case class ToServer(msg: ServerOp with NetworkOp) +private[akka] final case class ToClient(msg: ClientOp with NetworkOp) +private[akka] final case class ToServer(msg: ServerOp with NetworkOp) private[akka] sealed trait ClientOp // messages sent to from Conductor to Player private[akka] sealed trait ServerOp // messages sent to from Player to Conductor @@ -31,30 +31,30 @@ private[akka] sealed trait ConfirmedClientOp extends ClientOp /** * First message of connection sets names straight. */ -private[akka] case class Hello(name: String, addr: Address) extends NetworkOp +private[akka] final case class Hello(name: String, addr: Address) extends NetworkOp -private[akka] case class EnterBarrier(name: String, timeout: Option[FiniteDuration]) extends ServerOp with NetworkOp -private[akka] case class FailBarrier(name: String) extends ServerOp with NetworkOp -private[akka] case class BarrierResult(name: String, success: Boolean) extends UnconfirmedClientOp with NetworkOp +private[akka] final case class EnterBarrier(name: String, timeout: Option[FiniteDuration]) extends ServerOp with NetworkOp +private[akka] final case class FailBarrier(name: String) extends ServerOp with NetworkOp +private[akka] final case class BarrierResult(name: String, success: Boolean) extends UnconfirmedClientOp with NetworkOp -private[akka] case class Throttle(node: RoleName, target: RoleName, direction: Direction, rateMBit: Float) extends CommandOp -private[akka] case class ThrottleMsg(target: Address, direction: Direction, rateMBit: Float) extends ConfirmedClientOp with NetworkOp +private[akka] final case class Throttle(node: RoleName, target: RoleName, direction: Direction, rateMBit: Float) extends CommandOp +private[akka] final case class ThrottleMsg(target: Address, direction: Direction, rateMBit: Float) extends ConfirmedClientOp with NetworkOp -private[akka] case class Disconnect(node: RoleName, target: RoleName, abort: Boolean) extends CommandOp -private[akka] case class DisconnectMsg(target: Address, abort: Boolean) extends ConfirmedClientOp with NetworkOp +private[akka] final case class Disconnect(node: RoleName, target: RoleName, abort: Boolean) extends CommandOp +private[akka] final case class DisconnectMsg(target: Address, abort: Boolean) extends ConfirmedClientOp with NetworkOp -private[akka] case class Terminate(node: RoleName, exitValue: Option[Int]) extends CommandOp -private[akka] case class TerminateMsg(exitValue: Option[Int]) extends ConfirmedClientOp with NetworkOp +private[akka] final case class Terminate(node: RoleName, exitValue: Option[Int]) extends CommandOp +private[akka] final case class TerminateMsg(exitValue: Option[Int]) extends ConfirmedClientOp with NetworkOp -private[akka] case class GetAddress(node: RoleName) extends ServerOp with NetworkOp -private[akka] case class AddressReply(node: RoleName, addr: Address) extends UnconfirmedClientOp with NetworkOp +private[akka] final case class GetAddress(node: RoleName) extends ServerOp with NetworkOp +private[akka] final case class AddressReply(node: RoleName, addr: Address) extends UnconfirmedClientOp with NetworkOp private[akka] abstract class Done extends ServerOp with UnconfirmedClientOp with NetworkOp private[akka] case object Done extends Done { def getInstance: Done = this } -private[akka] case class Remove(node: RoleName) extends CommandOp +private[akka] final case class Remove(node: RoleName) extends CommandOp private[akka] class MsgEncoder extends OneToOneEncoder { diff --git a/akka-multi-node-testkit/src/main/scala/akka/remote/testconductor/Player.scala b/akka-multi-node-testkit/src/main/scala/akka/remote/testconductor/Player.scala index 6df149920b..d39d563654 100644 --- a/akka-multi-node-testkit/src/main/scala/akka/remote/testconductor/Player.scala +++ b/akka-multi-node-testkit/src/main/scala/akka/remote/testconductor/Player.scala @@ -120,10 +120,10 @@ private[akka] object ClientFSM { case object Connected extends State case object Failed extends State - case class Data(channel: Option[Channel], runningOp: Option[(String, ActorRef)]) + final case class Data(channel: Option[Channel], runningOp: Option[(String, ActorRef)]) - case class Connected(channel: Channel) extends NoSerializationVerificationNeeded - case class ConnectionFailure(msg: String) extends RuntimeException(msg) with NoStackTrace + final case class Connected(channel: Channel) extends NoSerializationVerificationNeeded + final case class ConnectionFailure(msg: String) extends RuntimeException(msg) with NoStackTrace case object Disconnected } diff --git a/akka-multi-node-testkit/src/main/scala/akka/remote/testkit/MultiNodeSpec.scala b/akka-multi-node-testkit/src/main/scala/akka/remote/testkit/MultiNodeSpec.scala index 89090a922f..7377e9cc14 100644 --- a/akka-multi-node-testkit/src/main/scala/akka/remote/testkit/MultiNodeSpec.scala +++ b/akka-multi-node-testkit/src/main/scala/akka/remote/testkit/MultiNodeSpec.scala @@ -386,7 +386,7 @@ abstract class MultiNodeSpec(val myself: RoleName, _system: ActorSystem, _roles: // now add deployments, if so desired - private case class Replacement(tag: String, role: RoleName) { + private final case class Replacement(tag: String, role: RoleName) { lazy val addr = node(role).address.toString } private val replacements = roles map (r ⇒ Replacement("@" + r.name + "@", r)) diff --git a/akka-persistence/src/main/scala/akka/persistence/Channel.scala b/akka-persistence/src/main/scala/akka/persistence/Channel.scala index 3a6ad1b536..13adc884cf 100644 --- a/akka-persistence/src/main/scala/akka/persistence/Channel.scala +++ b/akka-persistence/src/main/scala/akka/persistence/Channel.scala @@ -27,7 +27,7 @@ import akka.persistence.JournalProtocol._ * Alternatively, it can also confirm these messages, preventing further redeliveries. */ @SerialVersionUID(1L) -case class ChannelSettings( +final case class ChannelSettings( val redeliverMax: Int = 5, val redeliverInterval: FiniteDuration = 5.seconds, val redeliverFailureListener: Option[ActorRef] = None) { @@ -187,7 +187,7 @@ object Channel { * @param destination persistent message destination. */ @SerialVersionUID(1L) -case class Deliver(persistent: Persistent, destination: ActorPath) extends Message +final case class Deliver(persistent: Persistent, destination: ActorPath) extends Message object Deliver { /** @@ -215,7 +215,7 @@ trait Delivered extends Message { /** * Plugin API. */ -case class DeliveredByChannel( +final case class DeliveredByChannel( processorId: String, channelId: String, persistentSequenceNr: Long, @@ -270,7 +270,7 @@ private[persistence] class DeliveredByChannelBatching(journal: ActorRef, setting * Notification message to inform channel listeners about messages that have reached the maximum * number of redeliveries. */ -case class RedeliverFailure(messages: immutable.Seq[ConfirmablePersistent]) { +final case class RedeliverFailure(messages: immutable.Seq[ConfirmablePersistent]) { /** * Java API. */ @@ -317,12 +317,12 @@ private object ReliableDelivery { type DeliveryAttempts = immutable.SortedMap[Long, DeliveryAttempt] type FailedAttempts = Vector[ConfirmablePersistentImpl] - case class DeliveryAttempt(persistent: ConfirmablePersistentImpl, destination: ActorPath, sender: ActorRef, timestamp: Long = System.nanoTime) { + final case class DeliveryAttempt(persistent: ConfirmablePersistentImpl, destination: ActorPath, sender: ActorRef, timestamp: Long = System.nanoTime) { def incrementRedeliveryCount = copy(persistent.update(redeliveries = persistent.redeliveries + 1)) } - case class Redeliver(attempts: DeliveryAttempts, redeliveryMax: Int) + final case class Redeliver(attempts: DeliveryAttempts, redeliveryMax: Int) } /** diff --git a/akka-persistence/src/main/scala/akka/persistence/JournalProtocol.scala b/akka-persistence/src/main/scala/akka/persistence/JournalProtocol.scala index c9bfc13118..d55ee11325 100644 --- a/akka-persistence/src/main/scala/akka/persistence/JournalProtocol.scala +++ b/akka-persistence/src/main/scala/akka/persistence/JournalProtocol.scala @@ -20,39 +20,39 @@ private[persistence] object JournalProtocol { * Request to delete messages identified by `messageIds`. If `permanent` is set to `false`, * the persistent messages are marked as deleted, otherwise they are permanently deleted. */ - case class DeleteMessages(messageIds: immutable.Seq[PersistentId], permanent: Boolean, requestor: Option[ActorRef] = None) + final case class DeleteMessages(messageIds: immutable.Seq[PersistentId], permanent: Boolean, requestor: Option[ActorRef] = None) /** * Reply message to a successful [[DeleteMessages]] request. */ - case class DeleteMessagesSuccess(messageIds: immutable.Seq[PersistentId]) + final case class DeleteMessagesSuccess(messageIds: immutable.Seq[PersistentId]) /** * Reply message to a failed [[DeleteMessages]] request. */ - case class DeleteMessagesFailure(cause: Throwable) + final case class DeleteMessagesFailure(cause: Throwable) /** * Request to delete all persistent messages with sequence numbers up to `toSequenceNr` * (inclusive). If `permanent` is set to `false`, the persistent messages are marked * as deleted in the journal, otherwise they are permanently deleted from the journal. */ - case class DeleteMessagesTo(processorId: String, toSequenceNr: Long, permanent: Boolean) + final case class DeleteMessagesTo(processorId: String, toSequenceNr: Long, permanent: Boolean) /** * Request to write delivery confirmations. */ - case class WriteConfirmations(confirmations: immutable.Seq[PersistentConfirmation], requestor: ActorRef) + final case class WriteConfirmations(confirmations: immutable.Seq[PersistentConfirmation], requestor: ActorRef) /** * Reply message to a successful [[WriteConfirmations]] request. */ - case class WriteConfirmationsSuccess(confirmations: immutable.Seq[PersistentConfirmation]) + final case class WriteConfirmationsSuccess(confirmations: immutable.Seq[PersistentConfirmation]) /** * Reply message to a failed [[WriteConfirmations]] request. */ - case class WriteConfirmationsFailure(cause: Throwable) + final case class WriteConfirmationsFailure(cause: Throwable) /** * Request to write messages. @@ -60,7 +60,7 @@ private[persistence] object JournalProtocol { * @param messages messages to be written. * @param processor write requestor. */ - case class WriteMessages(messages: immutable.Seq[PersistentRepr], processor: ActorRef) + final case class WriteMessages(messages: immutable.Seq[PersistentRepr], processor: ActorRef) /** * Reply message to a successful [[WriteMessages]] request. This reply is sent to the requestor @@ -74,7 +74,7 @@ private[persistence] object JournalProtocol { * * @param cause failure cause. */ - case class WriteMessagesFailure(cause: Throwable) + final case class WriteMessagesFailure(cause: Throwable) /** * Reply message to a successful [[WriteMessages]] request. For each contained [[PersistentRepr]] message @@ -82,7 +82,7 @@ private[persistence] object JournalProtocol { * * @param persistent successfully written message. */ - case class WriteMessageSuccess(persistent: PersistentRepr) + final case class WriteMessageSuccess(persistent: PersistentRepr) /** * Reply message to a failed [[WriteMessages]] request. For each contained [[PersistentRepr]] message @@ -91,7 +91,7 @@ private[persistence] object JournalProtocol { * @param message message failed to be written. * @param cause failure cause. */ - case class WriteMessageFailure(message: PersistentRepr, cause: Throwable) + final case class WriteMessageFailure(message: PersistentRepr, cause: Throwable) /** * Request to loop a `message` back to `processor`, without persisting the message. Looping of messages @@ -100,14 +100,14 @@ private[persistence] object JournalProtocol { * @param message message to be looped through the journal. * @param processor loop requestor. */ - case class LoopMessage(message: Any, processor: ActorRef) + final case class LoopMessage(message: Any, processor: ActorRef) /** * Reply message to a [[LoopMessage]] request. * * @param message looped message. */ - case class LoopMessageSuccess(message: Any) + final case class LoopMessageSuccess(message: Any) /** * Request to replay messages to `processor`. @@ -119,7 +119,7 @@ private[persistence] object JournalProtocol { * @param processor requesting processor. * @param replayDeleted `true` if messages marked as deleted shall be replayed. */ - case class ReplayMessages(fromSequenceNr: Long, toSequenceNr: Long, max: Long, processorId: String, processor: ActorRef, replayDeleted: Boolean = false) + final case class ReplayMessages(fromSequenceNr: Long, toSequenceNr: Long, max: Long, processorId: String, processor: ActorRef, replayDeleted: Boolean = false) /** * Reply message to a [[ReplayMessages]] request. A separate reply is sent to the requestor for each @@ -127,7 +127,7 @@ private[persistence] object JournalProtocol { * * @param persistent replayed message. */ - case class ReplayedMessage(persistent: PersistentRepr) + final case class ReplayedMessage(persistent: PersistentRepr) /** * Reply message to a successful [[ReplayMessages]] request. This reply is sent to the requestor @@ -139,7 +139,7 @@ private[persistence] object JournalProtocol { * Reply message to a failed [[ReplayMessages]] request. This reply is sent to the requestor * if a replay could not be successfully completed. */ - case class ReplayMessagesFailure(cause: Throwable) + final case class ReplayMessagesFailure(cause: Throwable) /** * Request to read the highest stored sequence number of a given processor. @@ -148,20 +148,20 @@ private[persistence] object JournalProtocol { * @param processorId requesting processor id. * @param processor requesting processor. */ - case class ReadHighestSequenceNr(fromSequenceNr: Long = 1L, processorId: String, processor: ActorRef) + final case class ReadHighestSequenceNr(fromSequenceNr: Long = 1L, processorId: String, processor: ActorRef) /** * Reply message to a successful [[ReadHighestSequenceNr]] request. * * @param highestSequenceNr read highest sequence number. */ - case class ReadHighestSequenceNrSuccess(highestSequenceNr: Long) + final case class ReadHighestSequenceNrSuccess(highestSequenceNr: Long) /** * Reply message to a failed [[ReadHighestSequenceNr]] request. * * @param cause failure cause. */ - case class ReadHighestSequenceNrFailure(cause: Throwable) + final case class ReadHighestSequenceNrFailure(cause: Throwable) } diff --git a/akka-persistence/src/main/scala/akka/persistence/Persistent.scala b/akka-persistence/src/main/scala/akka/persistence/Persistent.scala index d75caba4e6..2a7bac5c19 100644 --- a/akka-persistence/src/main/scala/akka/persistence/Persistent.scala +++ b/akka-persistence/src/main/scala/akka/persistence/Persistent.scala @@ -106,7 +106,7 @@ object ConfirmablePersistent { * journal. The processor receives the written messages individually as [[Persistent]] messages. * During recovery, they are also replayed individually. */ -case class PersistentBatch(persistentBatch: immutable.Seq[Persistent]) extends Message { +final case class PersistentBatch(persistentBatch: immutable.Seq[Persistent]) extends Message { /** * INTERNAL API. */ @@ -141,7 +141,7 @@ trait PersistentId { /** * INTERNAL API. */ -private[persistence] case class PersistentIdImpl(processorId: String, sequenceNr: Long) extends PersistentId +private[persistence] final case class PersistentIdImpl(processorId: String, sequenceNr: Long) extends PersistentId /** * Plugin API: representation of a persistent message in the journal plugin API. @@ -266,7 +266,7 @@ object PersistentBatch { /** * INTERNAL API. */ -private[persistence] case class PersistentImpl( +private[persistence] final case class PersistentImpl( payload: Any, sequenceNr: Long, processorId: String, @@ -300,7 +300,7 @@ private[persistence] case class PersistentImpl( /** * INTERNAL API. */ -private[persistence] case class ConfirmablePersistentImpl( +private[persistence] final case class ConfirmablePersistentImpl( payload: Any, sequenceNr: Long, processorId: String, diff --git a/akka-persistence/src/main/scala/akka/persistence/PersistentChannel.scala b/akka-persistence/src/main/scala/akka/persistence/PersistentChannel.scala index fedbc09b40..e38e0554f2 100644 --- a/akka-persistence/src/main/scala/akka/persistence/PersistentChannel.scala +++ b/akka-persistence/src/main/scala/akka/persistence/PersistentChannel.scala @@ -36,7 +36,7 @@ import akka.persistence.JournalProtocol._ * made after the configured timeout. */ @SerialVersionUID(1L) -case class PersistentChannelSettings( +final case class PersistentChannelSettings( val redeliverMax: Int = 5, val redeliverInterval: FiniteDuration = 5.seconds, val redeliverFailureListener: Option[ActorRef] = None, @@ -183,7 +183,7 @@ object PersistentChannel { /** * Plugin API. */ -case class DeliveredByPersistentChannel( +final case class DeliveredByPersistentChannel( channelId: String, persistentSequenceNr: Long, deliverySequenceNr: Long = 0L, diff --git a/akka-persistence/src/main/scala/akka/persistence/Processor.scala b/akka-persistence/src/main/scala/akka/persistence/Processor.scala index 86e42d18f5..6106f0d2f3 100644 --- a/akka-persistence/src/main/scala/akka/persistence/Processor.scala +++ b/akka-persistence/src/main/scala/akka/persistence/Processor.scala @@ -313,7 +313,7 @@ trait Processor extends Actor with Recovery { * @param cause failure cause. */ @SerialVersionUID(1L) -case class PersistenceFailure(payload: Any, sequenceNr: Long, cause: Throwable) +final case class PersistenceFailure(payload: Any, sequenceNr: Long, cause: Throwable) /** * Sent to a [[Processor]] if a journal fails to replay messages or fetch that processor's @@ -321,7 +321,7 @@ case class PersistenceFailure(payload: Any, sequenceNr: Long, cause: Throwable) * processor. */ @SerialVersionUID(1L) -case class RecoveryFailure(cause: Throwable) +final case class RecoveryFailure(cause: Throwable) /** * Thrown by a [[Processor]] if a journal fails to replay messages or fetch that processor's @@ -329,7 +329,7 @@ case class RecoveryFailure(cause: Throwable) * [[RecoveryFailure]] messages. */ @SerialVersionUID(1L) -case class RecoveryException(message: String, cause: Throwable) extends AkkaException(message, cause) +final case class RecoveryException(message: String, cause: Throwable) extends AkkaException(message, cause) /** * Java API: an actor that persists (journals) messages of type [[Persistent]]. Messages of other types diff --git a/akka-persistence/src/main/scala/akka/persistence/Recovery.scala b/akka-persistence/src/main/scala/akka/persistence/Recovery.scala index 178d3ca91d..06886b3a68 100644 --- a/akka-persistence/src/main/scala/akka/persistence/Recovery.scala +++ b/akka-persistence/src/main/scala/akka/persistence/Recovery.scala @@ -259,7 +259,7 @@ trait Recovery extends Actor with Snapshotter with Stash with StashFactory { * @param replayMax maximum number of messages to replay. Default is no limit. */ @SerialVersionUID(1L) -case class Recover(fromSnapshot: SnapshotSelectionCriteria = SnapshotSelectionCriteria.Latest, toSequenceNr: Long = Long.MaxValue, replayMax: Long = Long.MaxValue) +final case class Recover(fromSnapshot: SnapshotSelectionCriteria = SnapshotSelectionCriteria.Latest, toSequenceNr: Long = Long.MaxValue, replayMax: Long = Long.MaxValue) object Recover { /** diff --git a/akka-persistence/src/main/scala/akka/persistence/Snapshot.scala b/akka-persistence/src/main/scala/akka/persistence/Snapshot.scala index 8421f1b052..851698dce5 100644 --- a/akka-persistence/src/main/scala/akka/persistence/Snapshot.scala +++ b/akka-persistence/src/main/scala/akka/persistence/Snapshot.scala @@ -13,7 +13,7 @@ package akka.persistence * @param timestamp time at which the snapshot was saved. */ @SerialVersionUID(1L) //#snapshot-metadata -case class SnapshotMetadata(processorId: String, sequenceNr: Long, timestamp: Long = 0L) +final case class SnapshotMetadata(processorId: String, sequenceNr: Long, timestamp: Long = 0L) //#snapshot-metadata /** @@ -22,7 +22,7 @@ case class SnapshotMetadata(processorId: String, sequenceNr: Long, timestamp: Lo * @param metadata snapshot metadata. */ @SerialVersionUID(1L) -case class SaveSnapshotSuccess(metadata: SnapshotMetadata) +final case class SaveSnapshotSuccess(metadata: SnapshotMetadata) /** * Sent to a [[Processor]] after failed saving of a snapshot. @@ -31,14 +31,14 @@ case class SaveSnapshotSuccess(metadata: SnapshotMetadata) * @param cause failure cause. */ @SerialVersionUID(1L) -case class SaveSnapshotFailure(metadata: SnapshotMetadata, cause: Throwable) +final case class SaveSnapshotFailure(metadata: SnapshotMetadata, cause: Throwable) /** * Offers a [[Processor]] a previously saved `snapshot` during recovery. This offer is received * before any further replayed messages. */ @SerialVersionUID(1L) -case class SnapshotOffer(metadata: SnapshotMetadata, snapshot: Any) +final case class SnapshotOffer(metadata: SnapshotMetadata, snapshot: Any) /** * Selection criteria for loading and deleting snapshots. @@ -49,7 +49,7 @@ case class SnapshotOffer(metadata: SnapshotMetadata, snapshot: Any) * @see [[Recover]] */ @SerialVersionUID(1L) -case class SnapshotSelectionCriteria(maxSequenceNr: Long = Long.MaxValue, maxTimestamp: Long = Long.MaxValue) { +final case class SnapshotSelectionCriteria(maxSequenceNr: Long = Long.MaxValue, maxTimestamp: Long = Long.MaxValue) { /** * INTERNAL API. */ @@ -97,7 +97,7 @@ object SnapshotSelectionCriteria { * @param metadata snapshot metadata. * @param snapshot snapshot. */ -case class SelectedSnapshot(metadata: SnapshotMetadata, snapshot: Any) +final case class SelectedSnapshot(metadata: SnapshotMetadata, snapshot: Any) object SelectedSnapshot { /** @@ -120,14 +120,14 @@ private[persistence] object SnapshotProtocol { * @param criteria criteria for selecting a snapshot from which recovery should start. * @param toSequenceNr upper sequence number bound (inclusive) for recovery. */ - case class LoadSnapshot(processorId: String, criteria: SnapshotSelectionCriteria, toSequenceNr: Long) + final case class LoadSnapshot(processorId: String, criteria: SnapshotSelectionCriteria, toSequenceNr: Long) /** * Response message to a [[LoadSnapshot]] message. * * @param snapshot loaded snapshot, if any. */ - case class LoadSnapshotResult(snapshot: Option[SelectedSnapshot], toSequenceNr: Long) + final case class LoadSnapshotResult(snapshot: Option[SelectedSnapshot], toSequenceNr: Long) /** * Instructs snapshot store to save a snapshot. @@ -135,14 +135,14 @@ private[persistence] object SnapshotProtocol { * @param metadata snapshot metadata. * @param snapshot snapshot. */ - case class SaveSnapshot(metadata: SnapshotMetadata, snapshot: Any) + final case class SaveSnapshot(metadata: SnapshotMetadata, snapshot: Any) /** * Instructs snapshot store to delete a snapshot. * * @param metadata snapshot metadata. */ - case class DeleteSnapshot(metadata: SnapshotMetadata) + final case class DeleteSnapshot(metadata: SnapshotMetadata) /** * Instructs snapshot store to delete all snapshots that match `criteria`. @@ -150,5 +150,5 @@ private[persistence] object SnapshotProtocol { * @param processorId processor id. * @param criteria criteria for selecting snapshots to be deleted. */ - case class DeleteSnapshots(processorId: String, criteria: SnapshotSelectionCriteria) + final case class DeleteSnapshots(processorId: String, criteria: SnapshotSelectionCriteria) } diff --git a/akka-persistence/src/main/scala/akka/persistence/View.scala b/akka-persistence/src/main/scala/akka/persistence/View.scala index 63e5e34133..2a1db64bfa 100644 --- a/akka-persistence/src/main/scala/akka/persistence/View.scala +++ b/akka-persistence/src/main/scala/akka/persistence/View.scala @@ -23,7 +23,7 @@ import akka.persistence.JournalProtocol._ * to `Long.MaxValue` (i.e. no limit). */ @SerialVersionUID(1L) -case class Update(await: Boolean = false, replayMax: Long = Long.MaxValue) +final case class Update(await: Boolean = false, replayMax: Long = Long.MaxValue) case object Update { /** diff --git a/akka-persistence/src/main/scala/akka/persistence/journal/AsyncWriteJournal.scala b/akka-persistence/src/main/scala/akka/persistence/journal/AsyncWriteJournal.scala index bee75b89db..68e1570b24 100644 --- a/akka-persistence/src/main/scala/akka/persistence/journal/AsyncWriteJournal.scala +++ b/akka-persistence/src/main/scala/akka/persistence/journal/AsyncWriteJournal.scala @@ -117,7 +117,7 @@ trait AsyncWriteJournal extends Actor with AsyncRecovery { * INTERNAL API. */ private[persistence] object AsyncWriteJournal { - case class Desequenced(msg: Any, snr: Long, target: ActorRef, sender: ActorRef) + final case class Desequenced(msg: Any, snr: Long, target: ActorRef, sender: ActorRef) class Resequencer extends Actor { import scala.collection.mutable.Map diff --git a/akka-persistence/src/main/scala/akka/persistence/journal/AsyncWriteProxy.scala b/akka-persistence/src/main/scala/akka/persistence/journal/AsyncWriteProxy.scala index 87be670306..0cb5b8582c 100644 --- a/akka-persistence/src/main/scala/akka/persistence/journal/AsyncWriteProxy.scala +++ b/akka-persistence/src/main/scala/akka/persistence/journal/AsyncWriteProxy.scala @@ -64,7 +64,7 @@ private[persistence] trait AsyncWriteProxy extends AsyncWriteJournal with Stash * INTERNAL API. */ private[persistence] object AsyncWriteProxy { - case class SetStore(ref: ActorRef) + final case class SetStore(ref: ActorRef) } /** @@ -72,28 +72,28 @@ private[persistence] object AsyncWriteProxy { */ private[persistence] object AsyncWriteTarget { @SerialVersionUID(1L) - case class WriteMessages(messages: immutable.Seq[PersistentRepr]) + final case class WriteMessages(messages: immutable.Seq[PersistentRepr]) @SerialVersionUID(1L) - case class WriteConfirmations(confirmations: immutable.Seq[PersistentConfirmation]) + final case class WriteConfirmations(confirmations: immutable.Seq[PersistentConfirmation]) @SerialVersionUID(1L) - case class DeleteMessages(messageIds: immutable.Seq[PersistentId], permanent: Boolean) + final case class DeleteMessages(messageIds: immutable.Seq[PersistentId], permanent: Boolean) @SerialVersionUID(1L) - case class DeleteMessagesTo(processorId: String, toSequenceNr: Long, permanent: Boolean) + final case class DeleteMessagesTo(processorId: String, toSequenceNr: Long, permanent: Boolean) @SerialVersionUID(1L) - case class ReplayMessages(processorId: String, fromSequenceNr: Long, toSequenceNr: Long, max: Long) + final case class ReplayMessages(processorId: String, fromSequenceNr: Long, toSequenceNr: Long, max: Long) @SerialVersionUID(1L) case object ReplaySuccess @SerialVersionUID(1L) - case class ReplayFailure(cause: Throwable) + final case class ReplayFailure(cause: Throwable) @SerialVersionUID(1L) - case class ReadHighestSequenceNr(processorId: String, fromSequenceNr: Long) + final case class ReadHighestSequenceNr(processorId: String, fromSequenceNr: Long) } /** diff --git a/akka-persistence/src/main/scala/akka/persistence/journal/leveldb/LeveldbKey.scala b/akka-persistence/src/main/scala/akka/persistence/journal/leveldb/LeveldbKey.scala index 3bbfaf64de..0a1f98217c 100644 --- a/akka-persistence/src/main/scala/akka/persistence/journal/leveldb/LeveldbKey.scala +++ b/akka-persistence/src/main/scala/akka/persistence/journal/leveldb/LeveldbKey.scala @@ -10,7 +10,7 @@ import java.nio.ByteBuffer /** * LevelDB key. */ -private[leveldb] case class Key( +private[leveldb] final case class Key( processorId: Int, sequenceNr: Long, channelId: Int) diff --git a/akka-persistence/src/main/scala/akka/persistence/serialization/SnapshotSerializer.scala b/akka-persistence/src/main/scala/akka/persistence/serialization/SnapshotSerializer.scala index 407876d575..f563dd3ce5 100644 --- a/akka-persistence/src/main/scala/akka/persistence/serialization/SnapshotSerializer.scala +++ b/akka-persistence/src/main/scala/akka/persistence/serialization/SnapshotSerializer.scala @@ -17,13 +17,13 @@ import akka.serialization.{ Serializer, SerializationExtension } * @see [[SnapshotSerializer]] */ @SerialVersionUID(1L) -case class Snapshot(data: Any) +final case class Snapshot(data: Any) /** * INTERNAL API. */ @SerialVersionUID(1L) -private[serialization] case class SnapshotHeader(serializerId: Int, manifest: Option[String]) +private[serialization] final case class SnapshotHeader(serializerId: Int, manifest: Option[String]) /** * [[Snapshot]] serializer. diff --git a/akka-persistence/src/test/scala/akka/persistence/EventsourcedSpec.scala b/akka-persistence/src/test/scala/akka/persistence/EventsourcedSpec.scala index 6f6da4aaab..96dbee3939 100644 --- a/akka-persistence/src/test/scala/akka/persistence/EventsourcedSpec.scala +++ b/akka-persistence/src/test/scala/akka/persistence/EventsourcedSpec.scala @@ -13,8 +13,8 @@ import akka.actor._ import akka.testkit.{ ImplicitSender, AkkaSpec } object EventsourcedSpec { - case class Cmd(data: Any) - case class Evt(data: Any) + final case class Cmd(data: Any) + final case class Evt(data: Any) abstract class ExampleProcessor(name: String) extends NamedProcessor(name) with EventsourcedProcessor { var events: List[Any] = Nil diff --git a/akka-persistence/src/test/scala/akka/persistence/FailureSpec.scala b/akka-persistence/src/test/scala/akka/persistence/FailureSpec.scala index c850fe1fd2..d20c86a560 100644 --- a/akka-persistence/src/test/scala/akka/persistence/FailureSpec.scala +++ b/akka-persistence/src/test/scala/akka/persistence/FailureSpec.scala @@ -32,10 +32,10 @@ object FailureSpec { val numMessages = 10 case object Start - case class Done(ints: Vector[Int]) + final case class Done(ints: Vector[Int]) - case class ProcessingFailure(i: Int) - case class JournalingFailure(i: Int) + final case class ProcessingFailure(i: Int) + final case class JournalingFailure(i: Int) trait ChaosSupport { this: Actor ⇒ def random = ThreadLocalRandom.current diff --git a/akka-persistence/src/test/scala/akka/persistence/PerformanceSpec.scala b/akka-persistence/src/test/scala/akka/persistence/PerformanceSpec.scala index fd0f22fa4f..5708ab46a3 100644 --- a/akka-persistence/src/test/scala/akka/persistence/PerformanceSpec.scala +++ b/akka-persistence/src/test/scala/akka/persistence/PerformanceSpec.scala @@ -19,7 +19,7 @@ object PerformanceSpec { case object StartMeasure case object StopMeasure - case class FailAt(sequenceNr: Long) + final case class FailAt(sequenceNr: Long) trait Measure extends { this: Actor ⇒ val NanoToSecond = 1000.0 * 1000 * 1000 diff --git a/akka-persistence/src/test/scala/akka/persistence/ProcessorSpec.scala b/akka-persistence/src/test/scala/akka/persistence/ProcessorSpec.scala index f156ad2107..7a812bedc0 100644 --- a/akka-persistence/src/test/scala/akka/persistence/ProcessorSpec.scala +++ b/akka-persistence/src/test/scala/akka/persistence/ProcessorSpec.scala @@ -124,8 +124,8 @@ object ProcessorSpec { override def receive = failOnReplayedA orElse super.receive } - case class Delete1(snr: Long) - case class DeleteN(toSnr: Long) + final case class Delete1(snr: Long) + final case class DeleteN(toSnr: Long) class DeleteMessageTestProcessor(name: String) extends RecoverTestProcessor(name) { override def receive = { diff --git a/akka-persistence/src/test/scala/akka/persistence/SnapshotSpec.scala b/akka-persistence/src/test/scala/akka/persistence/SnapshotSpec.scala index fc0b884430..06256a14cd 100644 --- a/akka-persistence/src/test/scala/akka/persistence/SnapshotSpec.scala +++ b/akka-persistence/src/test/scala/akka/persistence/SnapshotSpec.scala @@ -29,8 +29,8 @@ object SnapshotSpec { override def preStart() = () } - case class Delete1(metadata: SnapshotMetadata) - case class DeleteN(criteria: SnapshotSelectionCriteria) + final case class Delete1(metadata: SnapshotMetadata) + final case class DeleteN(criteria: SnapshotSelectionCriteria) class DeleteSnapshotTestProcessor(name: String, probe: ActorRef) extends LoadSnapshotTestProcessor(name, probe) { override def receive = { diff --git a/akka-persistence/src/test/scala/akka/persistence/serialization/SerializerSpec.scala b/akka-persistence/src/test/scala/akka/persistence/serialization/SerializerSpec.scala index 38c3ff0884..311c1090fb 100644 --- a/akka-persistence/src/test/scala/akka/persistence/serialization/SerializerSpec.scala +++ b/akka-persistence/src/test/scala/akka/persistence/serialization/SerializerSpec.scala @@ -204,8 +204,8 @@ class MessageSerializerRemotingSpec extends AkkaSpec(remote.withFallback(customS } } -case class MyPayload(data: String) -case class MySnapshot(data: String) +final case class MyPayload(data: String) +final case class MySnapshot(data: String) class MyPayloadSerializer extends Serializer { val MyPayloadClass = classOf[MyPayload] diff --git a/akka-remote-tests/src/multi-jvm/scala/akka/remote/RemoteDeliverySpec.scala b/akka-remote-tests/src/multi-jvm/scala/akka/remote/RemoteDeliverySpec.scala index 0b8a765fa5..e08073ec8b 100644 --- a/akka-remote-tests/src/multi-jvm/scala/akka/remote/RemoteDeliverySpec.scala +++ b/akka-remote-tests/src/multi-jvm/scala/akka/remote/RemoteDeliverySpec.scala @@ -25,7 +25,7 @@ object RemoteDeliveryMultiJvmSpec extends MultiNodeConfig { commonConfig(debugConfig(on = false).withFallback(ConfigFactory.parseString("akka.loglevel=INFO"))) - case class Letter(n: Int, route: List[ActorRef]) + final case class Letter(n: Int, route: List[ActorRef]) class Postman extends Actor { def receive = { diff --git a/akka-remote-tests/src/multi-jvm/scala/akka/remote/RemoteNodeDeathWatchSpec.scala b/akka-remote-tests/src/multi-jvm/scala/akka/remote/RemoteNodeDeathWatchSpec.scala index f407d3c097..7b0017af80 100644 --- a/akka-remote-tests/src/multi-jvm/scala/akka/remote/RemoteNodeDeathWatchSpec.scala +++ b/akka-remote-tests/src/multi-jvm/scala/akka/remote/RemoteNodeDeathWatchSpec.scala @@ -32,15 +32,15 @@ object RemoteNodeDeathWatchMultiJvmSpec extends MultiNodeConfig { akka.remote.watch-failure-detector.acceptable-heartbeat-pause = 3 s """))) - case class WatchIt(watchee: ActorRef) - case class UnwatchIt(watchee: ActorRef) + final case class WatchIt(watchee: ActorRef) + final case class UnwatchIt(watchee: ActorRef) case object Ack /** * Forwarding `Terminated` to non-watching testActor is not possible, * and therefore the `Terminated` message is wrapped. */ - case class WrappedTerminated(t: Terminated) + final case class WrappedTerminated(t: Terminated) class ProbeActor(testActor: ActorRef) extends Actor { def receive = { diff --git a/akka-remote-tests/src/test/scala/akka/remote/testconductor/BarrierSpec.scala b/akka-remote-tests/src/test/scala/akka/remote/testconductor/BarrierSpec.scala index c1382ebd90..f840e725df 100644 --- a/akka-remote-tests/src/test/scala/akka/remote/testconductor/BarrierSpec.scala +++ b/akka-remote-tests/src/test/scala/akka/remote/testconductor/BarrierSpec.scala @@ -14,7 +14,7 @@ import org.scalatest.BeforeAndAfterEach import java.net.{ InetSocketAddress, InetAddress } object BarrierSpec { - case class Failed(ref: ActorRef, thr: Throwable) + final case class Failed(ref: ActorRef, thr: Throwable) val config = """ akka.testconductor.barrier-timeout = 5s akka.actor.provider = akka.remote.RemoteActorRefProvider diff --git a/akka-remote/src/main/scala/akka/remote/AckedDelivery.scala b/akka-remote/src/main/scala/akka/remote/AckedDelivery.scala index 6a7110a5db..c501553b2a 100644 --- a/akka-remote/src/main/scala/akka/remote/AckedDelivery.scala +++ b/akka-remote/src/main/scala/akka/remote/AckedDelivery.scala @@ -20,7 +20,7 @@ object SeqNo { /** * Implements a 64 bit sequence number with proper wrap-around ordering. */ -case class SeqNo(rawValue: Long) extends Ordered[SeqNo] { +final case class SeqNo(rawValue: Long) extends Ordered[SeqNo] { /** * Checks if this sequence number is an immediate successor of the provided one. @@ -65,7 +65,7 @@ trait HasSequenceNumber { * @param cumulativeAck Represents the highest sequence number received. * @param nacks Set of sequence numbers between the last delivered one and cumulativeAck that has been not yet received. */ -case class Ack(cumulativeAck: SeqNo, nacks: Set[SeqNo] = Set.empty) { +final case class Ack(cumulativeAck: SeqNo, nacks: Set[SeqNo] = Set.empty) { override def toString = s"ACK[$cumulativeAck, ${nacks.mkString("{", ", ", "}")}]" } @@ -87,7 +87,7 @@ class ResendUnfulfillableException * @param maxSeq The maximum sequence number that has been stored in this buffer. Messages having lower sequence number * will be not stored but rejected with [[java.lang.IllegalArgumentException]] */ -case class AckedSendBuffer[T <: HasSequenceNumber]( +final case class AckedSendBuffer[T <: HasSequenceNumber]( capacity: Int, nonAcked: IndexedSeq[T] = Vector.empty[T], nacked: IndexedSeq[T] = Vector.empty[T], @@ -132,7 +132,7 @@ case class AckedSendBuffer[T <: HasSequenceNumber]( * @param cumulativeAck The highest sequence number received so far. * @param buf Buffer of messages that are waiting for delivery */ -case class AckedReceiveBuffer[T <: HasSequenceNumber]( +final case class AckedReceiveBuffer[T <: HasSequenceNumber]( lastDelivered: SeqNo = SeqNo(-1), cumulativeAck: SeqNo = SeqNo(-1), buf: SortedSet[T] = TreeSet.empty[T])(implicit val seqOrdering: Ordering[T]) { diff --git a/akka-remote/src/main/scala/akka/remote/Endpoint.scala b/akka-remote/src/main/scala/akka/remote/Endpoint.scala index 8a43138a74..bd48e45e4c 100644 --- a/akka-remote/src/main/scala/akka/remote/Endpoint.scala +++ b/akka-remote/src/main/scala/akka/remote/Endpoint.scala @@ -120,21 +120,21 @@ private[remote] trait AssociationProblem * INTERNAL API */ @SerialVersionUID(1L) -private[remote] case class ShutDownAssociation(localAddress: Address, remoteAddress: Address, cause: Throwable) +private[remote] final case class ShutDownAssociation(localAddress: Address, remoteAddress: Address, cause: Throwable) extends EndpointException("Shut down address: " + remoteAddress, cause) with AssociationProblem /** * INTERNAL API */ @SerialVersionUID(1L) -private[remote] case class InvalidAssociation(localAddress: Address, remoteAddress: Address, cause: Throwable) +private[remote] final case class InvalidAssociation(localAddress: Address, remoteAddress: Address, cause: Throwable) extends EndpointException("Invalid address: " + remoteAddress, cause) with AssociationProblem /** * INTERNAL API */ @SerialVersionUID(1L) -private[remote] case class HopelessAssociation(localAddress: Address, remoteAddress: Address, uid: Option[Int], cause: Throwable) +private[remote] final case class HopelessAssociation(localAddress: Address, remoteAddress: Address, uid: Option[Int], cause: Throwable) extends EndpointException("Catastrophic association error.") with AssociationProblem /** @@ -161,7 +161,7 @@ private[remote] class OversizedPayloadException(msg: String) extends EndpointExc private[remote] object ReliableDeliverySupervisor { case object Ungate case object AttemptSysMsgRedelivery - case class GotUid(uid: Int) + final case class GotUid(uid: Int) def props( handleOrActive: Option[AkkaProtocolHandle], @@ -451,17 +451,17 @@ private[remote] object EndpointWriter { * used instead. * @param handle Handle of the new inbound association. */ - case class TakeOver(handle: AkkaProtocolHandle) extends NoSerializationVerificationNeeded - case class TookOver(writer: ActorRef, handle: AkkaProtocolHandle) extends NoSerializationVerificationNeeded + final case class TakeOver(handle: AkkaProtocolHandle) extends NoSerializationVerificationNeeded + final case class TookOver(writer: ActorRef, handle: AkkaProtocolHandle) extends NoSerializationVerificationNeeded case object BackoffTimer case object FlushAndStop case object AckIdleCheckTimer - case class StopReading(writer: ActorRef) - case class StoppedReading(writer: ActorRef) + final case class StopReading(writer: ActorRef) + final case class StoppedReading(writer: ActorRef) - case class Handle(handle: AkkaProtocolHandle) extends NoSerializationVerificationNeeded + final case class Handle(handle: AkkaProtocolHandle) extends NoSerializationVerificationNeeded - case class OutboundAck(ack: Ack) + final case class OutboundAck(ack: Ack) sealed trait State case object Initializing extends State diff --git a/akka-remote/src/main/scala/akka/remote/PhiAccrualFailureDetector.scala b/akka-remote/src/main/scala/akka/remote/PhiAccrualFailureDetector.scala index e62d627210..7d33c56b7a 100644 --- a/akka-remote/src/main/scala/akka/remote/PhiAccrualFailureDetector.scala +++ b/akka-remote/src/main/scala/akka/remote/PhiAccrualFailureDetector.scala @@ -97,7 +97,7 @@ class PhiAccrualFailureDetector( * Implement using optimistic lockless concurrency, all state is represented * by this immutable case class and managed by an AtomicReference. */ - private case class State(history: HeartbeatHistory, timestamp: Option[Long]) + private final case class State(history: HeartbeatHistory, timestamp: Option[Long]) private val state = new AtomicReference[State](State(history = firstHeartbeat, timestamp = None)) @@ -203,7 +203,7 @@ private[akka] object HeartbeatHistory { * The stats (mean, variance, stdDeviation) are not defined for * for empty HeartbeatHistory, i.e. throws AritmeticException. */ -private[akka] case class HeartbeatHistory private ( +private[akka] final case class HeartbeatHistory private ( maxSampleSize: Int, intervals: immutable.IndexedSeq[Long], intervalSum: Long, diff --git a/akka-remote/src/main/scala/akka/remote/RemoteActorRefProvider.scala b/akka-remote/src/main/scala/akka/remote/RemoteActorRefProvider.scala index f305448cb5..4655aea6be 100644 --- a/akka-remote/src/main/scala/akka/remote/RemoteActorRefProvider.scala +++ b/akka-remote/src/main/scala/akka/remote/RemoteActorRefProvider.scala @@ -23,7 +23,7 @@ import akka.dispatch.{ RequiresMessageQueue, UnboundedMessageQueueSemantics } * INTERNAL API */ private[akka] object RemoteActorRefProvider { - private case class Internals(transport: RemoteTransport, serialization: Serialization, remoteDaemon: InternalActorRef) + private final case class Internals(transport: RemoteTransport, serialization: Serialization, remoteDaemon: InternalActorRef) extends NoSerializationVerificationNeeded sealed trait TerminatorState diff --git a/akka-remote/src/main/scala/akka/remote/RemoteDaemon.scala b/akka-remote/src/main/scala/akka/remote/RemoteDaemon.scala index ca430135e1..a7e17e7687 100644 --- a/akka-remote/src/main/scala/akka/remote/RemoteDaemon.scala +++ b/akka-remote/src/main/scala/akka/remote/RemoteDaemon.scala @@ -30,7 +30,7 @@ private[akka] sealed trait DaemonMsg * INTERNAL API */ @SerialVersionUID(1L) -private[akka] case class DaemonMsgCreate(props: Props, deploy: Deploy, path: String, supervisor: ActorRef) extends DaemonMsg +private[akka] final case class DaemonMsgCreate(props: Props, deploy: Deploy, path: String, supervisor: ActorRef) extends DaemonMsg /** * INTERNAL API diff --git a/akka-remote/src/main/scala/akka/remote/RemoteDeployer.scala b/akka-remote/src/main/scala/akka/remote/RemoteDeployer.scala index 09bec28073..3b770fcb81 100644 --- a/akka-remote/src/main/scala/akka/remote/RemoteDeployer.scala +++ b/akka-remote/src/main/scala/akka/remote/RemoteDeployer.scala @@ -13,7 +13,7 @@ import akka.routing.Pool import akka.remote.routing.RemoteRouterConfig @SerialVersionUID(1L) -case class RemoteScope(node: Address) extends Scope { +final case class RemoteScope(node: Address) extends Scope { def withFallback(other: Scope): Scope = this } diff --git a/akka-remote/src/main/scala/akka/remote/RemoteDeploymentWatcher.scala b/akka-remote/src/main/scala/akka/remote/RemoteDeploymentWatcher.scala index a7e7cb33ec..5a1ffeda7f 100644 --- a/akka-remote/src/main/scala/akka/remote/RemoteDeploymentWatcher.scala +++ b/akka-remote/src/main/scala/akka/remote/RemoteDeploymentWatcher.scala @@ -15,7 +15,7 @@ import akka.dispatch.{ UnboundedMessageQueueSemantics, RequiresMessageQueue } * INTERNAL API */ private[akka] object RemoteDeploymentWatcher { - case class WatchRemote(actor: ActorRef, supervisor: ActorRef) + final case class WatchRemote(actor: ActorRef, supervisor: ActorRef) } /** diff --git a/akka-remote/src/main/scala/akka/remote/RemoteWatcher.scala b/akka-remote/src/main/scala/akka/remote/RemoteWatcher.scala index 69d84d7241..3d523c7963 100644 --- a/akka-remote/src/main/scala/akka/remote/RemoteWatcher.scala +++ b/akka-remote/src/main/scala/akka/remote/RemoteWatcher.scala @@ -36,19 +36,19 @@ private[akka] object RemoteWatcher { Props(classOf[RemoteWatcher], failureDetector, heartbeatInterval, unreachableReaperInterval, heartbeatExpectedResponseAfter).withDeploy(Deploy.local) - case class WatchRemote(watchee: ActorRef, watcher: ActorRef) - case class UnwatchRemote(watchee: ActorRef, watcher: ActorRef) - case class RewatchRemote(watchee: ActorRef, watcher: ActorRef) + final case class WatchRemote(watchee: ActorRef, watcher: ActorRef) + final case class UnwatchRemote(watchee: ActorRef, watcher: ActorRef) + final case class RewatchRemote(watchee: ActorRef, watcher: ActorRef) @SerialVersionUID(1L) class Rewatch(watchee: InternalActorRef, watcher: InternalActorRef) extends Watch(watchee, watcher) @SerialVersionUID(1L) case object Heartbeat - @SerialVersionUID(1L) case class HeartbeatRsp(addressUid: Int) + @SerialVersionUID(1L) final case class HeartbeatRsp(addressUid: Int) // sent to self only case object HeartbeatTick case object ReapUnreachableTick - case class ExpectedFirstHeartbeat(from: Address) + final case class ExpectedFirstHeartbeat(from: Address) // test purpose object Stats { @@ -56,7 +56,7 @@ private[akka] object RemoteWatcher { def counts(watching: Int, watchingNodes: Int): Stats = new Stats(watching, watchingNodes)(Set.empty) } - case class Stats(watching: Int, watchingNodes: Int)(val watchingRefs: Set[(ActorRef, ActorRef)]) { + final case class Stats(watching: Int, watchingNodes: Int)(val watchingRefs: Set[(ActorRef, ActorRef)]) { override def toString: String = { def formatWatchingRefs: String = if (watchingRefs.isEmpty) "" diff --git a/akka-remote/src/main/scala/akka/remote/Remoting.scala b/akka-remote/src/main/scala/akka/remote/Remoting.scala index 6f81a30d16..d34b486692 100644 --- a/akka-remote/src/main/scala/akka/remote/Remoting.scala +++ b/akka-remote/src/main/scala/akka/remote/Remoting.scala @@ -33,7 +33,7 @@ private[remote] object AddressUrlEncoder { /** * INTERNAL API */ -private[remote] case class RARP(provider: RemoteActorRefProvider) extends Extension { +private[remote] final case class RARP(provider: RemoteActorRefProvider) extends Extension { def configureDispatcher(props: Props): Props = provider.remoteSettings.configureDispatcher(props) } /** @@ -81,7 +81,7 @@ private[remote] object Remoting { } } - case class RegisterTransportActor(props: Props, name: String) extends NoSerializationVerificationNeeded + final case class RegisterTransportActor(props: Props, name: String) extends NoSerializationVerificationNeeded private[Remoting] class TransportSupervisor extends Actor with RequiresMessageQueue[UnboundedMessageQueueSemantics] { override def supervisorStrategy = OneForOneStrategy() { @@ -233,10 +233,10 @@ private[remote] object EndpointManager { // Messages between Remoting and EndpointManager sealed trait RemotingCommand extends NoSerializationVerificationNeeded - case class Listen(addressesPromise: Promise[Seq[(AkkaProtocolTransport, Address)]]) extends RemotingCommand + final case class Listen(addressesPromise: Promise[Seq[(AkkaProtocolTransport, Address)]]) extends RemotingCommand case object StartupFinished extends RemotingCommand case object ShutdownAndFlush extends RemotingCommand - case class Send(message: Any, senderOption: Option[ActorRef], recipient: RemoteActorRef, seqOpt: Option[SeqNo] = None) + final case class Send(message: Any, senderOption: Option[ActorRef], recipient: RemoteActorRef, seqOpt: Option[SeqNo] = None) extends RemotingCommand with HasSequenceNumber { override def toString = s"Remote message $senderOption -> $recipient" @@ -244,22 +244,22 @@ private[remote] object EndpointManager { // acknowledged delivery buffers def seq = seqOpt.get } - case class Quarantine(remoteAddress: Address, uid: Option[Int]) extends RemotingCommand - case class ManagementCommand(cmd: Any) extends RemotingCommand - case class ManagementCommandAck(status: Boolean) + final case class Quarantine(remoteAddress: Address, uid: Option[Int]) extends RemotingCommand + final case class ManagementCommand(cmd: Any) extends RemotingCommand + final case class ManagementCommandAck(status: Boolean) // Messages internal to EndpointManager case object Prune extends NoSerializationVerificationNeeded - case class ListensResult(addressesPromise: Promise[Seq[(AkkaProtocolTransport, Address)]], - results: Seq[(AkkaProtocolTransport, Address, Promise[AssociationEventListener])]) + final case class ListensResult(addressesPromise: Promise[Seq[(AkkaProtocolTransport, Address)]], + results: Seq[(AkkaProtocolTransport, Address, Promise[AssociationEventListener])]) extends NoSerializationVerificationNeeded - case class ListensFailure(addressesPromise: Promise[Seq[(AkkaProtocolTransport, Address)]], cause: Throwable) + final case class ListensFailure(addressesPromise: Promise[Seq[(AkkaProtocolTransport, Address)]], cause: Throwable) extends NoSerializationVerificationNeeded // Helper class to store address pairs - case class Link(localAddress: Address, remoteAddress: Address) + final case class Link(localAddress: Address, remoteAddress: Address) - case class ResendState(uid: Int, buffer: AckedReceiveBuffer[Message]) + final case class ResendState(uid: Int, buffer: AckedReceiveBuffer[Message]) sealed trait EndpointPolicy { @@ -268,13 +268,13 @@ private[remote] object EndpointManager { */ def isTombstone: Boolean } - case class Pass(endpoint: ActorRef) extends EndpointPolicy { + final case class Pass(endpoint: ActorRef) extends EndpointPolicy { override def isTombstone: Boolean = false } - case class Gated(timeOfRelease: Deadline) extends EndpointPolicy { + final case class Gated(timeOfRelease: Deadline) extends EndpointPolicy { override def isTombstone: Boolean = true } - case class Quarantined(uid: Int, timeOfRelease: Deadline) extends EndpointPolicy { + final case class Quarantined(uid: Int, timeOfRelease: Deadline) extends EndpointPolicy { override def isTombstone: Boolean = true } diff --git a/akka-remote/src/main/scala/akka/remote/RemotingLifecycleEvent.scala b/akka-remote/src/main/scala/akka/remote/RemotingLifecycleEvent.scala index 933fd07ce1..e8930ab233 100644 --- a/akka-remote/src/main/scala/akka/remote/RemotingLifecycleEvent.scala +++ b/akka-remote/src/main/scala/akka/remote/RemotingLifecycleEvent.scala @@ -79,7 +79,7 @@ final case class RemotingErrorEvent(cause: Throwable) extends RemotingLifecycleE } @SerialVersionUID(1L) -case class QuarantinedEvent(address: Address, uid: Int) extends RemotingLifecycleEvent { +final case class QuarantinedEvent(address: Address, uid: Int) extends RemotingLifecycleEvent { override def logLevel: Logging.LogLevel = Logging.WarningLevel override val toString: String = s"Association to [$address] having UID [$uid] is irrecoverably failed. UID is now quarantined and all " + diff --git a/akka-remote/src/main/scala/akka/remote/transport/AbstractTransportAdapter.scala b/akka-remote/src/main/scala/akka/remote/transport/AbstractTransportAdapter.scala index 22d631977d..809661c889 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/AbstractTransportAdapter.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/AbstractTransportAdapter.scala @@ -122,11 +122,11 @@ abstract class AbstractTransportAdapterHandle(val originalLocalAddress: Address, object ActorTransportAdapter { sealed trait TransportOperation extends NoSerializationVerificationNeeded - case class ListenerRegistered(listener: AssociationEventListener) extends TransportOperation - case class AssociateUnderlying(remoteAddress: Address, statusPromise: Promise[AssociationHandle]) extends TransportOperation - case class ListenUnderlying(listenAddress: Address, - upstreamListener: Future[AssociationEventListener]) extends TransportOperation - case class DisassociateUnderlying(info: DisassociateInfo = AssociationHandle.Unknown) extends TransportOperation + final case class ListenerRegistered(listener: AssociationEventListener) extends TransportOperation + final case class AssociateUnderlying(remoteAddress: Address, statusPromise: Promise[AssociationHandle]) extends TransportOperation + final case class ListenUnderlying(listenAddress: Address, + upstreamListener: Future[AssociationEventListener]) extends TransportOperation + final case class DisassociateUnderlying(info: DisassociateInfo = AssociationHandle.Unknown) extends TransportOperation implicit val AskTimeout = Timeout(5.seconds) } diff --git a/akka-remote/src/main/scala/akka/remote/transport/AkkaPduCodec.scala b/akka-remote/src/main/scala/akka/remote/transport/AkkaPduCodec.scala index 24be26d447..96402403cf 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/AkkaPduCodec.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/AkkaPduCodec.scala @@ -29,16 +29,16 @@ private[remote] object AkkaPduCodec { * Trait that represents decoded Akka PDUs (Protocol Data Units) */ sealed trait AkkaPdu - case class Associate(info: HandshakeInfo) extends AkkaPdu - case class Disassociate(reason: AssociationHandle.DisassociateInfo) extends AkkaPdu + final case class Associate(info: HandshakeInfo) extends AkkaPdu + final case class Disassociate(reason: AssociationHandle.DisassociateInfo) extends AkkaPdu case object Heartbeat extends AkkaPdu - case class Payload(bytes: ByteString) extends AkkaPdu + final case class Payload(bytes: ByteString) extends AkkaPdu - case class Message(recipient: InternalActorRef, - recipientAddress: Address, - serializedMessage: SerializedMessage, - senderOption: Option[ActorRef], - seqOption: Option[SeqNo]) extends HasSequenceNumber { + final case class Message(recipient: InternalActorRef, + recipientAddress: Address, + serializedMessage: SerializedMessage, + senderOption: Option[ActorRef], + seqOption: Option[SeqNo]) extends HasSequenceNumber { def reliableDeliveryEnabled = seqOption.isDefined @@ -68,7 +68,7 @@ private[remote] trait AkkaPduCodec { * form as a [[akka.util.ByteString]]. * * For the same effect the constructXXX methods might be called directly, taking method parameters instead of the - * [[akka.remote.transport.AkkaPduCodec.AkkaPdu]] case classes. + * [[akka.remote.transport.AkkaPduCodec.AkkaPdu]] final case classes. * * @param pdu * The Akka Protocol Data Unit to be encoded diff --git a/akka-remote/src/main/scala/akka/remote/transport/AkkaProtocolTransport.scala b/akka-remote/src/main/scala/akka/remote/transport/AkkaProtocolTransport.scala index 76fbd1a7ca..558688005b 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/AkkaProtocolTransport.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/AkkaProtocolTransport.scala @@ -50,13 +50,13 @@ private[remote] object AkkaProtocolTransport { //Couldn't these go into the Remo val AkkaOverhead: Int = 0 //Don't know yet val UniqueId = new java.util.concurrent.atomic.AtomicInteger(0) - case class AssociateUnderlyingRefuseUid( + final case class AssociateUnderlyingRefuseUid( remoteAddress: Address, statusPromise: Promise[AssociationHandle], refuseUid: Option[Int]) extends NoSerializationVerificationNeeded } -case class HandshakeInfo(origin: Address, uid: Int, cookie: Option[String]) +final case class HandshakeInfo(origin: Address, uid: Int, cookie: Option[String]) /** * Implementation of the Akka protocol as a Transport that wraps an underlying Transport instance. @@ -213,31 +213,31 @@ private[transport] object ProtocolStateActor { case object HeartbeatTimer extends NoSerializationVerificationNeeded - case class Handle(handle: AssociationHandle) extends NoSerializationVerificationNeeded + final case class Handle(handle: AssociationHandle) extends NoSerializationVerificationNeeded - case class HandleListenerRegistered(listener: HandleEventListener) extends NoSerializationVerificationNeeded + final case class HandleListenerRegistered(listener: HandleEventListener) extends NoSerializationVerificationNeeded sealed trait ProtocolStateData trait InitialProtocolStateData extends ProtocolStateData // Neither the underlying, nor the provided transport is associated - case class OutboundUnassociated(remoteAddress: Address, statusPromise: Promise[AssociationHandle], transport: Transport) + final case class OutboundUnassociated(remoteAddress: Address, statusPromise: Promise[AssociationHandle], transport: Transport) extends InitialProtocolStateData // The underlying transport is associated, but the handshake of the akka protocol is not yet finished - case class OutboundUnderlyingAssociated(statusPromise: Promise[AssociationHandle], wrappedHandle: AssociationHandle) + final case class OutboundUnderlyingAssociated(statusPromise: Promise[AssociationHandle], wrappedHandle: AssociationHandle) extends ProtocolStateData // The underlying transport is associated, but the handshake of the akka protocol is not yet finished - case class InboundUnassociated(associationListener: AssociationEventListener, wrappedHandle: AssociationHandle) + final case class InboundUnassociated(associationListener: AssociationEventListener, wrappedHandle: AssociationHandle) extends InitialProtocolStateData // Both transports are associated, but the handler for the handle has not yet been provided - case class AssociatedWaitHandler(handleListener: Future[HandleEventListener], wrappedHandle: AssociationHandle, - queue: immutable.Queue[ByteString]) + final case class AssociatedWaitHandler(handleListener: Future[HandleEventListener], wrappedHandle: AssociationHandle, + queue: immutable.Queue[ByteString]) extends ProtocolStateData - case class ListenerReady(listener: HandleEventListener, wrappedHandle: AssociationHandle) + final case class ListenerReady(listener: HandleEventListener, wrappedHandle: AssociationHandle) extends ProtocolStateData case object TimeoutReason diff --git a/akka-remote/src/main/scala/akka/remote/transport/FailureInjectorTransportAdapter.scala b/akka-remote/src/main/scala/akka/remote/transport/FailureInjectorTransportAdapter.scala index 98619b85b5..0e29a4ff58 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/FailureInjectorTransportAdapter.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/FailureInjectorTransportAdapter.scala @@ -17,7 +17,7 @@ import scala.util.control.NoStackTrace import scala.util.Try @SerialVersionUID(1L) -case class FailureInjectorException(msg: String) extends AkkaException(msg) with NoStackTrace +final case class FailureInjectorException(msg: String) extends AkkaException(msg) with NoStackTrace class FailureInjectorProvider extends TransportAdapterProvider { @@ -34,9 +34,9 @@ private[remote] object FailureInjectorTransportAdapter { trait FailureInjectorCommand @SerialVersionUID(1L) - case class All(mode: GremlinMode) + final case class All(mode: GremlinMode) @SerialVersionUID(1L) - case class One(remoteAddress: Address, mode: GremlinMode) + final case class One(remoteAddress: Address, mode: GremlinMode) sealed trait GremlinMode @SerialVersionUID(1L) @@ -47,7 +47,7 @@ private[remote] object FailureInjectorTransportAdapter { def getInstance = this } @SerialVersionUID(1L) - case class Drop(outboundDropP: Double, inboundDropP: Double) extends GremlinMode + final case class Drop(outboundDropP: Double, inboundDropP: Double) extends GremlinMode } /** @@ -141,8 +141,8 @@ private[remote] class FailureInjectorTransportAdapter(wrappedTransport: Transpor /** * INTERNAL API */ -private[remote] case class FailureInjectorHandle(_wrappedHandle: AssociationHandle, - private val gremlinAdapter: FailureInjectorTransportAdapter) +private[remote] final case class FailureInjectorHandle(_wrappedHandle: AssociationHandle, + private val gremlinAdapter: FailureInjectorTransportAdapter) extends AbstractTransportAdapterHandle(_wrappedHandle, FailureInjectorSchemeIdentifier) with HandleEventListener { import gremlinAdapter.extendedSystem.dispatcher diff --git a/akka-remote/src/main/scala/akka/remote/transport/TestTransport.scala b/akka-remote/src/main/scala/akka/remote/transport/TestTransport.scala index a5e9de4200..317f0a48ca 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/TestTransport.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/TestTransport.scala @@ -275,11 +275,11 @@ object TestTransport { */ sealed trait Activity - case class ListenAttempt(boundAddress: Address) extends Activity - case class AssociateAttempt(localAddress: Address, remoteAddress: Address) extends Activity - case class ShutdownAttempt(boundAddress: Address) extends Activity - case class WriteAttempt(sender: Address, recipient: Address, payload: ByteString) extends Activity - case class DisassociateAttempt(requester: Address, remote: Address) extends Activity + final case class ListenAttempt(boundAddress: Address) extends Activity + final case class AssociateAttempt(localAddress: Address, remoteAddress: Address) extends Activity + final case class ShutdownAttempt(boundAddress: Address) extends Activity + final case class WriteAttempt(sender: Address, recipient: Address, payload: ByteString) extends Activity + final case class DisassociateAttempt(requester: Address, remote: Address) extends Activity /** * Shared state among [[akka.remote.transport.TestTransport]] instances. Coordinates the transports and the means @@ -445,7 +445,7 @@ object AssociationRegistry { def clear(): Unit = this.synchronized { registries.clear() } } -case class TestAssociationHandle( +final case class TestAssociationHandle( localAddress: Address, remoteAddress: Address, transport: TestTransport, diff --git a/akka-remote/src/main/scala/akka/remote/transport/ThrottlerTransportAdapter.scala b/akka-remote/src/main/scala/akka/remote/transport/ThrottlerTransportAdapter.scala index 89e05dc5e7..1f2efef29d 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/ThrottlerTransportAdapter.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/ThrottlerTransportAdapter.scala @@ -80,7 +80,7 @@ object ThrottlerTransportAdapter { } @SerialVersionUID(1L) - case class SetThrottle(address: Address, direction: Direction, mode: ThrottleMode) + final case class SetThrottle(address: Address, direction: Direction, mode: ThrottleMode) @SerialVersionUID(1L) case object SetThrottleAck { @@ -96,7 +96,7 @@ object ThrottlerTransportAdapter { } @SerialVersionUID(1L) - case class TokenBucket(capacity: Int, tokensPerSecond: Double, nanoTimeOfLastSend: Long, availableTokens: Int) + final case class TokenBucket(capacity: Int, tokensPerSecond: Double, nanoTimeOfLastSend: Long, availableTokens: Int) extends ThrottleMode { private def isAvailable(nanoTimeOfSend: Long, tokens: Int): Boolean = @@ -148,7 +148,7 @@ object ThrottlerTransportAdapter { * Management Command to force dissocation of an address. */ @SerialVersionUID(1L) - case class ForceDisassociate(address: Address) + final case class ForceDisassociate(address: Address) @SerialVersionUID(1L) case object ForceDisassociateAck { @@ -183,16 +183,16 @@ class ThrottlerTransportAdapter(_wrappedTransport: Transport, _system: ExtendedA * INTERNAL API */ private[transport] object ThrottlerManager { - case class Checkin(origin: Address, handle: ThrottlerHandle) extends NoSerializationVerificationNeeded + final case class Checkin(origin: Address, handle: ThrottlerHandle) extends NoSerializationVerificationNeeded - case class AssociateResult(handle: AssociationHandle, statusPromise: Promise[AssociationHandle]) + final case class AssociateResult(handle: AssociationHandle, statusPromise: Promise[AssociationHandle]) extends NoSerializationVerificationNeeded - case class ListenerAndMode(listener: HandleEventListener, mode: ThrottleMode) extends NoSerializationVerificationNeeded + final case class ListenerAndMode(listener: HandleEventListener, mode: ThrottleMode) extends NoSerializationVerificationNeeded - case class Handle(handle: ThrottlerHandle) extends NoSerializationVerificationNeeded + final case class Handle(handle: ThrottlerHandle) extends NoSerializationVerificationNeeded - case class Listener(listener: HandleEventListener) extends NoSerializationVerificationNeeded + final case class Listener(listener: HandleEventListener) extends NoSerializationVerificationNeeded } /** @@ -337,7 +337,7 @@ private[transport] object ThrottledAssociation { sealed trait ThrottlerData case object Uninitialized extends ThrottlerData - case class ExposedHandle(handle: ThrottlerHandle) extends ThrottlerData + final case class ExposedHandle(handle: ThrottlerHandle) extends ThrottlerData } /** @@ -501,7 +501,7 @@ private[transport] class ThrottledAssociation( /** * INTERNAL API */ -private[transport] case class ThrottlerHandle(_wrappedHandle: AssociationHandle, throttlerActor: ActorRef) +private[transport] final case class ThrottlerHandle(_wrappedHandle: AssociationHandle, throttlerActor: ActorRef) extends AbstractTransportAdapterHandle(_wrappedHandle, SchemeIdentifier) { private[transport] val outboundThrottleMode = new AtomicReference[ThrottleMode](Unthrottled) diff --git a/akka-remote/src/main/scala/akka/remote/transport/Transport.scala b/akka-remote/src/main/scala/akka/remote/transport/Transport.scala index be7f0175ff..4e71b4e536 100644 --- a/akka-remote/src/main/scala/akka/remote/transport/Transport.scala +++ b/akka-remote/src/main/scala/akka/remote/transport/Transport.scala @@ -19,7 +19,7 @@ object Transport { * hostname, etc.). */ @SerialVersionUID(1L) - case class InvalidAssociationException(msg: String, cause: Throwable = null) extends AkkaException(msg, cause) with NoStackTrace + final case class InvalidAssociationException(msg: String, cause: Throwable = null) extends AkkaException(msg, cause) with NoStackTrace /** * Message sent to a [[akka.remote.transport.Transport.AssociationEventListener]] registered to a transport @@ -28,7 +28,7 @@ object Transport { * @param association * The handle for the inbound association. */ - case class InboundAssociation(association: AssociationHandle) extends AssociationEvent + final case class InboundAssociation(association: AssociationHandle) extends AssociationEvent /** * An interface that needs to be implemented by the user of a transport to listen to association events @@ -47,7 +47,7 @@ object Transport { * forward event objects as messages to the provided ActorRef. * @param actor */ - case class ActorAssociationEventListener(actor: ActorRef) extends AssociationEventListener { + final case class ActorAssociationEventListener(actor: ActorRef) extends AssociationEventListener { override def notify(ev: AssociationEvent): Unit = actor ! ev } @@ -154,7 +154,7 @@ object AssociationHandle { * @param payload * The raw bytes that were sent by the remote endpoint. */ - case class InboundPayload(payload: ByteString) extends HandleEvent { + final case class InboundPayload(payload: ByteString) extends HandleEvent { override def toString: String = s"InboundPayload(size = ${payload.length} bytes)" } @@ -164,7 +164,7 @@ object AssociationHandle { * @param info * information about the reason of disassociation */ - case class Disassociated(info: DisassociateInfo) extends HandleEvent + final case class Disassociated(info: DisassociateInfo) extends HandleEvent /** * Supertype of possible disassociation reasons @@ -192,7 +192,7 @@ object AssociationHandle { * forward event objects as messages to the provided ActorRef. * @param actor */ - case class ActorHandleEventListener(actor: ActorRef) extends HandleEventListener { + final case class ActorHandleEventListener(actor: ActorRef) extends HandleEventListener { override def notify(ev: HandleEvent): Unit = actor ! ev } } diff --git a/akka-remote/src/test/scala/akka/remote/AckedDeliverySpec.scala b/akka-remote/src/test/scala/akka/remote/AckedDeliverySpec.scala index 128d73b47d..d18bb9b285 100644 --- a/akka-remote/src/test/scala/akka/remote/AckedDeliverySpec.scala +++ b/akka-remote/src/test/scala/akka/remote/AckedDeliverySpec.scala @@ -9,7 +9,7 @@ import scala.concurrent.forkjoin.ThreadLocalRandom object AckedDeliverySpec { - case class Sequenced(seq: SeqNo, body: String) extends HasSequenceNumber { + final case class Sequenced(seq: SeqNo, body: String) extends HasSequenceNumber { override def toString = s"MSG[${seq.rawValue}]" } diff --git a/akka-remote/src/test/scala/akka/remote/RemoteWatcherSpec.scala b/akka-remote/src/test/scala/akka/remote/RemoteWatcherSpec.scala index 312c66cf2d..ac82ef97ba 100644 --- a/akka-remote/src/test/scala/akka/remote/RemoteWatcherSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/RemoteWatcherSpec.scala @@ -45,8 +45,8 @@ object RemoteWatcherSpec { } object TestRemoteWatcher { - case class AddressTerm(address: Address) - case class Quarantined(address: Address, uid: Option[Int]) + final case class AddressTerm(address: Address) + final case class Quarantined(address: Address, uid: Option[Int]) } class TestRemoteWatcher(heartbeatExpectedResponseAfter: FiniteDuration) extends RemoteWatcher(createFailureDetector, diff --git a/akka-remote/src/test/scala/akka/remote/RemotingSpec.scala b/akka-remote/src/test/scala/akka/remote/RemotingSpec.scala index 56f9358a75..5e179535ab 100644 --- a/akka-remote/src/test/scala/akka/remote/RemotingSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/RemotingSpec.scala @@ -17,8 +17,8 @@ import scala.concurrent.forkjoin.ThreadLocalRandom object RemotingSpec { - case class ActorForReq(s: String) - case class ActorSelReq(s: String) + final case class ActorForReq(s: String) + final case class ActorSelReq(s: String) class Echo1 extends Actor { var target: ActorRef = context.system.deadLetters diff --git a/akka-remote/src/test/scala/akka/remote/Ticket1978CommunicationSpec.scala b/akka-remote/src/test/scala/akka/remote/Ticket1978CommunicationSpec.scala index 9585b2ae37..7bf6b3a9ae 100644 --- a/akka-remote/src/test/scala/akka/remote/Ticket1978CommunicationSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/Ticket1978CommunicationSpec.scala @@ -54,7 +54,7 @@ object Configuration { } """ - case class CipherConfig(runTest: Boolean, config: Config, cipher: String, localPort: Int, remotePort: Int) + final case class CipherConfig(runTest: Boolean, config: Config, cipher: String, localPort: Int, remotePort: Int) def getCipherConfig(cipher: String, enabled: String*): CipherConfig = { val localPort, remotePort = { val s = new java.net.ServerSocket(0); try s.getLocalPort finally s.close() } diff --git a/akka-remote/src/test/scala/akka/remote/UntrustedSpec.scala b/akka-remote/src/test/scala/akka/remote/UntrustedSpec.scala index 7bfcc8c8d4..2ec7090a38 100644 --- a/akka-remote/src/test/scala/akka/remote/UntrustedSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/UntrustedSpec.scala @@ -26,8 +26,8 @@ import akka.event.Logging import akka.testkit.EventFilter object UntrustedSpec { - case class IdentifyReq(path: String) - case class StopChild(name: String) + final case class IdentifyReq(path: String) + final case class StopChild(name: String) class Receptionist(testActor: ActorRef) extends Actor { context.actorOf(Props(classOf[Child], testActor), "child1") diff --git a/akka-remote/src/test/scala/akka/remote/transport/ThrottlerTransportAdapterSpec.scala b/akka-remote/src/test/scala/akka/remote/transport/ThrottlerTransportAdapterSpec.scala index d97a2a52de..6c1cfbe39a 100644 --- a/akka-remote/src/test/scala/akka/remote/transport/ThrottlerTransportAdapterSpec.scala +++ b/akka-remote/src/test/scala/akka/remote/transport/ThrottlerTransportAdapterSpec.scala @@ -60,7 +60,7 @@ object ThrottlerTransportAdapterSpec { } } - case class Lost(msg: String) + final case class Lost(msg: String) } class ThrottlerTransportAdapterSpec extends AkkaSpec(configA) with ImplicitSender with DefaultTimeout { diff --git a/akka-samples/akka-sample-cluster-scala/src/main/scala/sample/cluster/stats/StatsMessages.scala b/akka-samples/akka-sample-cluster-scala/src/main/scala/sample/cluster/stats/StatsMessages.scala index 916dfae294..4617a15d3b 100644 --- a/akka-samples/akka-sample-cluster-scala/src/main/scala/sample/cluster/stats/StatsMessages.scala +++ b/akka-samples/akka-sample-cluster-scala/src/main/scala/sample/cluster/stats/StatsMessages.scala @@ -1,7 +1,7 @@ package sample.cluster.stats //#messages -case class StatsJob(text: String) -case class StatsResult(meanWordLength: Double) -case class JobFailed(reason: String) +final case class StatsJob(text: String) +final case class StatsResult(meanWordLength: Double) +final case class JobFailed(reason: String) //#messages diff --git a/akka-samples/akka-sample-cluster-scala/src/main/scala/sample/cluster/transformation/TransformationMessages.scala b/akka-samples/akka-sample-cluster-scala/src/main/scala/sample/cluster/transformation/TransformationMessages.scala index 0d4ac7c02a..2ebf20f7a3 100644 --- a/akka-samples/akka-sample-cluster-scala/src/main/scala/sample/cluster/transformation/TransformationMessages.scala +++ b/akka-samples/akka-sample-cluster-scala/src/main/scala/sample/cluster/transformation/TransformationMessages.scala @@ -1,8 +1,8 @@ package sample.cluster.transformation //#messages -case class TransformationJob(text: String) -case class TransformationResult(text: String) -case class JobFailed(reason: String, job: TransformationJob) +final case class TransformationJob(text: String) +final case class TransformationResult(text: String) +final case class JobFailed(reason: String, job: TransformationJob) case object BackendRegistration //#messages diff --git a/akka-samples/akka-sample-fsm-scala/src/main/scala/sample/become/DiningHakkersOnBecome.scala b/akka-samples/akka-sample-fsm-scala/src/main/scala/sample/become/DiningHakkersOnBecome.scala index e9c3cdc17c..558c1df637 100644 --- a/akka-samples/akka-sample-fsm-scala/src/main/scala/sample/become/DiningHakkersOnBecome.scala +++ b/akka-samples/akka-sample-fsm-scala/src/main/scala/sample/become/DiningHakkersOnBecome.scala @@ -10,10 +10,10 @@ import scala.concurrent.duration._ * First we define our messages, they basically speak for themselves */ sealed trait DiningHakkerMessage -case class Busy(chopstick: ActorRef) extends DiningHakkerMessage -case class Put(hakker: ActorRef) extends DiningHakkerMessage -case class Take(hakker: ActorRef) extends DiningHakkerMessage -case class Taken(chopstick: ActorRef) extends DiningHakkerMessage +final case class Busy(chopstick: ActorRef) extends DiningHakkerMessage +final case class Put(hakker: ActorRef) extends DiningHakkerMessage +final case class Take(hakker: ActorRef) extends DiningHakkerMessage +final case class Taken(chopstick: ActorRef) extends DiningHakkerMessage object Eat extends DiningHakkerMessage object Think extends DiningHakkerMessage diff --git a/akka-samples/akka-sample-fsm-scala/src/main/scala/sample/fsm/DiningHakkersOnFsm.scala b/akka-samples/akka-sample-fsm-scala/src/main/scala/sample/fsm/DiningHakkersOnFsm.scala index 2f0e1b171e..9f93c5b836 100644 --- a/akka-samples/akka-sample-fsm-scala/src/main/scala/sample/fsm/DiningHakkersOnFsm.scala +++ b/akka-samples/akka-sample-fsm-scala/src/main/scala/sample/fsm/DiningHakkersOnFsm.scala @@ -13,8 +13,8 @@ import scala.concurrent.duration._ sealed trait ChopstickMessage object Take extends ChopstickMessage object Put extends ChopstickMessage -case class Taken(chopstick: ActorRef) extends ChopstickMessage -case class Busy(chopstick: ActorRef) extends ChopstickMessage +final case class Taken(chopstick: ActorRef) extends ChopstickMessage +final case class Busy(chopstick: ActorRef) extends ChopstickMessage /** * Some states the chopstick can be in @@ -26,7 +26,7 @@ case object Taken extends ChopstickState /** * Some state container for the chopstick */ -case class TakenBy(hakker: ActorRef) +final case class TakenBy(hakker: ActorRef) /* * A chopstick is an actor, it can be taken, and put back @@ -77,7 +77,7 @@ case object Eating extends FSMHakkerState /** * Some state container to keep track of which chopsticks we have */ -case class TakenChopsticks(left: Option[ActorRef], right: Option[ActorRef]) +final case class TakenChopsticks(left: Option[ActorRef], right: Option[ActorRef]) /* * A fsm hakker is an awesome dude or dudette who either thinks about hacking or has to eat ;-) diff --git a/akka-samples/akka-sample-osgi-dining-hakkers/api/src/main/scala/akka/sample/osgi/api/DiningHakkersMessages.scala b/akka-samples/akka-sample-osgi-dining-hakkers/api/src/main/scala/akka/sample/osgi/api/DiningHakkersMessages.scala index 0a6a03b929..a7d008f3a8 100644 --- a/akka-samples/akka-sample-osgi-dining-hakkers/api/src/main/scala/akka/sample/osgi/api/DiningHakkersMessages.scala +++ b/akka-samples/akka-sample-osgi-dining-hakkers/api/src/main/scala/akka/sample/osgi/api/DiningHakkersMessages.scala @@ -7,13 +7,13 @@ import akka.actor.ActorRef */ sealed trait DiningHakkerMessage extends Serializable -case class Busy(chopstick: ActorRef) extends DiningHakkerMessage +final case class Busy(chopstick: ActorRef) extends DiningHakkerMessage -case class Put(hakker: ActorRef) extends DiningHakkerMessage +final case class Put(hakker: ActorRef) extends DiningHakkerMessage -case class Take(hakker: ActorRef) extends DiningHakkerMessage +final case class Take(hakker: ActorRef) extends DiningHakkerMessage -case class Taken(chopstick: ActorRef) extends DiningHakkerMessage +final case class Taken(chopstick: ActorRef) extends DiningHakkerMessage case object Eat extends DiningHakkerMessage @@ -21,14 +21,14 @@ case object Think extends DiningHakkerMessage case object Identify extends DiningHakkerMessage -case class Identification(name: String, busyWith: String) extends DiningHakkerMessage +final case class Identification(name: String, busyWith: String) extends DiningHakkerMessage case object SubscribeToHakkerStateChanges extends DiningHakkerMessage -case class HakkerStateChange(hakkerName: String, from: String, to: String) +final case class HakkerStateChange(hakkerName: String, from: String, to: String) -case class TrackHakker(hakker: ActorRef) extends DiningHakkerMessage +final case class TrackHakker(hakker: ActorRef) extends DiningHakkerMessage -case class GetEatingCount(hakkerName: String) extends DiningHakkerMessage +final case class GetEatingCount(hakkerName: String) extends DiningHakkerMessage -case class EatingCount(hakkerName: String, count: Int) extends DiningHakkerMessage +final case class EatingCount(hakkerName: String, count: Int) extends DiningHakkerMessage diff --git a/akka-samples/akka-sample-osgi-dining-hakkers/core/src/main/scala/akka/sample/osgi/internal/HakkerTracker.scala b/akka-samples/akka-sample-osgi-dining-hakkers/core/src/main/scala/akka/sample/osgi/internal/HakkerTracker.scala index 205b273409..7c62968b69 100644 --- a/akka-samples/akka-sample-osgi-dining-hakkers/core/src/main/scala/akka/sample/osgi/internal/HakkerTracker.scala +++ b/akka-samples/akka-sample-osgi-dining-hakkers/core/src/main/scala/akka/sample/osgi/internal/HakkerTracker.scala @@ -10,13 +10,13 @@ import akka.sample.osgi.api.TrackHakker object HakkerTracker { sealed trait DomainEvent - case class StartedEating(name: String) extends DomainEvent - case class StoppedEating(name: String) extends DomainEvent + final case class StartedEating(name: String) extends DomainEvent + final case class StoppedEating(name: String) extends DomainEvent object State { val empty: State = new State(Map.empty) } - case class State private (eatingCounts: Map[String, Int]) { + final case class State private (eatingCounts: Map[String, Int]) { def updated(event: DomainEvent): State = event match { case StartedEating(name) => val c = eatingCounts.getOrElse(name, 0) + 1 diff --git a/akka-samples/akka-sample-persistence-scala/src/main/scala/sample/persistence/EventsourcedExample.scala b/akka-samples/akka-sample-persistence-scala/src/main/scala/sample/persistence/EventsourcedExample.scala index 8c6fcc796c..1064deab86 100644 --- a/akka-samples/akka-sample-persistence-scala/src/main/scala/sample/persistence/EventsourcedExample.scala +++ b/akka-samples/akka-sample-persistence-scala/src/main/scala/sample/persistence/EventsourcedExample.scala @@ -4,10 +4,10 @@ package sample.persistence import akka.actor._ import akka.persistence._ -case class Cmd(data: String) -case class Evt(data: String) +final case class Cmd(data: String) +final case class Evt(data: String) -case class ExampleState(events: List[String] = Nil) { +final case class ExampleState(events: List[String] = Nil) { def update(evt: Evt) = copy(evt.data :: events) def size = events.length override def toString: String = events.reverse.toString diff --git a/akka-samples/akka-sample-persistence-scala/src/main/scala/sample/persistence/SnapshotExample.scala b/akka-samples/akka-sample-persistence-scala/src/main/scala/sample/persistence/SnapshotExample.scala index a3d6b08e46..0cdfa22419 100644 --- a/akka-samples/akka-sample-persistence-scala/src/main/scala/sample/persistence/SnapshotExample.scala +++ b/akka-samples/akka-sample-persistence-scala/src/main/scala/sample/persistence/SnapshotExample.scala @@ -4,7 +4,7 @@ import akka.actor._ import akka.persistence._ object SnapshotExample extends App { - case class ExampleState(received: List[String] = Nil) { + final case class ExampleState(received: List[String] = Nil) { def update(s: String) = copy(s :: received) override def toString = received.reverse.toString } diff --git a/akka-samples/akka-sample-remote-scala/src/main/scala/sample/remote/calculator/MathOp.scala b/akka-samples/akka-sample-remote-scala/src/main/scala/sample/remote/calculator/MathOp.scala index 85d413723f..aaf02818cc 100644 --- a/akka-samples/akka-sample-remote-scala/src/main/scala/sample/remote/calculator/MathOp.scala +++ b/akka-samples/akka-sample-remote-scala/src/main/scala/sample/remote/calculator/MathOp.scala @@ -2,21 +2,21 @@ package sample.remote.calculator trait MathOp -case class Add(nbr1: Int, nbr2: Int) extends MathOp +final case class Add(nbr1: Int, nbr2: Int) extends MathOp -case class Subtract(nbr1: Int, nbr2: Int) extends MathOp +final case class Subtract(nbr1: Int, nbr2: Int) extends MathOp -case class Multiply(nbr1: Int, nbr2: Int) extends MathOp +final case class Multiply(nbr1: Int, nbr2: Int) extends MathOp -case class Divide(nbr1: Double, nbr2: Int) extends MathOp +final case class Divide(nbr1: Double, nbr2: Int) extends MathOp trait MathResult -case class AddResult(nbr: Int, nbr2: Int, result: Int) extends MathResult +final case class AddResult(nbr: Int, nbr2: Int, result: Int) extends MathResult -case class SubtractResult(nbr1: Int, nbr2: Int, result: Int) extends MathResult +final case class SubtractResult(nbr1: Int, nbr2: Int, result: Int) extends MathResult -case class MultiplicationResult(nbr1: Int, nbr2: Int, result: Int) extends MathResult +final case class MultiplicationResult(nbr1: Int, nbr2: Int, result: Int) extends MathResult -case class DivisionResult(nbr1: Double, nbr2: Int, result: Double) extends MathResult +final case class DivisionResult(nbr1: Double, nbr2: Int, result: Double) extends MathResult diff --git a/akka-testkit/src/main/scala/akka/testkit/TestEventListener.scala b/akka-testkit/src/main/scala/akka/testkit/TestEventListener.scala index 5a42241570..e7e8b57d68 100644 --- a/akka-testkit/src/main/scala/akka/testkit/TestEventListener.scala +++ b/akka-testkit/src/main/scala/akka/testkit/TestEventListener.scala @@ -41,7 +41,7 @@ object TestEvent { object Mute { def apply(filter: EventFilter, filters: EventFilter*): Mute = new Mute(filter +: filters.to[immutable.Seq]) } - case class Mute(filters: immutable.Seq[EventFilter]) extends TestEvent with NoSerializationVerificationNeeded { + final case class Mute(filters: immutable.Seq[EventFilter]) extends TestEvent with NoSerializationVerificationNeeded { /** * Java API: create a Mute command from a list of filters */ @@ -50,7 +50,7 @@ object TestEvent { object UnMute { def apply(filter: EventFilter, filters: EventFilter*): UnMute = new UnMute(filter +: filters.to[immutable.Seq]) } - case class UnMute(filters: immutable.Seq[EventFilter]) extends TestEvent with NoSerializationVerificationNeeded { + final case class UnMute(filters: immutable.Seq[EventFilter]) extends TestEvent with NoSerializationVerificationNeeded { /** * Java API: create an UnMute command from a list of filters */ @@ -261,7 +261,7 @@ object EventFilter { * * If you want to match all Error events, the most efficient is to use Left(""). */ -case class ErrorFilter( +final case class ErrorFilter( throwable: Class[_], override val source: Option[String], override val message: Either[String, Regex], @@ -313,7 +313,7 @@ case class ErrorFilter( * * If you want to match all Warning events, the most efficient is to use Left(""). */ -case class WarningFilter( +final case class WarningFilter( override val source: Option[String], override val message: Either[String, Regex], override val complete: Boolean)(occurrences: Int) extends EventFilter(occurrences) { @@ -356,7 +356,7 @@ case class WarningFilter( * * If you want to match all Info events, the most efficient is to use Left(""). */ -case class InfoFilter( +final case class InfoFilter( override val source: Option[String], override val message: Either[String, Regex], override val complete: Boolean)(occurrences: Int) extends EventFilter(occurrences) { @@ -399,7 +399,7 @@ case class InfoFilter( * * If you want to match all Debug events, the most efficient is to use Left(""). */ -case class DebugFilter( +final case class DebugFilter( override val source: Option[String], override val message: Either[String, Regex], override val complete: Boolean)(occurrences: Int) extends EventFilter(occurrences) { @@ -439,7 +439,7 @@ case class DebugFilter( * * If the partial function is defined and returns true, filter the event. */ -case class CustomEventFilter(test: PartialFunction[LogEvent, Boolean])(occurrences: Int) extends EventFilter(occurrences) { +final case class CustomEventFilter(test: PartialFunction[LogEvent, Boolean])(occurrences: Int) extends EventFilter(occurrences) { def matches(event: LogEvent) = { test.isDefinedAt(event) && test(event) } @@ -453,7 +453,7 @@ object DeadLettersFilter { * Filter which matches DeadLetter events, if the wrapped message conforms to the * given type. */ -case class DeadLettersFilter(val messageClass: Class[_])(occurrences: Int) extends EventFilter(occurrences) { +final case class DeadLettersFilter(val messageClass: Class[_])(occurrences: Int) extends EventFilter(occurrences) { def matches(event: LogEvent) = { event match { diff --git a/akka-testkit/src/main/scala/akka/testkit/TestKit.scala b/akka-testkit/src/main/scala/akka/testkit/TestKit.scala index 6bc53c432a..acb0966c9c 100644 --- a/akka-testkit/src/main/scala/akka/testkit/TestKit.scala +++ b/akka-testkit/src/main/scala/akka/testkit/TestKit.scala @@ -37,16 +37,16 @@ object TestActor { def run(sender: ActorRef, msg: Any): AutoPilot = sys.error("must not call") } - case class SetIgnore(i: Ignore) extends NoSerializationVerificationNeeded - case class Watch(ref: ActorRef) extends NoSerializationVerificationNeeded - case class UnWatch(ref: ActorRef) extends NoSerializationVerificationNeeded - case class SetAutoPilot(ap: AutoPilot) extends NoSerializationVerificationNeeded + final case class SetIgnore(i: Ignore) extends NoSerializationVerificationNeeded + final case class Watch(ref: ActorRef) extends NoSerializationVerificationNeeded + final case class UnWatch(ref: ActorRef) extends NoSerializationVerificationNeeded + final case class SetAutoPilot(ap: AutoPilot) extends NoSerializationVerificationNeeded trait Message { def msg: AnyRef def sender: ActorRef } - case class RealMessage(msg: AnyRef, sender: ActorRef) extends Message + final case class RealMessage(msg: AnyRef, sender: ActorRef) extends Message case object NullMessage extends Message { override def msg: AnyRef = throw new IllegalActorStateException("last receive did not dequeue a message") override def sender: ActorRef = throw new IllegalActorStateException("last receive did not dequeue a message") diff --git a/akka-testkit/src/test/scala/akka/testkit/CoronerSpec.scala b/akka-testkit/src/test/scala/akka/testkit/CoronerSpec.scala index 728dfa44e1..23c6dca7cd 100644 --- a/akka-testkit/src/test/scala/akka/testkit/CoronerSpec.scala +++ b/akka-testkit/src/test/scala/akka/testkit/CoronerSpec.scala @@ -63,7 +63,7 @@ class CoronerSpec extends WordSpec with Matchers { // that the other wants to synchronize on. BOOM! Deadlock. Generate a // report, then clean up and check the report contents. - case class LockingThread(name: String, thread: Thread, ready: Semaphore, proceed: Semaphore) + final case class LockingThread(name: String, thread: Thread, ready: Semaphore, proceed: Semaphore) def lockingThread(name: String, initialLocks: List[ReentrantLock]): LockingThread = { val ready = new Semaphore(0) diff --git a/akka-testkit/src/test/scala/akka/testkit/TestActorRefSpec.scala b/akka-testkit/src/test/scala/akka/testkit/TestActorRefSpec.scala index 5188a804d4..c88031530a 100644 --- a/akka-testkit/src/test/scala/akka/testkit/TestActorRefSpec.scala +++ b/akka-testkit/src/test/scala/akka/testkit/TestActorRefSpec.scala @@ -100,7 +100,7 @@ object TestActorRefSpec { * Forwarding `Terminated` to non-watching testActor is not possible, * and therefore the `Terminated` message is wrapped. */ - case class WrappedTerminated(t: Terminated) + final case class WrappedTerminated(t: Terminated) } diff --git a/akka-transactor/src/main/scala/akka/transactor/Transactor.scala b/akka-transactor/src/main/scala/akka/transactor/Transactor.scala index 6871746b94..c7ed6fb066 100644 --- a/akka-transactor/src/main/scala/akka/transactor/Transactor.scala +++ b/akka-transactor/src/main/scala/akka/transactor/Transactor.scala @@ -13,7 +13,7 @@ import scala.concurrent.stm.InTxn * Used for specifying actor refs and messages to send to during coordination. */ @deprecated("akka.transactor will be removed", "2.3") -case class SendTo(actor: ActorRef, message: Option[Any] = None) +final case class SendTo(actor: ActorRef, message: Option[Any] = None) /** * An actor with built-in support for coordinated transactions. diff --git a/akka-transactor/src/test/scala/akka/transactor/CoordinatedIncrementSpec.scala b/akka-transactor/src/test/scala/akka/transactor/CoordinatedIncrementSpec.scala index 3ee3355f51..e59119c0f3 100644 --- a/akka-transactor/src/test/scala/akka/transactor/CoordinatedIncrementSpec.scala +++ b/akka-transactor/src/test/scala/akka/transactor/CoordinatedIncrementSpec.scala @@ -31,7 +31,7 @@ object CoordinatedIncrement { } """ - case class Increment(friends: immutable.Seq[ActorRef]) + final case class Increment(friends: immutable.Seq[ActorRef]) case object GetCount class Counter(name: String) extends Actor { diff --git a/akka-transactor/src/test/scala/akka/transactor/FickleFriendsSpec.scala b/akka-transactor/src/test/scala/akka/transactor/FickleFriendsSpec.scala index 59a6522eff..da6c7828ff 100644 --- a/akka-transactor/src/test/scala/akka/transactor/FickleFriendsSpec.scala +++ b/akka-transactor/src/test/scala/akka/transactor/FickleFriendsSpec.scala @@ -22,8 +22,8 @@ import akka.pattern.{ AskTimeoutException, ask } import akka.util.Timeout object FickleFriends { - case class FriendlyIncrement(friends: immutable.Seq[ActorRef], timeout: Timeout, latch: CountDownLatch) - case class Increment(friends: immutable.Seq[ActorRef]) + final case class FriendlyIncrement(friends: immutable.Seq[ActorRef], timeout: Timeout, latch: CountDownLatch) + final case class Increment(friends: immutable.Seq[ActorRef]) case object GetCount /** diff --git a/akka-transactor/src/test/scala/akka/transactor/TransactorSpec.scala b/akka-transactor/src/test/scala/akka/transactor/TransactorSpec.scala index 7884440d66..38d0278a95 100644 --- a/akka-transactor/src/test/scala/akka/transactor/TransactorSpec.scala +++ b/akka-transactor/src/test/scala/akka/transactor/TransactorSpec.scala @@ -16,7 +16,7 @@ import akka.testkit._ import akka.pattern.{ AskTimeoutException, ask } object TransactorIncrement { - case class Increment(friends: immutable.Seq[ActorRef], latch: TestLatch) + final case class Increment(friends: immutable.Seq[ActorRef], latch: TestLatch) case object GetCount class Counter(name: String) extends Transactor { @@ -63,7 +63,7 @@ object TransactorIncrement { } object SimpleTransactor { - case class Set(ref: Ref[Int], value: Int, latch: TestLatch) + final case class Set(ref: Ref[Int], value: Int, latch: TestLatch) class Setter extends Transactor { def atomically = implicit txn ⇒ { diff --git a/akka-zeromq/src/main/scala/akka/zeromq/SocketOption.scala b/akka-zeromq/src/main/scala/akka/zeromq/SocketOption.scala index 991e27ab7f..6e4cdcaa66 100644 --- a/akka-zeromq/src/main/scala/akka/zeromq/SocketOption.scala +++ b/akka-zeromq/src/main/scala/akka/zeromq/SocketOption.scala @@ -54,7 +54,7 @@ sealed trait SocketOptionQuery extends Request * * @param endpoint URI (ex. tcp://127.0.0.1:5432) */ -case class Connect(endpoint: String) extends SocketConnectOption +final case class Connect(endpoint: String) extends SocketConnectOption /** * Companion object for a ZeroMQ I/O thread pool @@ -144,26 +144,26 @@ object SocketType { * An option containing the listener for the socket * @param listener */ -case class Listener(listener: ActorRef) extends SocketMeta +final case class Listener(listener: ActorRef) extends SocketMeta /** * An option containing the configuration key for the poller loop dispatcher * @param name */ -case class PollDispatcher(name: String) extends SocketMeta +final case class PollDispatcher(name: String) extends SocketMeta /** * An option containing the duration a poll cycle should wait for a message before it loops * @param duration */ -case class PollTimeoutDuration(duration: FiniteDuration = 100 millis) extends SocketMeta +final case class PollTimeoutDuration(duration: FiniteDuration = 100 millis) extends SocketMeta /** * Start listening with this server socket on the specified address * * @param endpoint */ -case class Bind(endpoint: String) extends SocketConnectOption +final case class Bind(endpoint: String) extends SocketConnectOption /** * The [[akka.zeromq.Subscribe]] option establishes a new message filter on a [[akka.zeromq.SocketType.Pub]] socket. @@ -177,7 +177,7 @@ case class Bind(endpoint: String) extends SocketConnectOption * * @param payload the topic to subscribe to */ -case class Subscribe(payload: ByteString) extends PubSubOption { +final case class Subscribe(payload: ByteString) extends PubSubOption { def this(topic: String) = this(ByteString(topic)) } object Subscribe { @@ -197,7 +197,7 @@ object Subscribe { * * @param payload */ -case class Unsubscribe(payload: ByteString) extends PubSubOption { +final case class Unsubscribe(payload: ByteString) extends PubSubOption { def this(topic: String) = this(ByteString(topic)) } object Unsubscribe { @@ -208,13 +208,13 @@ object Unsubscribe { * Send a message over the zeromq socket * @param frames */ -case class Send(frames: immutable.Seq[ByteString]) extends Request +final case class Send(frames: immutable.Seq[ByteString]) extends Request /** * A message received over the zeromq socket * @param frames */ -case class ZMQMessage(frames: immutable.Seq[ByteString]) { +final case class ZMQMessage(frames: immutable.Seq[ByteString]) { def frame(frameIndex: Int): ByteString = frames(frameIndex) } object ZMQMessage { @@ -260,7 +260,7 @@ object ZMQMessage { * * @param value The value in milliseconds for the linger option */ -case class Linger(value: Long) extends SocketOption +final case class Linger(value: Long) extends SocketOption /** * Gets the linger option @see [[akka.zeromq.Linger]] @@ -279,7 +279,7 @@ object Linger extends SocketOptionQuery { * * @param value The interval in seconds */ -case class ReconnectIVL(value: Long) extends SocketOption +final case class ReconnectIVL(value: Long) extends SocketOption /** * Gets the recover interval @see [[akka.zeromq.ReconnectIVL]] @@ -299,7 +299,7 @@ object ReconnectIVL extends SocketOptionQuery * * @param value */ -case class ReconnectIVLMax(value: Long) extends SocketOption +final case class ReconnectIVLMax(value: Long) extends SocketOption /** * Gets the max reconnect IVL * @see [[akka.zeromq.ReconnectIVLMax]] @@ -313,7 +313,7 @@ object ReconnectIVLMax extends SocketOptionQuery * * @param value */ -case class Backlog(value: Long) extends SocketOption +final case class Backlog(value: Long) extends SocketOption /** * Gets the backlog * @see [[akka.zeromq.Backlog]] @@ -329,7 +329,7 @@ object Backlog extends SocketOptionQuery * * @param value */ -case class MaxMsgSize(value: Long) extends SocketOption +final case class MaxMsgSize(value: Long) extends SocketOption object MaxMsgSize extends SocketOptionQuery /** @@ -344,7 +344,7 @@ object MaxMsgSize extends SocketOptionQuery * * @param value */ -case class SendHighWatermark(value: Long) extends SocketOption +final case class SendHighWatermark(value: Long) extends SocketOption /** * Gets the SendHWM @@ -364,7 +364,7 @@ object SendHighWatermark extends SocketOptionQuery * * @param value */ -case class ReceiveHighWatermark(value: Long) extends SocketOption +final case class ReceiveHighWatermark(value: Long) extends SocketOption /** * Gets the ReceiveHighWatermark @@ -383,7 +383,7 @@ object ReceiveHighWatermark extends SocketOptionQuery * * @param value */ -case class HighWatermark(value: Long) extends SocketOption +final case class HighWatermark(value: Long) extends SocketOption /** * The [[akka.zeromq.Swap]] option shall set the disk offload (swap) size for the specified socket. @@ -394,7 +394,7 @@ case class HighWatermark(value: Long) extends SocketOption * * @param value */ -case class Swap(value: Long) extends SocketOption +final case class Swap(value: Long) extends SocketOption /** * Gets the [[akka.zeromq.Swap]] @@ -414,7 +414,7 @@ object Swap extends SocketOptionQuery * * @param value */ -case class Affinity(value: Long) extends SocketOption +final case class Affinity(value: Long) extends SocketOption /** * Gets the [[akka.zeromq.Affinity]] value @@ -436,7 +436,7 @@ object Affinity extends SocketOptionQuery * * @param value The identity string for this socket */ -case class Identity(value: Array[Byte]) extends SocketOption +final case class Identity(value: Array[Byte]) extends SocketOption /** * Gets the [[akka.zeromq.Identity]] value @@ -448,7 +448,7 @@ object Identity extends SocketOptionQuery * * @param value The kilobits per second */ -case class Rate(value: Long) extends SocketOption +final case class Rate(value: Long) extends SocketOption /** * Gets the send or receive rate for the socket @@ -465,7 +465,7 @@ object Rate extends SocketOptionQuery * * @param value The interval in seconds */ -case class RecoveryInterval(value: Long) extends SocketOption +final case class RecoveryInterval(value: Long) extends SocketOption /** * Gets the [[akka.zeromq.RecoveryInterval]] @@ -480,7 +480,7 @@ object RecoveryInterval extends SocketOptionQuery * * @param value Flag indicating whether or not loopback multicast is enabled */ -case class MulticastLoop(value: Boolean) extends SocketOption +final case class MulticastLoop(value: Boolean) extends SocketOption /** * Gets the [[akka.zeromq.MulticastLoop]] @@ -495,7 +495,7 @@ object MulticastLoop extends SocketOptionQuery * * @param value */ -case class MulticastHops(value: Long) extends SocketOption +final case class MulticastHops(value: Long) extends SocketOption /** * Gets the [[akka.zeromq.MulticastHops]] @@ -511,7 +511,7 @@ object MulticastHops extends SocketOptionQuery * * @param value */ -case class SendBufferSize(value: Long) extends SocketOption +final case class SendBufferSize(value: Long) extends SocketOption /** * Gets the [[akka.zeromq.SendBufferSize]] @@ -524,7 +524,7 @@ object SendBufferSize extends SocketOptionQuery * For details refer to your operating system documentation for the SO_RCVBUF socket option. * @param value */ -case class ReceiveBufferSize(value: Long) extends SocketOption +final case class ReceiveBufferSize(value: Long) extends SocketOption /** * Gets the [[akka.zeromq.ReceiveBufferSize]] diff --git a/akka-zeromq/src/main/scala/akka/zeromq/ZeroMQExtension.scala b/akka-zeromq/src/main/scala/akka/zeromq/ZeroMQExtension.scala index 3e5c8d8dd8..a37797adfb 100644 --- a/akka-zeromq/src/main/scala/akka/zeromq/ZeroMQExtension.scala +++ b/akka-zeromq/src/main/scala/akka/zeromq/ZeroMQExtension.scala @@ -22,7 +22,7 @@ import akka.dispatch.{ UnboundedMessageQueueSemantics, RequiresMessageQueue } * @param minor * @param patch */ -case class ZeroMQVersion(major: Int, minor: Int, patch: Int) { +final case class ZeroMQVersion(major: Int, minor: Int, patch: Int) { override def toString: String = "%d.%d.%d".format(major, minor, patch) }