如何在带注释的类上强制执行scala宏注释约束?

时间:2015-03-27 03:41:35

标签: scala macros annotations

我正在尝试实现一个“简单”的util库,它将带注释的scalatest套件放在一个Suites实例中,为它们提供一定的运行环境。

trait MyContext extends BeforeAndAfterAll {
  //declarations of values
  override def beforeAll() = {/* run various init procedures */}
  override def afterAll() = {/* tear everything down */}
}

该部分有效,如果我自己编写套件实例,我可以使用它。 我想编写的代码是使用宏的scala注释,它将采用所有带注释的org.scalatest.Suite子类型并生成Suites类,如下所示:

class testThisInContext extends StaticAnnotation{ /* ...  */}

@testThisInContext
class TestOne extends WordSpec {}

@testThisInContext
class TestTwo extends FlatSuite {}

然后会生成:

class InContextSuites extends Suites(new TestOne, new TestTwo) with MyContext {}

并通过向它们添加@org.scalatest.DoNotDiscover注释来修改类(以避免执行超出上下文)。

当带注释的类不是Suite的子类(这会使生成的类无法编译)时,我需要一种方法来中断宏的应用程序(并抛出错误)。

我还没想出如何在ClassDef的修饰符实例中键入检查注释(以便在需要时添加注释)。

0 个答案:

没有答案