获取scala宏注释

时间:2017-04-19 22:48:59

标签: scala reflection scala-macros

我正在尝试为case类编写一个注释,以动态添加获取MongoDB Document实例的方法。一切正常,除了嵌套案例类的情况:

@MongoEntity
final case class Person(name: String, info: DetailedInfo)

@MongoEntity
final case class DetailedInfo(info: String)

原因是注释方法总是返回空集合。在下面的代码片段中,访问器方法使用c.typecheck函数返回类型。

def generateMethods(classType: TypeName, fields: List[ValDef]) = {
  val typedFields = accessors(fields)

  q"""
    ${Modifiers(Flag.IMPLICIT)} def toDoc(model: $classType): org.mongodb.scala.Document = {
      org.mongodb.scala.Document(
        ..${typedFields.map {
          // annotations is always empty =(
          case accessor if accessor.symbol.asType.annotations.exists(_.eq(MongoEntity)) => q"""${accessor.name.toString} -> ${accessor.name}.toDoc(model.${accessor.name})"""
          case accessor if accessor.paramType <:< typeOf[TraversableLike[_, _]] => q"""${accessor.name.toString} -> model.${accessor.name}.toList"""
          case accessor => q"""${accessor.name.toString} -> model.${accessor.name}"""
        }}
      )
    }
   """
}

如何获取另一个案例类的注释列表?

0 个答案:

没有答案