blob: e63709aa9daf2ca6e1bc5ed9db610b4da5e0a0c6 (
plain) (
tree)
|
|
import scala.tools.partest.ReplTest
class A {
sealed trait F[A]
}
class C[T] extends A {
sealed trait F[A]
object X {
object S1 extends F[T]
}
class S2 extends F[T]
}
object O extends C[Int] {
def foo(f: F[Int]) = f match { case X.S1 => }
class S3 extends F[Int]
}
class S4 extends O.F[String]
object Test extends ReplTest {
override def code = """
:power
val u = rootMirror.universe; import u._, language._
val S1 = typeOf[c.X.S1.type forSome { val c: C[_] }].typeSymbol.tpeHK
val S2 = typeOf[O.S2].typeSymbol.tpeHK
val S3 = typeOf[O.S3].typeSymbol.tpeHK
val S4 = typeOf[S4].typeSymbol.tpeHK
val F = typeOf[c.F[_] forSome { val c: C[_] }].typeSymbol.tpeHK
val fTpe = typeOf[O.type].decl(newTermName("foo")).paramss.head.head.tpe
def memType(sub: Type, scrut: Type): Type =
nestedMemberType(sub.typeSymbol, scrut.prefix, scrut.typeSymbol.owner)
val mt1 = memType(S1, fTpe)
global.typeDeconstruct.show(mt1)
memType(S2, fTpe)
memType(S3, fTpe)
memType(S4, fTpe)
""".stripMargin.trim
}
|