1

我有一个处理日志记录的宏注释,并且想要同时处理 SLF4J 和 Log4j2 日志记录。不幸的是,这需要找到logger字段的类型。当注释来自其他问题的课程时,我知道如何做到这一点。但是我还没有弄清楚方法上有注释的情况。这是我尝试过的:

val loggerType = {
  val classImpl = (if (annottees.head.isInstanceOf[DefDefApi])
    c.enclosingClass
  else
    c).asInstanceOf[ImplDef].impl
  classImpl.body.collectFirst {
    case vd: ValDef if vd.name == TermName("logger") =>
      c.typecheck(vd.duplicate).symbol.info
  }.getOrElse {
    // TODO look at parents
    c.abort(c.enclosingPosition, "Logger type not found")
  }
}

这会编译(尽管enclosingClass已弃用),但使用此注解编译类会导致illegal cyclic reference. 对整个封闭类进行类型检查也不起作用。

有什么办法吗?

4

0 回答 0