如何以编程方式生成扩展注释特征的抽象Scala类?

时间:2016-09-13 12:09:16

标签: scala scala-macros

鉴于注释特征,我应该如何生成实现特征的抽象类?

所以,考虑到以下用户特征......

@Neuron
trait SomeTrait {
  // ...
}

...在我的库中,我想在其旁边插入如下内容:

abstract class SomeTraitImpl extends SomeTrait

请注意,除了用@Neuron注释外,我对给定的特性一无所知。

我尝试使用ASM执行此操作,实现问题Using Scala traits with implemented methods in Java的答案中解释的概念,但这个概念仅仅涉及Scala编译器作为字节代码发出的表面。即使我成功掌握了var,val,lazy val,abstract override等所有可能的组合,但它很可能会破坏Scala编译器的下一个版本。

所以看起来我应该编写一个编译时宏。但是,我对Scala宏的文档感到头疼,所以我想知道是否有人可以起草让我开始的东西?请提出任何提示!

1 个答案:

答案 0 :(得分:0)

执行此操作的正确方法是使@Neuron成为macro annotation(使用Macro Paradise编译器插件)并实现宏以执行代码转换。结果代码现在是Neuron DI的一部分,这是我编写的依赖注入框架。