0
給定一個帶註釋的特徵,我應該如何去創建一個實現特徵的抽象類?如何以編程方式生成擴展註釋特徵的抽象Scala類?
因此,考慮以下用戶特質......
@Neuron
trait SomeTrait {
// ...
}
...在我的圖書館我想插入類似以下內容旁邊:
abstract class SomeTraitImpl extends SomeTrait
注意,我知道除了用@Neuron
註釋外,沒有關於給定特徵的信息。
我試着用ASM來實現這個,實現了在問題Using Scala traits with implemented methods in Java的答案中解釋的概念,但是這個概念只是抓住了Scala編譯器發出的字面代碼的表面。即使我成功掌握了var,val,lazy val,抽象重寫等所有可能的組合,它的可能性也很高,它將與下一個Scala編譯器的版本打破。
因此,它看起來應該寫一個編譯時宏代替。然而,我正在摸索Scala宏的文檔,所以我想知道是否有人可以起草一些讓我開始的東西?任何暗示,表示讚賞,請!
您是否想修改沒有'@ Neuron'註解的代碼?所以'@Neuron特性SomeTrait'將保持不變,但是'SomeTraitImpl extends SomeTrait'的抽象類將在某處創建,對嗎? – dveim
是的,原始特徵應該保持原樣,只是應該在它旁邊插入新的「SomeTraitImpl」。 –
假設使用'@Neuron trait SomeTrait'的項目與'SomeTraitImpl'的項目分開編譯(記住宏在編譯時工作)。如何生成'SomeTraitImpl'的代碼?可能的解決方法 - 在第二個項目中使用另一個宏'NeuronGenerator',它會盡最大努力找到'@ Neuron'並生成AST。你的情況可能嗎? – dveim