File tree Expand file tree Collapse file tree 3 files changed +18
-3
lines changed
compiler/src/dotty/tools/dotc/transform/patmat Expand file tree Collapse file tree 3 files changed +18
-3
lines changed Original file line number Diff line number Diff line change @@ -791,16 +791,18 @@ class SpaceEngine(using Context) extends SpaceLogic {
791
791
def isCheckable (tp : Type ): Boolean =
792
792
! tp.hasAnnotation(defn.UncheckedAnnot ) && {
793
793
val tpw = tp.widen.dealias
794
+ val classSym = tpw.classSymbol
794
795
ctx.settings.YcheckAllPatmat .value ||
795
- tpw.typeSymbol .is(Sealed ) ||
796
+ classSym .is(Sealed ) ||
796
797
tpw.isInstanceOf [OrType ] ||
797
798
(tpw.isInstanceOf [AndType ] && {
798
799
val and = tpw.asInstanceOf [AndType ]
799
800
isCheckable(and.tp1) || isCheckable(and.tp2)
800
801
}) ||
801
802
tpw.isRef(defn.BooleanClass ) ||
802
- tpw.typeSymbol.isAllOf(JavaEnumTrait ) ||
803
- (defn.isTupleType(tpw) && tpw.argInfos.exists(isCheckable(_)))
803
+ classSym.isAllOf(JavaEnumTrait ) ||
804
+ (defn.isProductSubType(tpw) && classSym.is(Case )
805
+ && productSelectorTypes(tpw, sel.srcPos).exists(isCheckable(_)))
804
806
}
805
807
806
808
val res = isCheckable(sel.tpe)
Original file line number Diff line number Diff line change
1
+ 8: Pattern Match Exhaustivity: Foo(Inactive)
Original file line number Diff line number Diff line change
1
+ sealed trait Status
2
+ object Status {
3
+ case object Active extends Status
4
+ case object Inactive extends Status
5
+ }
6
+
7
+ case class Foo (status : Status )
8
+ def bar (user : Foo ): Unit = user match {
9
+ case Foo (Status .Active ) =>
10
+ println(" active" )
11
+ // no compile-time warning for missing Status.Inactive case
12
+ }
You can’t perform that action at this time.
0 commit comments