Невозможно получить доступ к членам родителей при работе с аннотациями макросов
Я вроде заблокирован со следующим (макроаннотация) ситуация. Предположим, у меня есть аннотация под названием@factory
которая направлена на созданиеapply
метод для аннотированной черты в соответствующем сопутствующем объекте. Например, учитываяtrait A
:
@factory
trait A {
val a1: Int
}
ожидаемый код, который будет сгенерирован, следующий:
object A extends Factory[A] {
def apply(_a1: Int) = new A {
val a1 = _a1
}
}
Теперь предположим, что у нас есть чертаB
который наследует отA
:
@factory
trait B extends A {
val b1: String
}
который должен генерировать:
object B extends Factory[B] {
def apply(_a1: Int, _b1: String) = new B {
val a1 = _a1
val b1 = _b1
}
}
В последнем случае мне нужно знать, какие атрибуты существуют вA
, но я не знаю, как получить информацию о них, При работе с макроаннотациями у меня есть доступ только кB
черта АСТ (какClassDef
). Хотя егоtemplate
содержит ссылки на родителей (какTypeTrees
), оба поляtpe
а такжеsymbol
пусты
Было бы здорово получить доступ кA
АСТ. Тем не менее, я думаю, что это невозможно. Следовательно, любой символ или тип (указывающий на родительский или текущий тип) будет достаточно хорошим.
Если вы хотите увидеть больше деталей реализации, я загрузил проект вhttps://github.com/jesuslopez-gonzalez/cool-factory, Это может генерироватьapply
для местных ценностей.