in inject/inject-core/src/main/scala/com/twitter/inject/TypeUtils.scala [30:53]
def manifestFromType(t: Type): Manifest[_] = {
t match {
case n if n =:= typeOf[Nothing] => ManifestFactory.Nothing
case n if n =:= typeOf[Null] => ManifestFactory.Null
case n if n =:= typeOf[Any] => ManifestFactory.Any
case n if n =:= typeOf[AnyVal] => ManifestFactory.AnyVal
case _ =>
try {
val clazz = ClassTag[T](mirror.runtimeClass(t)).runtimeClass
if (t.typeArgs.length == 1) {
val arg = manifestFromType(t.typeArgs.head)
ManifestFactory.classType(clazz, arg)
} else if (t.typeArgs.length > 1) {
// recursively walk each type arg to create a Manifest
val args = t.typeArgs.map(x => manifestFromType(x))
ManifestFactory.classType(clazz, args.head, args.tail: _*)
} else {
ManifestFactory.classType(clazz)
}
} catch {
case _: NoClassDefFoundError => ManifestFactory.Any
}
}
}