我有一个处理日志记录的宏注释,并且想要同时处理 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
. 对整个封闭类进行类型检查也不起作用。
有什么办法吗?