我有点受阻于以下(宏注释)情况。假设我有一个名为的注解@factory
,旨在为apply
相应伴随对象中的注解特征生成一个方法。例如,给定trait A
:
@factory
trait A {
val a1: Int
}
预期生成的代码如下:
object A extends Factory[A] {
def apply(_a1: Int) = new A {
val a1 = _a1
}
}
现在假设我们有一个B
继承自的特征A
:
@factory
trait B extends A {
val b1: String
}
应该生成:
object B extends Factory[B] {
def apply(_a1: Int, _b1: String) = new B {
val a1 = _a1
val b1 = _b1
}
}
在后一种情况下,我需要知道存在于哪些属性A
,但我不知道如何获取有关它们的任何信息。在处理宏注释时,我只能访问B
特征 AST(作为 a ClassDef
)。尽管它template
包含对父级的引用(as TypeTrees
),但两个字段tpe
和symbol
都是空的。
能够访问A
AST 对我来说很棒。但是,我认为这是不可行的。因此,任何符号或类型(指向父类型或当前类型)都足够好。
如果您想查看更多实现细节,我已将项目上传到https://github.com/jesuslopez-gonzalez/cool-factory。它可以生成apply
局部值。