Checking that smart casts will not be broken by conversion

This commit is contained in:
Valentin Kipyatkov
2016-03-24 12:37:35 +03:00
parent 978fc468fa
commit 8c498af3d8
12 changed files with 162 additions and 2135 deletions
@@ -0,0 +1,14 @@
// WITH_RUNTIME
fun foo(list: List<String>, o: Any): Int? {
if (o is Int) {
<caret>for (s in list) {
val length = s.length + o
if (length > 0) {
val x = length * o.hashCode()
return x
}
}
return null
}
return 0
}
@@ -0,0 +1,11 @@
// WITH_RUNTIME
fun foo(list: List<String>, o: Any): Int? {
if (o is Int) {
return list
.map { it.length + o }
.filter { it > 0 }
.map { it * o.hashCode() }
.firstOrNull()
}
return 0
}
@@ -0,0 +1,12 @@
// WITH_RUNTIME
// IS_APPLICABLE: false
fun foo(list: List<String>, o: Int?): Int? {
<caret>for (s in list) {
val length = s.length + o!!
if (length > 0) {
val x = length * o
return x
}
}
return null
}
@@ -0,0 +1,11 @@
// WITH_RUNTIME
fun foo(list: List<String>, o: Any): Int? {
<caret>for (s in list) {
val length = s.length + (o as Int)
if (length > 0) {
val x = length * o.hashCode()
return x
}
}
return null
}
@@ -0,0 +1,8 @@
// WITH_RUNTIME
fun foo(list: List<String>, o: Any): Int? {
<caret>return list
.map { it.length + (o as Int) }
.filter { it > 0 }
.map { it * o.hashCode() }
.firstOrNull()
}
@@ -0,0 +1,12 @@
// WITH_RUNTIME
// IS_APPLICABLE: false
fun foo(list: List<String>, o: Any): Int? {
<caret>for (s in list) {
val length = s.length + (o as Int)
if (length > 0) {
val x = length * o
return x
}
}
return null
}
@@ -0,0 +1,11 @@
// WITH_RUNTIME
// IS_APPLICABLE: false
fun foo(list: List<Any>, o: Any): Int? {
<caret>for (s in list) {
if (s is String && s.length > 0) {
val x = s.length * 2
return x
}
}
return null
}
@@ -0,0 +1,11 @@
// WITH_RUNTIME
// IS_APPLICABLE: false
fun Any.foo(list: List<String>): Int? {
<caret>for (s in list) {
if (s.length > 0 && this is String) {
val result = s.length + length
return result
}
}
return null
}