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.

questionAnswers(1)

yourAnswerToTheQuestion