检测scala宏中的case类

时间:2017-06-19 14:28:30

标签: scala reflection scala-macros case-class scala-2.11

在被称为scala(2.11)宏的方法中,有没有办法以编程方式确定Type是否为case class

我正在研究的方法的API归结为:

def typeIsCaseClass(c: Context)(targetType: c.universe.Type): Boolean = {
  // targetType "is case class?"
}

如果需要,我愿意改变API。

1 个答案:

答案 0 :(得分:4)

符号通常包含所有有趣的信息:

def typeIsCaseClass(c: Context)(targetType: c.universe.Type): Boolean = {
  val sym = targetType.typeSymbol
  sym.isClass && sym.asClass.isCaseClass
}