diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2014-05-28 15:20:01 +0200 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2014-06-10 17:00:19 +0200 |
commit | ad9d87b1faad22c1a2e05351757c0a940e2a0ef2 (patch) | |
tree | e2cf3962e0b6e772fbc73923a8c14af620825ecf /test/files/neg/virtpatmat_exhaust_compound.scala | |
parent | ddb29a8105bc3b692bc129cbd8ed111baae7076d (diff) | |
download | scala-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.scala | 29 |
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 + } +} |