如何从宏中的Ident()获取类型?

时间:2014-08-04 17:03:11

标签: scala scala-macros

我试图编写一个通用宏,我可以抓取任何匹配foo.bar的树,但只有fooFoo的树。我只需要查看调用宏的封闭类。到目前为止,我有这个:

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所指的类型?对不起,如果我在树林里完全迷失了。

1 个答案:

答案 0 :(得分:0)

问题可能长期处于休眠状态,但我遇到了同样的问题

val ident: Ident = ... 
ident.tpe  // is null

val tree2 = c.typecheck(tree = ident,mode = c.TYPEmode)
tree2.tpe  // not null