@@ -2135,14 +2135,18 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
2135
2135
case1
2136
2136
}
2137
2137
.asInstanceOf [List [CaseDef ]]
2138
- assignType(cpy.Match (tree)(sel, cases1), sel, cases1).cast(pt)
2138
+ var nni = sel.notNullInfo
2139
+ if (cases1.nonEmpty) nni = nni.seq(cases1.map(_.notNullInfo).reduce(_.alt(_)))
2140
+ assignType(cpy.Match (tree)(sel, cases1), sel, cases1).cast(pt).withNotNullInfo(nni)
2139
2141
}
2140
2142
2141
2143
// Overridden in InlineTyper for inline matches
2142
2144
def typedMatchFinish (tree : untpd.Match , sel : Tree , wideSelType : Type , cases : List [untpd.CaseDef ], pt : Type )(using Context ): Tree = {
2143
2145
val cases1 = harmonic(harmonize, pt)(typedCases(cases, sel, wideSelType, pt.dropIfProto))
2144
2146
.asInstanceOf [List [CaseDef ]]
2145
- assignType(cpy.Match (tree)(sel, cases1), sel, cases1)
2147
+ var nni = sel.notNullInfo
2148
+ if (cases1.nonEmpty) nni = nni.seq(cases1.map(_.notNullInfo).reduce(_.alt(_)))
2149
+ assignType(cpy.Match (tree)(sel, cases1), sel, cases1).withNotNullInfo(nni)
2146
2150
}
2147
2151
2148
2152
def typedCases (cases : List [untpd.CaseDef ], sel : Tree , wideSelType0 : Type , pt : Type )(using Context ): List [CaseDef ] =
@@ -2216,7 +2220,12 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
2216
2220
pat1.putAttachment(InferredGadtConstraints , ctx.gadt)
2217
2221
if (pt1.isValueType) // insert a cast if body does not conform to expected type if we disregard gadt bounds
2218
2222
body1 = body1.ensureConforms(pt1)(using originalCtx)
2219
- assignType(cpy.CaseDef (tree)(pat1, guard1, body1), pat1, body1)
2223
+ val nni = pat1.notNullInfo.seq(
2224
+ guard1.notNullInfoIf(false ).alt(
2225
+ guard1.notNullInfoIf(true ).seq(body1.notNullInfo)
2226
+ )
2227
+ )
2228
+ assignType(cpy.CaseDef (tree)(pat1, guard1, body1), pat1, body1).withNotNullInfo(nni)
2220
2229
}
2221
2230
2222
2231
val pat1 = typedPattern(tree.pat, wideSelType)(using gadtCtx)
@@ -2327,7 +2336,10 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
2327
2336
}: @ unchecked
2328
2337
val finalizer1 = typed(tree.finalizer, defn.UnitType )
2329
2338
val cases2 = cases2x.asInstanceOf [List [CaseDef ]]
2330
- assignType(cpy.Try (tree)(expr2, cases2, finalizer1), expr2, cases2)
2339
+ val nni = expr2.notNullInfo.retractedInfo.seq(
2340
+ cases2.map(_.notNullInfo.retractedInfo).fold(NotNullInfo .empty)(_.alt(_))
2341
+ ).seq(finalizer1.notNullInfo)
2342
+ assignType(cpy.Try (tree)(expr2, cases2, finalizer1), expr2, cases2).withNotNullInfo(nni)
2331
2343
}
2332
2344
2333
2345
def typedTry (tree : untpd.ParsedTry , pt : Type )(using Context ): Try =
0 commit comments