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 {
791791 def isCheckable (tp : Type ): Boolean =
792792 ! tp.hasAnnotation(defn.UncheckedAnnot ) && {
793793 val tpw = tp.widen.dealias
794+ val classSym = tpw.classSymbol
794795 ctx.settings.YcheckAllPatmat .value ||
795- tpw.typeSymbol .is(Sealed ) ||
796+ classSym .is(Sealed ) ||
796797 tpw.isInstanceOf [OrType ] ||
797798 (tpw.isInstanceOf [AndType ] && {
798799 val and = tpw.asInstanceOf [AndType ]
799800 isCheckable(and.tp1) || isCheckable(and.tp2)
800801 }) ||
801802 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(_)))
804806 }
805807
806808 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