Я работаю в контексте макроса Scala 2.12.
Все поля конструктора обнаруживаются динамически, нет возможности жестко закодировать их внутри квазицитаты.
Желаемый результат (сокращенк минимальному наглядному примеру) такой код:
case class A2(i: Int) extends A(B(i))
Где B встроен при вызове супер-конструктора.
У меня есть это:
q"case class ${className.toTypeName}(..$fields) extends $superTypeType(..$superConstructorArgs)")
Я надеялся установить $ superConstructorArgs из $ fields следующим образом:
case q"case class $className(..$fields) extends ..$bases { ..$body }" => {
val superConstructorArgs = B(fields.map{case v:ValDef => ???
Компилятор хочет, чтобы дерево вместо B было вставлено в конструктор супертипа.
Что правильнодерево, чтобы обойти мой B и как оно должно быть построено?