@@ -793,23 +793,27 @@ class SpaceEngine(using Context) extends SpaceLogic {
793
793
private def exhaustivityCheckable (sel : Tree ): Boolean = {
794
794
// Possible to check everything, but be compatible with scalac by default
795
795
def isCheckable (tp : Type ): Boolean =
796
- ! tp.hasAnnotation(defn.UncheckedAnnot ) && {
797
- val tpw = tp.widen.dealias
796
+ val tpw = tp.widen.dealias
797
+ val classSym = tpw.classSymbol
798
+ classSym.is(Sealed ) ||
799
+ tpw.isInstanceOf [OrType ] ||
800
+ (tpw.isInstanceOf [AndType ] && {
801
+ val and = tpw.asInstanceOf [AndType ]
802
+ isCheckable(and.tp1) || isCheckable(and.tp2)
803
+ }) ||
804
+ tpw.isRef(defn.BooleanClass ) ||
805
+ classSym.isAllOf(JavaEnumTrait )
806
+
807
+ val res = ! sel.tpe.hasAnnotation(defn.UncheckedAnnot ) && {
808
+ ctx.settings.YcheckAllPatmat .value
809
+ || isCheckable(sel.tpe)
810
+ || {
811
+ val tpw = sel.tpe.widen.dealias
798
812
val classSym = tpw.classSymbol
799
- ctx.settings.YcheckAllPatmat .value ||
800
- classSym.is(Sealed ) ||
801
- tpw.isInstanceOf [OrType ] ||
802
- (tpw.isInstanceOf [AndType ] && {
803
- val and = tpw.asInstanceOf [AndType ]
804
- isCheckable(and.tp1) || isCheckable(and.tp2)
805
- }) ||
806
- tpw.isRef(defn.BooleanClass ) ||
807
- classSym.isAllOf(JavaEnumTrait ) ||
808
- (defn.isProductSubType(tpw) && classSym.is(Case )
809
- && productSelectorTypes(tpw, sel.srcPos).exists(isCheckable(_)))
813
+ classSym.is(Case ) && productSelectorTypes(tpw, sel.srcPos).exists(isCheckable(_))
810
814
}
815
+ }
811
816
812
- val res = isCheckable(sel.tpe)
813
817
debug.println(s " exhaustivity checkable: ${sel.show} = $res" )
814
818
res
815
819
}
0 commit comments