From ad9d87b1faad22c1a2e05351757c0a940e2a0ef2 Mon Sep 17 00:00:00 2001 From: Jason Zaugg Date: Wed, 28 May 2014 15:20:01 +0200 Subject: SI-8631 Treat `A with Sealed` as enumerable for pattern matching Enumerate the subtypes of sealed parent types of refinement types, and filter those that conform to the refinement type. Such types can crop up easily when LUB-bing case classes which add `Product with Serializable` to the mix. --- test/files/neg/virtpatmat_exhaust_compound.scala | 29 ++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 test/files/neg/virtpatmat_exhaust_compound.scala (limited to 'test/files/neg/virtpatmat_exhaust_compound.scala') diff --git a/test/files/neg/virtpatmat_exhaust_compound.scala b/test/files/neg/virtpatmat_exhaust_compound.scala new file mode 100644 index 0000000000..386c7af98d --- /dev/null +++ b/test/files/neg/virtpatmat_exhaust_compound.scala @@ -0,0 +1,29 @@ +sealed trait Base +case object O1 extends Base +case object O2 extends Base { + def foo: Int = 0 +} + +sealed trait Base2 +case object O3 extends Base2 + +case object O4 extends Base with Base2 + +object Test { + val a /*: Product with Serialiable with Base */ = if (true) O1 else O2 + a match { + case null => + } + + def t1(a: Product with Base with Base2) = a match { + case null => // O1..O3 should *not* be possible here + } + + def t2(a: Product with Base { def foo: Int }) = a match { + case null => // O2 in the domain + } + + def t3(a: Product with Base { def bar: Int }) = a match { + case null => // nothing in the domain + } +} -- cgit v1.2.3