Учитывая (Скала 2.10.3),
package models
@MyAnnotation
case class MyClass()
Как получить имя пакета в реализации макроса?
Я пробовал:
1) Было предложено typeCheck
как здесь, но это приводит к переполнению стека (хотя я вижу, что он выдает правильное полное имя).
val result = {
annottees.map(_.tree).toList match {
case classDef @ q"$mods class $name[..$tparams](..$first)(...$rest) extends ..$parents { $self => ..$body }" :: Nil => {
val full = c.typeCheck(q"??? : $name").tpe.typeSymbol.fullName
...
2) Сбор ClassDef
и вызов .symbol
показывает, что его нет.
Я бы хотел избежать:
3) Передача значения в качестве аргумента аннотации.
4) Аннотирование пакета и сохранение имени для использования при расширении класса.
5) Разбор .enclosingPosition
контекста в надежде, что структура пакета и каталога соответствует.
Я испортил typeCheck
? Должен ли я согласиться на № 3 или № 4? Любые предложения, как достичь моей цели?
Большое спасибо за любой вклад,
- Джулиан