我正在尝试为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}"""
}}
)
}
"""
}
如何获取另一个案例类的注释列表?