summaryrefslogtreecommitdiff
path: root/test/files/neg/virtpatmat_exhaust_compound.scala
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2014-05-28 15:20:01 +0200
committerJason Zaugg <jzaugg@gmail.com>2014-06-10 17:00:19 +0200
commitad9d87b1faad22c1a2e05351757c0a940e2a0ef2 (patch)
treee2cf3962e0b6e772fbc73923a8c14af620825ecf /test/files/neg/virtpatmat_exhaust_compound.scala
parentddb29a8105bc3b692bc129cbd8ed111baae7076d (diff)
downloadscala-ad9d87b1faad22c1a2e05351757c0a940e2a0ef2.tar.gz
scala-ad9d87b1faad22c1a2e05351757c0a940e2a0ef2.tar.bz2
scala-ad9d87b1faad22c1a2e05351757c0a940e2a0ef2.zip
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.
Diffstat (limited to 'test/files/neg/virtpatmat_exhaust_compound.scala')
-rw-r--r--test/files/neg/virtpatmat_exhaust_compound.scala29
1 files changed, 29 insertions, 0 deletions
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
+ }
+}