diff options
author | Lukas Rytz <lukas.rytz@epfl.ch> | 2010-11-30 15:38:56 +0000 |
---|---|---|
committer | Lukas Rytz <lukas.rytz@epfl.ch> | 2010-11-30 15:38:56 +0000 |
commit | 4be5e11cccace4974ed9a449052455392570139f (patch) | |
tree | 88c86bc65b88df08b48584ed791acd1619983c0c /src/actors | |
parent | 402d96dd3fab6ae677966a9a258c00b3f34a37ed (diff) | |
download | scala-4be5e11cccace4974ed9a449052455392570139f.tar.gz scala-4be5e11cccace4974ed9a449052455392570139f.tar.bz2 scala-4be5e11cccace4974ed9a449052455392570139f.zip |
Deprecated the @serializable annotation, introd...
Deprecated the @serializable annotation, introduce a new trait
"scala.Serializable" which has to be extended instead (cross-platform).
Known issues:
- Companion objects of serializable classes (including case classes) are automatically made serializable. However, they don't extend "Serializable" statically because of the known difficulty (should be done before typing, but hard).
- Writing "case class C() extends Serializable" gives "error: trait Serializable is inherited twice"
- Functions are serializable, but don't extend Serializable dynamically (could be fixed by making FunctionN Serializable - shouldn't we?)
Note that @SerialVersionUID continues to be an annotation; it generates
a static field, which is not possible otherwise in scala.
Review by dragos, extempore.
Question to dragos: in JavaPlatform.isMaybeBoxed, why is there a test
for "JavaSerializableClass"? Is that correct?
Diffstat (limited to 'src/actors')
-rw-r--r-- | src/actors/scala/actors/Actor.scala | 4 | ||||
-rw-r--r-- | src/actors/scala/actors/MessageQueue.scala | 8 | ||||
-rw-r--r-- | src/actors/scala/actors/remote/Proxy.scala | 12 |
3 files changed, 10 insertions, 14 deletions
diff --git a/src/actors/scala/actors/Actor.scala b/src/actors/scala/actors/Actor.scala index d92dab9b17..77b55e288c 100644 --- a/src/actors/scala/actors/Actor.scala +++ b/src/actors/scala/actors/Actor.scala @@ -417,8 +417,8 @@ object Actor extends Combinators { * @define actor actor * @define channel actor's mailbox */ -@serializable @SerialVersionUID(-781154067877019505L) -trait Actor extends AbstractActor with ReplyReactor with ActorCanReply with InputChannel[Any] { +@SerialVersionUID(-781154067877019505L) +trait Actor extends AbstractActor with ReplyReactor with ActorCanReply with InputChannel[Any] with Serializable { /* The following two fields are only used when the actor * suspends by blocking its underlying thread, for example, diff --git a/src/actors/scala/actors/MessageQueue.scala b/src/actors/scala/actors/MessageQueue.scala index 6936bf63a8..73537c661a 100644 --- a/src/actors/scala/actors/MessageQueue.scala +++ b/src/actors/scala/actors/MessageQueue.scala @@ -15,9 +15,9 @@ package scala.actors * * @author Philipp Haller */ -@serializable @SerialVersionUID(7124278808020037465L) +@SerialVersionUID(7124278808020037465L) @deprecated("this class is going to be removed in a future release") -class MessageQueueElement(msg: Any, session: OutputChannel[Any], next: MessageQueueElement) extends MQueueElement[Any](msg, session, next) { +class MessageQueueElement(msg: Any, session: OutputChannel[Any], next: MessageQueueElement) extends MQueueElement[Any](msg, session, next) with Serializable { def this() = this(null, null, null) def this(msg: Any, session: OutputChannel[Any]) = this(msg, session, null) } @@ -35,9 +35,9 @@ private[actors] class MQueueElement[Msg >: Null](val msg: Msg, val session: Outp * * @author Philipp Haller */ -@serializable @SerialVersionUID(2168935872884095767L) +@SerialVersionUID(2168935872884095767L) @deprecated("this class is going to be removed in a future release") -class MessageQueue(label: String) extends MQueue[Any](label) +class MessageQueue(label: String) extends MQueue[Any](label) with Serializable private[actors] class MQueue[Msg >: Null](protected val label: String) { protected var first: MQueueElement[Msg] = null diff --git a/src/actors/scala/actors/remote/Proxy.scala b/src/actors/scala/actors/remote/Proxy.scala index 625ce8bb0b..8df723adee 100644 --- a/src/actors/scala/actors/remote/Proxy.scala +++ b/src/actors/scala/actors/remote/Proxy.scala @@ -15,8 +15,7 @@ import scala.collection.mutable.HashMap /** * @author Philipp Haller */ -@serializable -private[remote] class Proxy(node: Node, name: Symbol, @transient var kernel: NetKernel) extends AbstractActor { +private[remote] class Proxy(node: Node, name: Symbol, @transient var kernel: NetKernel) extends AbstractActor with Serializable { import java.io.{IOException, ObjectOutputStream, ObjectInputStream} @transient @@ -82,8 +81,7 @@ private[remote] class Proxy(node: Node, name: Symbol, @transient var kernel: Net name+"@"+node } -@serializable -class LinkToFun extends Function2[AbstractActor, Proxy, Unit] { +class LinkToFun extends Function2[AbstractActor, Proxy, Unit] with Serializable { def apply(target: AbstractActor, creator: Proxy) { target.linkTo(creator) } @@ -91,8 +89,7 @@ class LinkToFun extends Function2[AbstractActor, Proxy, Unit] { "<LinkToFun>" } -@serializable -class UnlinkFromFun extends Function2[AbstractActor, Proxy, Unit] { +class UnlinkFromFun extends Function2[AbstractActor, Proxy, Unit] with Serializable { def apply(target: AbstractActor, creator: Proxy) { target.unlinkFrom(creator) } @@ -100,8 +97,7 @@ class UnlinkFromFun extends Function2[AbstractActor, Proxy, Unit] { "<UnlinkFromFun>" } -@serializable -class ExitFun(reason: AnyRef) extends Function2[AbstractActor, Proxy, Unit] { +class ExitFun(reason: AnyRef) extends Function2[AbstractActor, Proxy, Unit] with Serializable { def apply(target: AbstractActor, creator: Proxy) { target.exit(creator, reason) } |