def manifestFromType()

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
          }
      }
    }