Macro Paradise を使用して Scala 2.10.3 を使用しています。オブジェクトに特性を追加しようとしているマクロ注釈があります。
@MyAnnotation
object Foo extends Bar {}
拡張後、次のようなものが必要です。
object Foo extends Bar with Baz {}
Baz
コンパイル スコープでアクセス可能な特性はどこにありますか。マクロ パラダイスを使用すると、ターゲット ツリーをきれいに分解できます。
q"object $obj extends ..$bases { ..$body }" = tree
bases は、既存の拡張機能を List of Ident(newTypeName("Bar")) の形式で保持します。
basesに追加のBaz
エントリを追加してツリーを再構築するだけで済みますが、問題は、ターゲットに「すでに」 が含まれている可能性があることBaz
です。この場合、私はそれを追加したくありません。私に与えられた用語の名前は短縮されています。それらをマクロ内の実際の型参照に変換する方法はありますか?
マクロで次のことを試しましたc.typeCheck(Ident(newTypeName("Baz")))
が、次のエラーが発生します。
scala.reflect.macros.TypeCheckException: trait some.Baz is not a value
コンテキストを調べて、使用する他の明らかな方法があるかどうかを確認しましたが、飛び出すものはありません。
どんな助けでも大歓迎です!