3

次のような特性に注釈を付けています。

@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 {

          }
        }
    }""";

なんで?

4

1 に答える 1