File tree 4 files changed +65
-4
lines changed
compiler/src/dotty/tools/dotc/typer
4 files changed +65
-4
lines changed Original file line number Diff line number Diff line change @@ -22,6 +22,7 @@ import parsing.JavaParsers.JavaParser
22
22
import parsing .Parsers .Parser
23
23
import Annotations .*
24
24
import Inferencing .*
25
+ import Nullables .*
25
26
import transform .ValueClasses .*
26
27
import TypeErasure .erasure
27
28
import reporting .*
@@ -784,12 +785,19 @@ class Namer { typer: Typer =>
784
785
785
786
protected def localContext (owner : Symbol ): FreshContext = ctx.fresh.setOwner(owner).setTree(original)
786
787
788
+ /** Stores the latest NotNullInfos (updated by `setNotNullInfos`) */
789
+ private var myNotNullInfos : List [NotNullInfo ] | Null = null
790
+
787
791
/** The context with which this completer was created */
788
- given creationContext : Context = ictx
792
+ given creationContext [Dummy_so_its_a_def ]: Context =
793
+ if myNotNullInfos == null then ictx else ictx.withNotNullInfos(myNotNullInfos.nn)
789
794
790
795
// make sure testing contexts are not captured by completers
791
796
assert(! ictx.reporter.isInstanceOf [ExploringReporter ])
792
797
798
+ def setNotNullInfos (infos : List [NotNullInfo ]): Unit =
799
+ myNotNullInfos = infos
800
+
793
801
protected def typeSig (sym : Symbol ): Type = original match
794
802
case original : ValDef =>
795
803
if (sym.is(Module )) moduleValSig(sym)
Original file line number Diff line number Diff line change @@ -3361,12 +3361,11 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
3361
3361
mdef.getAttachment(SymOfTree ) match {
3362
3362
case Some (sym) => sym.infoOrCompleter match {
3363
3363
case completer : Namer # Completer =>
3364
- if ( completer.creationContext.notNullInfos ne ctx.notNullInfos)
3364
+ if completer.creationContext.notNullInfos ne ctx.notNullInfos then
3365
3365
// The RHS of a val def should know about not null facts established
3366
3366
// in preceding statements (unless the DefTree is completed ahead of time,
3367
3367
// then it is impossible).
3368
- sym.info = Completer (completer.original)(
3369
- completer.creationContext.withNotNullInfos(ctx.notNullInfos))
3368
+ completer.setNotNullInfos(ctx.notNullInfos)
3370
3369
true
3371
3370
case _ =>
3372
3371
// If it has been completed, then it must be because there is a forward reference
Original file line number Diff line number Diff line change
1
+ class Test {
2
+ def test1 (s : String | Null ): Unit = {
3
+ if s == null then return
4
+
5
+ case class XXX ()
6
+ }
7
+
8
+ def test2 (s : String | Null ): Unit = {
9
+ if s == " " then return
10
+
11
+ case class XXX ()
12
+ }
13
+
14
+ def test3 (s : String | Null ): Unit = {
15
+ if s == null then return
16
+
17
+ case class XXX ()
18
+ ()
19
+ }
20
+
21
+ def test4 (s : String | Null ): String | Null = {
22
+ if s == null then return " "
23
+
24
+ case class XXX ()
25
+ " xxx"
26
+ }
27
+ }
Original file line number Diff line number Diff line change
1
+ class Test {
2
+ def test1 (s : String ): Unit = {
3
+ if s == null then return
4
+
5
+ case class XXX ()
6
+ }
7
+
8
+ def test2 (s : String ): Unit = {
9
+ if s == " " then return
10
+
11
+ case class XXX ()
12
+ }
13
+
14
+ def test3 (s : String ): Unit = {
15
+ if s == null then return
16
+
17
+ case class XXX ()
18
+ ()
19
+ }
20
+
21
+ def test4 (s : String ): String = {
22
+ if s == null then return " "
23
+
24
+ case class XXX ()
25
+ " xxx"
26
+ }
27
+ }
You can’t perform that action at this time.
0 commit comments