From 9e5ffbd57b69798f13a6ae1a1a04acabd49713d0 Mon Sep 17 00:00:00 2001 From: Philipp Haller Date: Thu, 23 Feb 2012 14:04:42 +0100 Subject: [PATCH] Add refinedType to object ClassManifest --- src/library/scala/reflect/ClassManifest.scala | 11 +++++++++++ src/library/scala/reflect/Manifest.scala | 3 +++ 2 files changed, 14 insertions(+) diff --git a/src/library/scala/reflect/ClassManifest.scala b/src/library/scala/reflect/ClassManifest.scala index 466b57dea7a2..5195a75cf79c 100644 --- a/src/library/scala/reflect/ClassManifest.scala +++ b/src/library/scala/reflect/ClassManifest.scala @@ -245,6 +245,17 @@ object ClassManifest { override val typeArguments = args.toList override def toString = prefix.toString+"#"+name+argString } + + /** Manifest for the refined type + * `parent { val fieldNames(0) : fieldTypes(0) ; ... ; val fieldNames(n) : fieldTypes(n) }`. + */ + def refinedType[T](parent: Manifest[_], fieldNames: List[String], fieldTypes: List[Manifest[_]]): Manifest[T] = + new RefinedManifest[T] { + def erasure = parent.erasure + def fields = fieldNames zip fieldTypes + override def toString = parent + (fieldNames zip fieldTypes).map{case(n, t) => "val "+ n +" : "+ t}.mkString("{","; ", "}") + } + } /** Manifest for the class type `clazz[args]`, where `clazz` is diff --git a/src/library/scala/reflect/Manifest.scala b/src/library/scala/reflect/Manifest.scala index a76928fc40e7..0220d48ef2a6 100644 --- a/src/library/scala/reflect/Manifest.scala +++ b/src/library/scala/reflect/Manifest.scala @@ -267,6 +267,9 @@ object Manifest { override def toString = parents.mkString(" with ") } + /** Manifest for the refined type + * `parent { val fieldNames(0) : fieldTypes(0) ; ... ; val fieldNames(n) : fieldTypes(n) }`. + */ def refinedType[T](parent: Manifest[_], fieldNames: List[String], fieldTypes: List[Manifest[_]]): Manifest[T] = new RefinedManifest[T] { def erasure = parent.erasure