Я использую аннотации макросов для проверки полей класса и добавления члена на основе этих полей.
e.g.
@AddVal
class A(x: Int)
расширяется до
class A(x: Int){
val get: Int = x
}
После извлечения ValDef
поле tpe
по-прежнему null
, поэтому, чтобы получить тип, у меня есть два варианта:
1) Если я вызову .toString в дереве типов, я увижу тип, но теперь я потерял некоторую безопасность типов
2) Если я использую c.typecheck для дерева типов, я могу получить тип, но только если он имеет глубину 1 уровень. List[List[Int]] возвращается как List[List[...]]
val fieldType = c.typecheck(q"type T = ${f.tpt}") match {
case x @ TypeDef(mods, name, tparams, rhs) => rhs.tpe
}
Итак, есть ли способ рекурсивно проверять политипы?
Я снова попытался проверить тип rhs
, но получил The argument types of an anonymous function must be fully known
и не знаю, как это решить.
Спасибо, что заглянули,
Джулиан