我试图编写一个通用宏,我可以抓取任何匹配foo.bar
的树,但只有foo
是Foo
的树。我只需要查看调用宏的封闭类。到目前为止,我有这个:
def getFooTrees[T](): Unit = macro getFooTrees_impl[T]
def getFooTrees_impl[T: c.WeakTypeTag](c: Context)(): c.Expr[Unit] = {
import c.universe._
val receiverType = implicitly[c.WeakTypeTag[T]].tpe
val terms = c.enclosingClass
.filter { t =>
t match {
case Select(ident: Ident, name: TermName) if (??? == receiverType) =>
true
case _ =>
false
}
}
...etc
}
如何查看ident
所指的类型?对不起,如果我在树林里完全迷失了。
答案 0 :(得分:0)
问题可能长期处于休眠状态,但我遇到了同样的问题
val ident: Ident = ...
ident.tpe // is null
val tree2 = c.typecheck(tree = ident,mode = c.TYPEmode)
tree2.tpe // not null