SMirror is a simpler way to do reflection that provides a higher level of abstraction over the Scala 2.10 runtime reflection.
Examples:
scala> class Product(val category: String) {
| var tags = Set[String]()
| def clearTags =
| tags = Set()
| }
defined class Product
scala> val sClass = sClassOf[Product]
sClass: net.fwbrasil.smirror.SClass[Product] = Product
scala> sClass.vals
res2: List[net.fwbrasil.smirror.SVal[Product]] = List(val category: java.lang.String)
scala> sClass.vars
res3: List[net.fwbrasil.smirror.SVar[Product]] = List(var tags: scala.collection.immutable.Set)
scala> sClass.methods
res4: List[net.fwbrasil.smirror.SMethod[Product]] = List(clearTags(): scala.Unit)
scala> val constructor = sClass.constructors.head
constructor: net.fwbrasil.smirror.SConstructor[Product] = <init>(category: java.lang.String): Product
scala> val product = constructor.invoke("sports")
product: Product = Product@6c6c7d22
scala> val tagsVar = sClass.vars.head
tagsVar: net.fwbrasil.smirror.SVar[Product] = var tags: scala.collection.immutable.Set
scala> tagsVar.set(product, Set("tennis"))
res6: Any = ()
scala> tagsVar.get(product)
res7: Any = Set(tennis)
scala> product.reflect.vals.head.get
res11: Any = sports
scala> product.reflect.vars.head.set(Set("tennis"))
res12: Any = ()
scala> product.tags
res13: scala.collection.immutable.Set[String] = Set(tennis)
--
Flávio W. Brasil
{persistence as it should be}