无法从Scala宏读取变量注释



我正试图在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}") }
}

有什么我应该调查的吗?任何形式的建议都将不胜感激。

谢谢!

如果不使用scala.annotation.meta注释之一对注释进行注释,则该注释将位于vals/vars的底层字段上。要获得这些,请执行val fields = tag.tpe.decls.collect{ case s: TermSymbol if !s.isMethod => s },然后应该可以了。

相关内容

  • 没有找到相关文章

最新更新