@@ -2120,14 +2120,18 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
2120
2120
case1
2121
2121
}
2122
2122
.asInstanceOf [List [CaseDef ]]
2123
- assignType(cpy.Match (tree)(sel, cases1), sel, cases1).cast(pt)
2123
+ var nni = sel.notNullInfo
2124
+ if (cases1.nonEmpty) nni = nni.seq(cases1.map(_.notNullInfo).reduce(_.alt(_)))
2125
+ assignType(cpy.Match (tree)(sel, cases1), sel, cases1).cast(pt).withNotNullInfo(nni)
2124
2126
}
2125
2127
2126
2128
// Overridden in InlineTyper for inline matches
2127
2129
def typedMatchFinish (tree : untpd.Match , sel : Tree , wideSelType : Type , cases : List [untpd.CaseDef ], pt : Type )(using Context ): Tree = {
2128
2130
val cases1 = harmonic(harmonize, pt)(typedCases(cases, sel, wideSelType, pt.dropIfProto))
2129
2131
.asInstanceOf [List [CaseDef ]]
2130
- assignType(cpy.Match (tree)(sel, cases1), sel, cases1)
2132
+ var nni = sel.notNullInfo
2133
+ if (cases1.nonEmpty) nni = nni.seq(cases1.map(_.notNullInfo).reduce(_.alt(_)))
2134
+ assignType(cpy.Match (tree)(sel, cases1), sel, cases1).withNotNullInfo(nni)
2131
2135
}
2132
2136
2133
2137
def typedCases (cases : List [untpd.CaseDef ], sel : Tree , wideSelType0 : Type , pt : Type )(using Context ): List [CaseDef ] =
@@ -2201,7 +2205,12 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
2201
2205
pat1.putAttachment(InferredGadtConstraints , ctx.gadt)
2202
2206
if (pt1.isValueType) // insert a cast if body does not conform to expected type if we disregard gadt bounds
2203
2207
body1 = body1.ensureConforms(pt1)(using originalCtx)
2204
- assignType(cpy.CaseDef (tree)(pat1, guard1, body1), pat1, body1)
2208
+ val nni = pat1.notNullInfo.seq(
2209
+ guard1.notNullInfoIf(false ).alt(
2210
+ guard1.notNullInfoIf(true ).seq(body1.notNullInfo)
2211
+ )
2212
+ )
2213
+ assignType(cpy.CaseDef (tree)(pat1, guard1, body1), pat1, body1).withNotNullInfo(nni)
2205
2214
}
2206
2215
2207
2216
val pat1 = typedPattern(tree.pat, wideSelType)(using gadtCtx)
@@ -2312,7 +2321,10 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
2312
2321
}: @ unchecked
2313
2322
val finalizer1 = typed(tree.finalizer, defn.UnitType )
2314
2323
val cases2 = cases2x.asInstanceOf [List [CaseDef ]]
2315
- assignType(cpy.Try (tree)(expr2, cases2, finalizer1), expr2, cases2)
2324
+ val nni = expr2.notNullInfo.retractedInfo.seq(
2325
+ cases2.map(_.notNullInfo.retractedInfo).fold(NotNullInfo .empty)(_.alt(_))
2326
+ ).seq(finalizer1.notNullInfo)
2327
+ assignType(cpy.Try (tree)(expr2, cases2, finalizer1), expr2, cases2).withNotNullInfo(nni)
2316
2328
}
2317
2329
2318
2330
def typedTry (tree : untpd.ParsedTry , pt : Type )(using Context ): Try =
0 commit comments