Я пытаюсь написать макрос в Scala, который читает переменные с определенными аннотациями, чтобы манипулировать ими, но кажется аннотации свойство переменных символов всегда возвращает пустой список.Невозможно прочитать переменные аннотации из макроса Scala
Аннотация подписи: использование
class Inject extends StaticAnnotation
Аннотация:
object App {
@Inject
var service: HttpService = _
}
Макроопределение (черный ящик):
def inject[T <: Config](c: Context)(target: c.Expr[T])(implicit tag: c.WeakTypeTag[T]): c.Expr[ModuleProxy] = {
import c.universe._
val fields = tag.tpe.members collect { case s: TermSymbol => s}
// Always empty.
fields foreach { s => println(s"$s : ${s.annotations}") }
}
Есть ли что-то я должен смотреть в? Любые предложения будут высоко оценены.
Спасибо!
Не могли бы вы разместить полный пример на, скажем, github? –
@EugeneBurmako Конечно, это уже в GH, но я удалил соответствующую часть, потому что она не работала. Я включу его снова с комментариями и опубликую ссылку здесь в эти выходные. Благодаря! – mysticfall
Я только что прочитал часть, которая вызывает проблему с комментарием: * https://github.com/greencatsoft/scalajs-angular/blob/master/src/main/scala/com/greencatsoft/angularjs/internal/ServiceProxy .scala # L29 Он должен читать список переменных с аннотацией @inject от данного типа, но он не работает должным образом. Если вам нужен рабочий пример, который может воспроизвести проблему, вы можете запустить 'sbt localPublish' в указанном выше проекте и попытаться построить следующий проект: * https://github.com/greencatsoft/scalajs-angular -todomvc Спасибо! – mysticfall