我正在注释一个特征,例如:
@ScreenModel
trait TestTrait {
.......
}
然后我得到了@ScreenModel 的实现,例如:
def impl(c: whitebox.Context)(annottees: c.Expr[Any]*): c.Expr[Any] = {
import c.universe._
val output : List[Tree] = annottees.map(_.tree) match {
case(cd @ q"$mods trait $name[..$tparams] extends ..$parents { ..$body }") :: Nil =>
val compObjVar = s"""{
import models.presentation.blocks.BlockModel;
class AAAA {
class BBBB {
}
}
}""";
val rawTree=c.parse(compObjVar)
val merged = q"{..$rawTree}";
merged :: Nil
case _ => c.abort(c.enclosingPosition, "Invalid test target")
}
c.Expr[Any](q"..$output")
}
所以,我得到:
“没有同伴的顶级类只能扩展为同名类或块”
但是,如果我在 AAA 类中的 AAA 类之前移动导入,那么它可以工作:
val compObjVar = s"""{
class AAAA {
import models.presentation.blocks.BlockModel;
class BBBB {
}
}
}""";
为什么?