@@ -1856,14 +1856,18 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
1856
1856
case1
1857
1857
}
1858
1858
.asInstanceOf [List [CaseDef ]]
1859
- assignType(cpy.Match (tree)(sel, cases1), sel, cases1).cast(pt)
1859
+ var nni = sel.notNullInfo
1860
+ if (cases1.nonEmpty) nni = nni.seq(cases1.map(_.notNullInfo).reduce(_.alt(_)))
1861
+ assignType(cpy.Match (tree)(sel, cases1), sel, cases1).cast(pt).withNotNullInfo(nni)
1860
1862
}
1861
1863
1862
1864
// Overridden in InlineTyper for inline matches
1863
1865
def typedMatchFinish (tree : untpd.Match , sel : Tree , wideSelType : Type , cases : List [untpd.CaseDef ], pt : Type )(using Context ): Tree = {
1864
1866
val cases1 = harmonic(harmonize, pt)(typedCases(cases, sel, wideSelType, pt.dropIfProto))
1865
1867
.asInstanceOf [List [CaseDef ]]
1866
- assignType(cpy.Match (tree)(sel, cases1), sel, cases1)
1868
+ var nni = sel.notNullInfo
1869
+ if (cases1.nonEmpty) nni = nni.seq(cases1.map(_.notNullInfo).reduce(_.alt(_)))
1870
+ assignType(cpy.Match (tree)(sel, cases1), sel, cases1).withNotNullInfo(nni)
1867
1871
}
1868
1872
1869
1873
def typedCases (cases : List [untpd.CaseDef ], sel : Tree , wideSelType : Type , pt : Type )(using Context ): List [CaseDef ] =
@@ -1935,7 +1939,12 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
1935
1939
pat1.putAttachment(InferredGadtConstraints , ctx.gadt)
1936
1940
if (pt1.isValueType) // insert a cast if body does not conform to expected type if we disregard gadt bounds
1937
1941
body1 = body1.ensureConforms(pt1)(using originalCtx)
1938
- assignType(cpy.CaseDef (tree)(pat1, guard1, body1), pat1, body1)
1942
+ val nni = pat1.notNullInfo.seq(
1943
+ guard1.notNullInfoIf(false ).alt(
1944
+ guard1.notNullInfoIf(true ).seq(body1.notNullInfo)
1945
+ )
1946
+ )
1947
+ assignType(cpy.CaseDef (tree)(pat1, guard1, body1), pat1, body1).withNotNullInfo(nni)
1939
1948
}
1940
1949
1941
1950
val pat1 = typedPattern(tree.pat, wideSelType)(using gadtCtx)
@@ -2046,7 +2055,10 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
2046
2055
}: @ unchecked
2047
2056
val finalizer1 = typed(tree.finalizer, defn.UnitType )
2048
2057
val cases2 = cases2x.asInstanceOf [List [CaseDef ]]
2049
- assignType(cpy.Try (tree)(expr2, cases2, finalizer1), expr2, cases2)
2058
+ val nni = expr2.notNullInfo.retractedInfo.seq(
2059
+ cases2.map(_.notNullInfo.retractedInfo).fold(NotNullInfo .empty)(_.alt(_))
2060
+ ).seq(finalizer1.notNullInfo)
2061
+ assignType(cpy.Try (tree)(expr2, cases2, finalizer1), expr2, cases2).withNotNullInfo(nni)
2050
2062
}
2051
2063
2052
2064
def typedTry (tree : untpd.ParsedTry , pt : Type )(using Context ): Try =
0 commit comments