blob: 87cd310b09d488ea632d539db5ec9dd007539186 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
import scala.reflect.macros.WhiteboxContext
import scala.language.experimental.macros
trait Foo[T]
class C1(val x: Int)
class C2(val x: String)
trait LowPriority {
implicit def lessSpecific[T]: Foo[T] = null
}
object Foo extends LowPriority {
implicit def moreSpecific[T]: Foo[T] = macro Macros.impl[T]
}
object Macros {
def impl[T: c.WeakTypeTag](c: WhiteboxContext) = {
import c.universe._
val tpe = weakTypeOf[T]
if (tpe.members.exists(_.typeSignature =:= typeOf[Int]))
c.abort(c.enclosingPosition, "I don't like classes that contain integers")
q"new Foo[$tpe]{ override def toString = ${tpe.toString} }"
}
}
|