scala宏注释的注释是什么?或者宏应用了多少次

时间:2015-03-27 03:21:29

标签: java scala macros annotations

在花了很长时间搜索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中添加所有带注释的类?

1 个答案:

答案 0 :(得分:1)

Annottees只包含直接带注释的成员+值/类型参数的封闭定义(类/特征)+带注释成员的伴随(或者用于值/类型参数的封闭定义)。

不幸的是,在scalac的当前名称/ typer架构中实现您的请求几乎是不可能的(并且据所知,在dotc中也是如此),所以我建议一个解决方法 - 注释包含您要处理的所有类的定义。