我正在尝试在Scala中编写一个宏,它读取带有某些注释的变量来操作它们,但似乎变量符号的 annotations 属性总是返回一个空列表。
注释签名:
class Inject extends StaticAnnotation
注释用法:
object App {
@Inject
var service: HttpService = _
}
宏定义(黑盒):
def inject[T <: Config](c: Context)(target: c.Expr[T])(implicit tag: c.WeakTypeTag[T]): c.Expr[ModuleProxy] = {
import c.universe._
val fields = tag.tpe.members collect { case s: TermSymbol => s}
// Always empty.
fields foreach { s => println(s"$s : ${s.annotations}") }
}
我应该研究一下吗?任何建议都会非常感激。
谢谢!
答案 0 :(得分:2)
如果您没有使用scala.annotation.meta
注释之一注释注释,则注释将落在vals / vars的基础字段上。要掌握这些,请val fields = tag.tpe.decls.collect{ case s: TermSymbol if !s.isMethod => s }
,然后它应该没问题。