鉴于注释特征,我应该如何生成实现特征的抽象类?
所以,考虑到以下用户特征......
@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宏的文档感到头疼,所以我想知道是否有人可以起草让我开始的东西?请提出任何提示!
答案 0 :(得分:0)
执行此操作的正确方法是使@Neuron
成为macro annotation(使用Macro Paradise编译器插件)并实现宏以执行代码转换。结果代码现在是Neuron DI的一部分,这是我编写的依赖注入框架。