Skip to content

Commit 0ba86db

Browse files
committed
Eleven new tests about smart casts and value / variable null safety.
At this moment 5/11 are passed successfully. Related issues: KT-3175 (active), KT-3993 (fixed at M11), KT-5427 (fixed at M11), KT-4450, KT-5840, KT-5907, KT-6819.
1 parent 353c4a9 commit 0ba86db

File tree

14 files changed

+125
-0
lines changed

14 files changed

+125
-0
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
public fun foo() {
2+
var i: Int? = 1
3+
if (i != null) {
4+
while (i != 10) {
5+
<!UNUSED_CHANGED_VALUE!>i<!UNSAFE_CALL!>++<!><!> // Here smart cast should not be performed due to a successor
6+
i = null
7+
}
8+
}
9+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package
2+
3+
public fun foo(): kotlin.Unit
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
public fun foo() {
2+
var s: String? = ""
3+
fun closure(): Int {
4+
if (s == "") {
5+
s = null
6+
return -1
7+
} else if (s == null) {
8+
return -2
9+
} else {
10+
return s<!UNSAFE_CALL!>.<!>length() // Here smartcast is possible, at least in principle
11+
}
12+
}
13+
if (s != null) {
14+
System.out.println(closure())
15+
System.out.println(s<!UNSAFE_CALL!>.<!>length()) // Here smartcast is not possible due to a closure predecessor
16+
}
17+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package
2+
3+
public fun foo(): kotlin.Unit
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// FILE: a.kt
2+
3+
package a
4+
5+
public class X {
6+
public val x : String? = null
7+
public fun fn(): Int {
8+
if (x != null)
9+
return <!DEBUG_INFO_SMARTCAST!>x<!>.length() // bogus error here
10+
else
11+
return 0
12+
}
13+
}
14+
15+
// FILE: b.kt
16+
17+
package b
18+
19+
import a.X
20+
21+
public fun X.gav(): Int {
22+
if (x != null)
23+
return x<!UNSAFE_CALL!>.<!>length() // bogus error here
24+
else
25+
return 0
26+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package
2+
3+
package a {
4+
5+
public final class X {
6+
public constructor X()
7+
public final val x: kotlin.String? = null
8+
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
9+
public final fun fn(): kotlin.Int
10+
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
11+
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
12+
}
13+
}
14+
15+
package b {
16+
public fun a.X.gav(): kotlin.Int
17+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
public fun fooNotNull(s: String) {
2+
System.out.println("Length of $s is ${s.length()}")
3+
}
4+
5+
public fun foo() {
6+
var s: String? = "not null"
7+
if (s != null)
8+
fooNotNull(<!DEBUG_INFO_SMARTCAST!>s<!>)
9+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package
2+
3+
public fun foo(): kotlin.Unit
4+
public fun fooNotNull(/*0*/ s: kotlin.String): kotlin.Unit
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
public fun fooNotNull(s: String) {
2+
System.out.println("Length of $s is ${s.length()}")
3+
}
4+
5+
public fun foo() {
6+
var s: String? = "not null"
7+
if (s == null) {
8+
// Coming soon
9+
} else {
10+
fooNotNull(<!DEBUG_INFO_SMARTCAST!>s<!>)
11+
}
12+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package
2+
3+
public fun foo(): kotlin.Unit
4+
public fun fooNotNull(/*0*/ s: kotlin.String): kotlin.Unit
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
public fun fooNotNull(s: String) {
2+
System.out.println("Length of $s is ${s.length()}")
3+
}
4+
5+
public fun foo() {
6+
var s: String? = "not null"
7+
if (s == null) {
8+
return
9+
}
10+
fooNotNull(<!DEBUG_INFO_SMARTCAST!>s<!>)
11+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package
2+
3+
public fun foo(): kotlin.Unit
4+
public fun fooNotNull(/*0*/ s: kotlin.String): kotlin.Unit
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
fun calc(x: List<String>?) {
2+
x?.get(<!DEBUG_INFO_SMARTCAST!>x<!>.size() - 1) // x should be non-null in arguments list
3+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package
2+
3+
internal fun calc(/*0*/ x: kotlin.List<kotlin.String>?): kotlin.Unit

0 commit comments

Comments
 (0)