在花了很长时间搜索scala文档后,我还没有找到这一点信息。或者至少没有以一种我可以轻易理解或得到任何确定性的方式措辞。
我有这个注释:
class MyAnnotation extends StaticAnnotation {
def macroTransform(annotees: Any*) = macro myImpl
}
我已经在两个或更多类这样使用它了:
@MyAnnotation
class One {}
@MyAnnotation
class Two {}
我想知道annotees
是否包含两个类,或者宏是否将被执行两次(每个注释实例一个)。我会吗?
annotess.map(_tree).toList == List(oneClassDef /*classdef of One*/, twoClassDef /*classdef of Two*/)
> true
是否有可能使注释只触发宏的一个应用程序,并且会立即在annotees中添加所有带注释的类?
答案 0 :(得分:1)
Annottees只包含直接带注释的成员+值/类型参数的封闭定义(类/特征)+带注释成员的伴随(或者用于值/类型参数的封闭定义)。
不幸的是,在scalac的当前名称/ typer架构中实现您的请求几乎是不可能的(并且据所知,在dotc中也是如此),所以我建议一个解决方法 - 注释包含您要处理的所有类的定义。