у меня есть простой Java аннотаций с одним параметром:Scala: генерировать Java аннотаций с параметром с помощью Scala макросы
public @interface Annot {
String value();
}
Также у меня есть Java аннотаций, который принимает массив Annot в качестве параметра:
public @interface Annotations {
Annot[] value();
}
I хотите генерировать Annot с параметром «value» с использованием макроса Scala следующим образом:
object MyAnnotations {
def MyAnnotation: Annot = macro myAnnotationMacro
def myAnnotationMacro(c: whitebox.Context): c.Expr[Annot] = {
import c.universe._
c.Expr(q"""new Annot("value")""")
}
}
В то время как th это работает:
@Annotations(Array(
new Annot("value")
))
trait T
Это не работает:
@Annotations(Array(
MyAnnotations.MyAnnotation
)) // too many arguments for constructor Annot:()Annot
trait T
Почему? И как я могу генерировать Annot?