I know about case classes, pattern matching, unapply and PartialFunction, but I'm confused about bellow macros snippet.
val declarations = weakTypeOf[T].declarations
val methods = declarations.collect { case m: MethodSymbol => m }
Scaladoc of MemberScope http://www.scala-lang.org/api/2.10.4/#scala.reflect.api.Scopes$MemberScope
Collect method accepts PartialFunction[Universe.Symbol, B]
I can't find unapply method of MethodSymbol and it's also trait not a case class, so in witch code compiler transforms
{ case m: MethodSymbol => m }
Because
MethodSymbolis not a generic type, the matchis essentially equivalent to
There is absolutely no magic here, and
unapplymachinery is not related to such matches at all. Same thing can easily be done even in Java.