При попытке получить имя класса с помощью ссылки WeakTypeTag при определении реализации макроса, я не могу получить правильную информацию, если применяется несколько слоев полиморфизма.
Например, если у меня есть следующие настройки:
object MacroSupport {
def get_name_impl[A: c.WeakTypeTag](c: blackbox.Context): c.Expr[String] = {
val nameOfA: String = weakTypeOf[A].toString
...
}
def getName[A] = macro get_name_impl[A]
}
abstract class GenericInterface[T] {
def getName: String = MacroSupport.getName[T]
}
case class ContainerA(
someValue: String
)
class FunctionalClass extends GenericInterface[ContainerA] {
val containerName: String = getName
}
Я надеюсь достичь любого количества FunctionalClass
, каждый со своим собственным классом Container
, и они могут сообщить имя своего контейнера, который используется для некоторой мета-конфигурации. В основном MacroSupport
и GenericInterface
будут существовать в библиотеке, которую я пишу, в то время как уровни FunctionalClass
и Container
будут написаны другими, использующими библиотеку.
Проблема, возникшая у меня из-за сквозного типа в GenericInterface
, FunctionalClass.containerName
== "t" и попыток доступа к объявлениям типа, ничего не дает. Как получить информацию о типе из объявления FunctionalClass
до уровня MacroSupport
?