69
73
override def equals(that: Any): Boolean = this eq that.asInstanceOf[AnyRef]
70
override def hashCode = System.identityHashCode(this)
74
override val hashCode = System.identityHashCode(this)
73
/** The object Manifest defines factory methods for manifests.
74
* It is intended for use by the compiler and should not be used
77
/** `ManifestFactory` defines factory methods for manifests.
78
* It is intended for use by the compiler and should not be used in client code.
80
* Unlike `Manifest`, this factory isn't annotated with a deprecation warning.
81
* This is done to prevent avalanches of deprecation warnings in the code that calls methods with manifests.
82
* Why so complicated? Read up the comments for `ClassManifestFactory`.
78
private def ObjectClass = classOf[java.lang.Object]
84
object ManifestFactory {
85
def valueManifests: List[AnyValManifest[_]] =
86
List(Byte, Short, Char, Int, Long, Float, Double, Boolean, Unit)
80
val Byte: AnyValManifest[Byte] = new AnyValManifest[scala.Byte] {
81
def erasure = java.lang.Byte.TYPE
82
override def toString = "Byte"
88
val Byte: AnyValManifest[Byte] = new AnyValManifest[scala.Byte]("Byte") {
89
def runtimeClass = java.lang.Byte.TYPE
83
90
override def newArray(len: Int): Array[Byte] = new Array[Byte](len)
84
91
override def newWrappedArray(len: Int): WrappedArray[Byte] = new WrappedArray.ofByte(new Array[Byte](len))
85
92
override def newArrayBuilder(): ArrayBuilder[Byte] = new ArrayBuilder.ofByte()
86
93
private def readResolve(): Any = Manifest.Byte
89
val Short: AnyValManifest[Short] = new AnyValManifest[scala.Short] {
90
def erasure = java.lang.Short.TYPE
91
override def toString = "Short"
96
val Short: AnyValManifest[Short] = new AnyValManifest[scala.Short]("Short") {
97
def runtimeClass = java.lang.Short.TYPE
92
98
override def newArray(len: Int): Array[Short] = new Array[Short](len)
93
99
override def newWrappedArray(len: Int): WrappedArray[Short] = new WrappedArray.ofShort(new Array[Short](len))
94
100
override def newArrayBuilder(): ArrayBuilder[Short] = new ArrayBuilder.ofShort()
95
101
private def readResolve(): Any = Manifest.Short
98
val Char: AnyValManifest[Char] = new AnyValManifest[scala.Char] {
99
def erasure = java.lang.Character.TYPE
100
override def toString = "Char"
104
val Char: AnyValManifest[Char] = new AnyValManifest[scala.Char]("Char") {
105
def runtimeClass = java.lang.Character.TYPE
101
106
override def newArray(len: Int): Array[Char] = new Array[Char](len)
102
107
override def newWrappedArray(len: Int): WrappedArray[Char] = new WrappedArray.ofChar(new Array[Char](len))
103
108
override def newArrayBuilder(): ArrayBuilder[Char] = new ArrayBuilder.ofChar()
104
109
private def readResolve(): Any = Manifest.Char
107
val Int: AnyValManifest[Int] = new AnyValManifest[scala.Int] {
108
def erasure = java.lang.Integer.TYPE
109
override def toString = "Int"
112
val Int: AnyValManifest[Int] = new AnyValManifest[scala.Int]("Int") {
113
def runtimeClass = java.lang.Integer.TYPE
110
114
override def newArray(len: Int): Array[Int] = new Array[Int](len)
111
115
override def newWrappedArray(len: Int): WrappedArray[Int] = new WrappedArray.ofInt(new Array[Int](len))
112
116
override def newArrayBuilder(): ArrayBuilder[Int] = new ArrayBuilder.ofInt()
113
117
private def readResolve(): Any = Manifest.Int
116
val Long: AnyValManifest[Long] = new AnyValManifest[scala.Long] {
117
def erasure = java.lang.Long.TYPE
118
override def toString = "Long"
120
val Long: AnyValManifest[Long] = new AnyValManifest[scala.Long]("Long") {
121
def runtimeClass = java.lang.Long.TYPE
119
122
override def newArray(len: Int): Array[Long] = new Array[Long](len)
120
123
override def newWrappedArray(len: Int): WrappedArray[Long] = new WrappedArray.ofLong(new Array[Long](len))
121
124
override def newArrayBuilder(): ArrayBuilder[Long] = new ArrayBuilder.ofLong()
122
125
private def readResolve(): Any = Manifest.Long
125
val Float: AnyValManifest[Float] = new AnyValManifest[scala.Float] {
126
def erasure = java.lang.Float.TYPE
127
override def toString = "Float"
128
val Float: AnyValManifest[Float] = new AnyValManifest[scala.Float]("Float") {
129
def runtimeClass = java.lang.Float.TYPE
128
130
override def newArray(len: Int): Array[Float] = new Array[Float](len)
129
131
override def newWrappedArray(len: Int): WrappedArray[Float] = new WrappedArray.ofFloat(new Array[Float](len))
130
132
override def newArrayBuilder(): ArrayBuilder[Float] = new ArrayBuilder.ofFloat()
131
133
private def readResolve(): Any = Manifest.Float
134
val Double: AnyValManifest[Double] = new AnyValManifest[scala.Double] {
135
def erasure = java.lang.Double.TYPE
136
override def toString = "Double"
136
val Double: AnyValManifest[Double] = new AnyValManifest[scala.Double]("Double") {
137
def runtimeClass = java.lang.Double.TYPE
137
138
override def newArray(len: Int): Array[Double] = new Array[Double](len)
138
139
override def newWrappedArray(len: Int): WrappedArray[Double] = new WrappedArray.ofDouble(new Array[Double](len))
139
140
override def newArrayBuilder(): ArrayBuilder[Double] = new ArrayBuilder.ofDouble()
140
141
private def readResolve(): Any = Manifest.Double
143
val Boolean: AnyValManifest[Boolean] = new AnyValManifest[scala.Boolean] {
144
def erasure = java.lang.Boolean.TYPE
145
override def toString = "Boolean"
144
val Boolean: AnyValManifest[Boolean] = new AnyValManifest[scala.Boolean]("Boolean") {
145
def runtimeClass = java.lang.Boolean.TYPE
146
146
override def newArray(len: Int): Array[Boolean] = new Array[Boolean](len)
147
147
override def newWrappedArray(len: Int): WrappedArray[Boolean] = new WrappedArray.ofBoolean(new Array[Boolean](len))
148
148
override def newArrayBuilder(): ArrayBuilder[Boolean] = new ArrayBuilder.ofBoolean()
149
149
private def readResolve(): Any = Manifest.Boolean
152
val Unit: AnyValManifest[Unit] = new AnyValManifest[scala.Unit] {
153
def erasure = java.lang.Void.TYPE
154
override def toString = "Unit"
152
val Unit: AnyValManifest[Unit] = new AnyValManifest[scala.Unit]("Unit") {
153
def runtimeClass = java.lang.Void.TYPE
155
154
override def newArray(len: Int): Array[Unit] = new Array[Unit](len)
156
155
override def newWrappedArray(len: Int): WrappedArray[Unit] = new WrappedArray.ofUnit(new Array[Unit](len))
157
156
override def newArrayBuilder(): ArrayBuilder[Unit] = new ArrayBuilder.ofUnit()
158
157
private def readResolve(): Any = Manifest.Unit
161
val Any: Manifest[Any] = new ClassTypeManifest[scala.Any](None, ObjectClass, Nil) {
162
override def toString = "Any"
160
private val ObjectTYPE = classOf[java.lang.Object]
161
private val NothingTYPE = classOf[scala.runtime.Nothing$]
162
private val NullTYPE = classOf[scala.runtime.Null$]
164
val Any: Manifest[scala.Any] = new PhantomManifest[scala.Any](ObjectTYPE, "Any") {
165
override def newArray(len: Int) = new Array[scala.Any](len)
163
166
override def <:<(that: ClassManifest[_]): Boolean = (that eq this)
164
override def equals(that: Any): Boolean = this eq that.asInstanceOf[AnyRef]
165
override def hashCode = System.identityHashCode(this)
166
167
private def readResolve(): Any = Manifest.Any
169
val Object: Manifest[Object] = new ClassTypeManifest[java.lang.Object](None, ObjectClass, Nil) {
170
override def toString = "Object"
170
val Object: Manifest[java.lang.Object] = new PhantomManifest[java.lang.Object](ObjectTYPE, "Object") {
171
override def newArray(len: Int) = new Array[java.lang.Object](len)
171
172
override def <:<(that: ClassManifest[_]): Boolean = (that eq this) || (that eq Any)
172
override def equals(that: Any): Boolean = this eq that.asInstanceOf[AnyRef]
173
override def hashCode = System.identityHashCode(this)
174
173
private def readResolve(): Any = Manifest.Object
177
val AnyVal: Manifest[AnyVal] = new ClassTypeManifest[scala.AnyVal](None, ObjectClass, Nil) {
178
override def toString = "AnyVal"
176
val AnyRef: Manifest[scala.AnyRef] = Object.asInstanceOf[Manifest[scala.AnyRef]]
178
val AnyVal: Manifest[scala.AnyVal] = new PhantomManifest[scala.AnyVal](ObjectTYPE, "AnyVal") {
179
override def newArray(len: Int) = new Array[scala.AnyVal](len)
179
180
override def <:<(that: ClassManifest[_]): Boolean = (that eq this) || (that eq Any)
180
override def equals(that: Any): Boolean = this eq that.asInstanceOf[AnyRef]
181
override def hashCode = System.identityHashCode(this)
182
181
private def readResolve(): Any = Manifest.AnyVal
185
val Null: Manifest[Null] = new ClassTypeManifest[scala.Null](None, ObjectClass, Nil) {
186
override def toString = "Null"
184
val Null: Manifest[scala.Null] = new PhantomManifest[scala.Null](NullTYPE, "Null") {
185
override def newArray(len: Int) = new Array[scala.Null](len)
187
186
override def <:<(that: ClassManifest[_]): Boolean =
188
187
(that ne null) && (that ne Nothing) && !(that <:< AnyVal)
189
override def equals(that: Any): Boolean = this eq that.asInstanceOf[AnyRef]
190
override def hashCode = System.identityHashCode(this)
191
188
private def readResolve(): Any = Manifest.Null
194
val Nothing: Manifest[Nothing] = new ClassTypeManifest[scala.Nothing](None, ObjectClass, Nil) {
195
override def toString = "Nothing"
191
val Nothing: Manifest[scala.Nothing] = new PhantomManifest[scala.Nothing](NothingTYPE, "Nothing") {
192
override def newArray(len: Int) = new Array[scala.Nothing](len)
196
193
override def <:<(that: ClassManifest[_]): Boolean = (that ne null)
197
override def equals(that: Any): Boolean = this eq that.asInstanceOf[AnyRef]
198
override def hashCode = System.identityHashCode(this)
199
194
private def readResolve(): Any = Manifest.Nothing
202
197
private class SingletonTypeManifest[T <: AnyRef](value: AnyRef) extends Manifest[T] {
203
lazy val erasure = value.getClass
198
lazy val runtimeClass = value.getClass
204
199
override lazy val toString = value.toString + ".type"
207
/** Manifest for the singleton type `value.type'. */
202
/** Manifest for the singleton type `value.type`. */
208
203
def singleType[T <: AnyRef](value: AnyRef): Manifest[T] =
209
204
new SingletonTypeManifest[T](value)
211
/** Manifest for the class type `clazz[args]', where `clazz' is
206
/** Manifest for the class type `clazz[args]`, where `clazz` is
212
207
* a top-level or static class.
213
208
* @note This no-prefix, no-arguments case is separate because we
214
209
* it's called from ScalaRunTime.boxArray itself. If we
218
213
def classType[T](clazz: Predef.Class[_]): Manifest[T] =
219
214
new ClassTypeManifest[T](None, clazz, Nil)
221
/** Manifest for the class type `clazz', where `clazz' is
216
/** Manifest for the class type `clazz`, where `clazz` is
222
217
* a top-level or static class and args are its type arguments. */
223
218
def classType[T](clazz: Predef.Class[T], arg1: Manifest[_], args: Manifest[_]*): Manifest[T] =
224
219
new ClassTypeManifest[T](None, clazz, arg1 :: args.toList)
226
/** Manifest for the class type `clazz[args]', where `clazz' is
221
/** Manifest for the class type `clazz[args]`, where `clazz` is
227
222
* a class with non-package prefix type `prefix` and type arguments `args`.
229
224
def classType[T](prefix: Manifest[_], clazz: Predef.Class[_], args: Manifest[_]*): Manifest[T] =
230
225
new ClassTypeManifest[T](Some(prefix), clazz, args.toList)
232
/** Manifest for the class type `clazz[args]', where `clazz' is
227
private abstract class PhantomManifest[T](_runtimeClass: Predef.Class[_],
228
override val toString: String) extends ClassTypeManifest[T](None, _runtimeClass, Nil) {
229
override def equals(that: Any): Boolean = this eq that.asInstanceOf[AnyRef]
230
override val hashCode = System.identityHashCode(this)
233
/** Manifest for the class type `clazz[args]`, where `clazz` is
233
234
* a top-level or static class. */
234
235
private class ClassTypeManifest[T](prefix: Option[Manifest[_]],
235
val erasure: Predef.Class[_],
236
val runtimeClass: Predef.Class[_],
236
237
override val typeArguments: List[Manifest[_]]) extends Manifest[T] {
237
238
override def toString =
238
239
(if (prefix.isEmpty) "" else prefix.get.toString+"#") +