11import scala .language .unsafeJavaReturn
2+
3+ import scala .annotation .CanEqualNull
24import java .{util => ju }
35
46class S {
57
68 def test [T <: AnyRef ](jc : JC ) = {
7- // val a: Int = jc.a
8-
9- // val b = jc.b // it returns String @CanEqualNull
10- // val b2: String = b
11- // val b3: String = jc.b
12- // val bb = jc.b == null // it's ok to compare String @CanEqualNull with Null
13- // val btl = jc.b.trim().length() // String @CanEqualNull is just String, unsafe selecting
14-
15- // val c = jc.c
16- // val cl = c.length
17- // val c2: Array[String] = c
18- val c3 : Array [String ] = jc.c
19- // val c4: Array[Int] = c.map(_.length())
20-
21- // val f1: Int = jc.f1()
22- // val f2: Array[Int] = jc.f2()
23- // val f2n = jc.f2() == null
24-
25- // val g1: String = jc.g1()
26- // val g1n = jc.g1() == null
27- // val g1tl = jc.g1().trim().length()
28-
29- // val g2h: ju.List[String] = jc.g2()
30-
31- // val g3: Array[String] = jc.g3()
32- // val g3n = jc.g3() == null
33- // val g3m: Array[Boolean] = jc.g3().map(_ == null)
34-
35- // val h1: T = jc.h1[T]()
36-
37- // val h2: ju.List[T] = jc.h2()
38-
39- // val h3: Array[T] = jc.h3()
9+ val a : Int = jc.a
10+
11+ val b = jc.b // it returns String @CanEqualNull
12+ val b2 : String = b
13+ val b3 : String @ CanEqualNull = jc.b
14+ val b4 : String = jc.b
15+ val bb = jc.b == null // it's ok to compare String @CanEqualNull with Null
16+ val btl = jc.b.trim().length() // String @CanEqualNull is just String, unsafe selecting
17+
18+ val c = jc.c
19+ val cl = c.length
20+ val c2 : Array [String ] = c
21+ val c3 : Array [String @ CanEqualNull ] @ CanEqualNull = jc.c
22+ val c4 : Array [String ] = jc.c
23+ val cml : Array [Int ] = c.map(_.length())
24+
25+ val f1 : Int = jc.f1()
26+
27+ val f21 : Array [Int ] @ CanEqualNull = jc.f2()
28+ val f22 : Array [Int ] = jc.f2()
29+ val f2n = jc.f2() == null
30+
31+ val g11 : String @ CanEqualNull = jc.g1()
32+ val g12 : String = jc.g1()
33+ val g1n = jc.g1() == null
34+ val g1tl = jc.g1().trim().length()
35+
36+ val g21 : ju.List [String ] @ CanEqualNull = jc.g2()
37+ val g22 : ju.List [String ] = jc.g2()
38+
39+ val g31 : Array [String @ CanEqualNull ] @ CanEqualNull = jc.g3()
40+ val g32 : Array [String ] = jc.g3()
41+ val g3n = jc.g3() == null
42+ val g3m : Array [Boolean ] = jc.g3().map(_ == null )
43+
44+ val h11 : T @ CanEqualNull = jc.h1[T ]()
45+ val h12 : T = jc.h1[T ]()
46+ val h1n = jc.h1[T ]() == null
47+
48+ val h21 : ju.List [T ] @ CanEqualNull = jc.h2[T ]()
49+ val h22 : ju.List [T ] = jc.h2[T ]()
50+
51+ val h31 : Array [T @ CanEqualNull ] @ CanEqualNull = jc.h3[T ]()
52+ val h32 : Array [T ] = jc.h3[T ]()
53+ val h3m = jc.h3[T ]().map(_ == null )
4054 }
4155}
0 commit comments