Nie można uzyskać dostępu do członków rodzica podczas pracy z adnotacjami makr
Jestem trochę zablokowany następującymi (adnotacja makro) sytuacja. Załóżmy, że mam adnotację@factory
który ma na celu wygenerowanieapply
metoda opisanej cechy w odpowiednim obiekcie towarzyszącym. Na przykład, biorąc pod uwagętrait A
:
@factory
trait A {
val a1: Int
}
oczekiwany kod do wygenerowania jest następujący:
object A extends Factory[A] {
def apply(_a1: Int) = new A {
val a1 = _a1
}
}
Załóżmy teraz, że mamy cechęB
który dziedziczy zA
:
@factory
trait B extends A {
val b1: String
}
który ma generować:
object B extends Factory[B] {
def apply(_a1: Int, _b1: String) = new B {
val a1 = _a1
val b1 = _b1
}
}
W tym drugim przypadku muszę wiedzieć, które atrybuty istnieją wA
, ale nie wiem, jak uzyskać o nich jakiekolwiek informacje. Podczas zajmowania się adnotacjami makr mam tylko dostęp doB
cecha AST (jakoClassDef
). Chociaż jegotemplate
zawiera odniesienia do rodziców (jakTypeTrees
), oba polatpe
isymbol
są puste.
Byłoby dla mnie wspaniale uzyskać dostęp doA
AST. Myślę jednak, że to niemożliwe. Dlatego każdy symbol lub typ (wskazujący na rodzica lub bieżący typ) byłby wystarczająco dobry.
Jeśli chcesz zobaczyć więcej szczegółów implementacji, przesłałem projekt dohttps://github.com/jesuslopez-gonzalez/cool-factory. Może wygenerowaćapply
dla lokalnych wartości.