diff --git a/build.sbt b/build.sbt index 849dc07f..0bec6d64 100644 --- a/build.sbt +++ b/build.sbt @@ -5,7 +5,7 @@ import com.typesafe.tools.mima.plugin.MimaPlugin.mimaDefaultSettings import scala.collection.JavaConverters._ import scalariform.formatter.preferences._ -val kryoVersion = "3.0.3" +val kryoVersion = "4.0.0" val bijectionVersion = "0.9.0" val algebirdVersion = "0.12.0" diff --git a/chill-scala/src/main/scala/com/twitter/chill/ClassTagSerializer.scala b/chill-scala/src/main/scala/com/twitter/chill/ClassTagSerializer.scala new file mode 100644 index 00000000..600f976c --- /dev/null +++ b/chill-scala/src/main/scala/com/twitter/chill/ClassTagSerializer.scala @@ -0,0 +1,31 @@ +/* +Copyright 2012 Twitter, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package com.twitter.chill + +import scala.reflect.ClassTag + +class ClassTagSerializer[T] extends KSerializer[ClassTag[T]] { + + def write(kser: Kryo, out: Output, obj: ClassTag[T]) { + kser.writeObject(out, obj.runtimeClass) + } + + def read(kser: Kryo, in: Input, cls: Class[ClassTag[T]]): ClassTag[T] = { + val clazz = kser.readObject(in, classOf[Class[T]]) + ClassTag(clazz) + } +} diff --git a/chill-scala/src/main/scala/com/twitter/chill/ManifestSerializer.scala b/chill-scala/src/main/scala/com/twitter/chill/ManifestSerializer.scala index 2d061e8a..4f1e3f34 100644 --- a/chill-scala/src/main/scala/com/twitter/chill/ManifestSerializer.scala +++ b/chill-scala/src/main/scala/com/twitter/chill/ManifestSerializer.scala @@ -32,7 +32,7 @@ class ManifestSerializer[T] extends KSerializer[Manifest[T]] { out.writeInt(idxOpt.get + 1, true) } else { out.writeInt(0, true) - kser.writeObject(out, obj.erasure) + kser.writeObject(out, obj.runtimeClass) //write the type arguments: val targs = obj.typeArguments out.writeInt(targs.size, true) diff --git a/chill-scala/src/main/scala/com/twitter/chill/ScalaKryoInstantiator.scala b/chill-scala/src/main/scala/com/twitter/chill/ScalaKryoInstantiator.scala index dbbc7818..fd0c4638 100644 --- a/chill-scala/src/main/scala/com/twitter/chill/ScalaKryoInstantiator.scala +++ b/chill-scala/src/main/scala/com/twitter/chill/ScalaKryoInstantiator.scala @@ -47,6 +47,7 @@ import com.twitter.chill.java.PackageRegistrar import _root_.java.io.Serializable import scala.collection.JavaConverters._ +import scala.reflect.ClassTag /** * This class has a no-arg constructor, suitable for use with reflection instantiation @@ -193,7 +194,7 @@ class AllScalaRegistrar extends IKryoRegistrar { def read(k: Kryo, in: Input, cls: Class[Symbol]) = Symbol(in.readString) }) .forSubclass[Regex](new RegexSerializer) - .forClass[ClassManifest[Any]](new ClassManifestSerializer[Any]) + .forClass[ClassTag[Any]](new ClassTagSerializer[Any]) .forSubclass[Manifest[Any]](new ManifestSerializer[Any]) .forSubclass[scala.Enumeration#Value](new EnumerationSerializer) diff --git a/chill-scala/src/main/scala/com/twitter/chill/WrappedArraySerializer.scala b/chill-scala/src/main/scala/com/twitter/chill/WrappedArraySerializer.scala index 64ea56a2..20a2126b 100644 --- a/chill-scala/src/main/scala/com/twitter/chill/WrappedArraySerializer.scala +++ b/chill-scala/src/main/scala/com/twitter/chill/WrappedArraySerializer.scala @@ -25,7 +25,7 @@ class WrappedArraySerializer[T] extends KSerializer[WrappedArray[T]] { def write(kser: Kryo, out: Output, obj: WrappedArray[T]) { // Write the class-manifest, we don't use writeClass because it // uses the registration system, and this class might not be registered - kser.writeObject(out, obj.elemManifest.runtimeClass) + kser.writeObject(out, obj.elemTag.runtimeClass) kser.writeClassAndObject(out, obj.array) }