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