summaryrefslogtreecommitdiff
path: root/src/library/scala/reflect/ClassTag.scala
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@gmail.com>2016-07-06 15:44:51 +0200
committerLukas Rytz <lukas.rytz@gmail.com>2016-07-06 15:44:51 +0200
commit78c3bfd2ec49a26604cc2eedb445555efaac14fe (patch)
tree89eb453f4134e5fd13896f0148e5b4a8d645804f /src/library/scala/reflect/ClassTag.scala
parent6612ba010b0e70c53550d1e47141c8dc89a55f23 (diff)
downloadscala-78c3bfd2ec49a26604cc2eedb445555efaac14fe.tar.gz
scala-78c3bfd2ec49a26604cc2eedb445555efaac14fe.tar.bz2
scala-78c3bfd2ec49a26604cc2eedb445555efaac14fe.zip
SI-8561 named subclasses for known Manifest / ClassTag instances
This helps keeping ClassTag serialization stable under accidental changes (like changing the order of definitions, which would change the name of the anonymous classes).
Diffstat (limited to 'src/library/scala/reflect/ClassTag.scala')
-rw-r--r--src/library/scala/reflect/ClassTag.scala4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/library/scala/reflect/ClassTag.scala b/src/library/scala/reflect/ClassTag.scala
index 1811d3a00f..3a300e0593 100644
--- a/src/library/scala/reflect/ClassTag.scala
+++ b/src/library/scala/reflect/ClassTag.scala
@@ -134,6 +134,8 @@ object ClassTag {
val Nothing : ClassTag[scala.Nothing] = Manifest.Nothing
val Null : ClassTag[scala.Null] = Manifest.Null
+ private class GenericClassTag[T](val runtimeClass: jClass[_]) extends ClassTag[T]
+
def apply[T](runtimeClass1: jClass[_]): ClassTag[T] =
runtimeClass1 match {
case java.lang.Byte.TYPE => ClassTag.Byte.asInstanceOf[ClassTag[T]]
@@ -148,7 +150,7 @@ object ClassTag {
case ObjectTYPE => ClassTag.Object.asInstanceOf[ClassTag[T]]
case NothingTYPE => ClassTag.Nothing.asInstanceOf[ClassTag[T]]
case NullTYPE => ClassTag.Null.asInstanceOf[ClassTag[T]]
- case _ => new ClassTag[T]{ def runtimeClass = runtimeClass1 }
+ case _ => new GenericClassTag[T](runtimeClass1)
}
def unapply[T](ctag: ClassTag[T]): Option[Class[_]] = Some(ctag.runtimeClass)