使用scala宏返回注释

使用scala宏返回注释,scala,annotations,scala-macros,Scala,Annotations,Scala Macros,我正在编写一个宏,它允许具体化某些类的成员的一些注释,但它只会使scalac因断言错误而失败 这是它的一个非常简化的版本:一个宏,给出给定类型的第一个注释的实例 import scala.language.experimental.macros import scala.reflect.macros.whitebox object FirstAnn { def applyImpl[T: c.WeakTypeTag, Ann: c.WeakTypeTag](c: whitebox.Conte

我正在编写一个宏,它允许具体化某些类的成员的一些注释,但它只会使scalac因断言错误而失败

这是它的一个非常简化的版本:一个宏,给出给定类型的第一个注释的实例

import scala.language.experimental.macros
import scala.reflect.macros.whitebox

object FirstAnn {
  def applyImpl[T: c.WeakTypeTag, Ann: c.WeakTypeTag](c: whitebox.Context): c.Tree = {
    import c.universe._

    val tpe = weakTypeOf[T]
    val annTpe = weakTypeOf[Ann]

    val constructor = tpe.decl(termNames.CONSTRUCTOR).asMethod

    val l =
      constructor.paramLists.flatten.flatMap { sym =>
        tpe.member(sym.name).annotations.filter(_.tree.tpe =:= annTpe).map(_.tree)
      }

    l match {
      case h :: _ =>
        h
      case Nil =>
        c.abort(c.enclosingPosition, s"No $annTpe annotation found")
    }
  }

  def apply[T, Ann]: Ann = macro applyImpl[T, Ann]
}
为以下示例调用此宏

@getter case class TestAnnotation(value: String) extends annotation.StaticAnnotation
case class Test(
  @TestAnnotation("test") member: String
)
从sbt控制台,如

使scalac失败并出现断言错误,输出完全溢出我的终端


所以我的问题是:我能以我尝试的方式获得注释实例吗?这可能是scalac或scala宏错误吗?

这里的完整示例:您是否尝试在其他文件中定义宏?为什么?我已经在另一个地方调用它,即sbt控制台。仅供参考,在我最初的案例中,宏定义和方法定义已经在不同的文件中,没有更多的成功。
FirstAnnotation[Test, TestAnnotation]