Data flow values for Elvis / parenthesized expressions, smart casts on them
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
fun foo(s: Any?): String {
|
||||
val t = when {
|
||||
// To resolve: String U Nothing? = String?
|
||||
s is String -> s
|
||||
else -> null
|
||||
} ?: ""
|
||||
// Ideally we should have smart cast to String here
|
||||
return <!TYPE_MISMATCH!>t<!>
|
||||
}
|
||||
|
||||
fun bar(s: Any?): String {
|
||||
// To resolve: String U Nothing? = String?
|
||||
val t = (if (s == null) {
|
||||
null
|
||||
}
|
||||
else {
|
||||
val u: Any? = null
|
||||
if (u !is String) return ""
|
||||
u
|
||||
}) ?: "xyz"
|
||||
// Ideally we should have smart cast to String here
|
||||
return <!TYPE_MISMATCH!>t<!>
|
||||
}
|
||||
|
||||
fun baz(s: String?, r: String?): String {
|
||||
val t = r ?: when {
|
||||
s != null -> s
|
||||
else -> ""
|
||||
}
|
||||
return <!DEBUG_INFO_SMARTCAST!>t<!>
|
||||
}
|
||||
|
||||
fun withNull(s: String?): String {
|
||||
val t = s ?: null
|
||||
// Error: nullable
|
||||
return <!TYPE_MISMATCH!>t<!>
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
package
|
||||
|
||||
public fun bar(/*0*/ s: kotlin.Any?): kotlin.String
|
||||
public fun baz(/*0*/ s: kotlin.String?, /*1*/ r: kotlin.String?): kotlin.String
|
||||
public fun foo(/*0*/ s: kotlin.Any?): kotlin.String
|
||||
public fun withNull(/*0*/ s: kotlin.String?): kotlin.String
|
||||
@@ -0,0 +1,15 @@
|
||||
fun foo(s: String) = s.length
|
||||
|
||||
fun baz(s: String?, r: String?): Int {
|
||||
return foo(<!DEBUG_INFO_SMARTCAST!>r ?: when {
|
||||
s != null -> s
|
||||
else -> ""
|
||||
}<!>)
|
||||
}
|
||||
|
||||
fun bar(s: String?, r: String?): Int {
|
||||
return <!DEBUG_INFO_SMARTCAST!>(r ?: when {
|
||||
s != null -> s
|
||||
else -> ""
|
||||
})<!>.length
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package
|
||||
|
||||
public fun bar(/*0*/ s: kotlin.String?, /*1*/ r: kotlin.String?): kotlin.Int
|
||||
public fun baz(/*0*/ s: kotlin.String?, /*1*/ r: kotlin.String?): kotlin.Int
|
||||
public fun foo(/*0*/ s: kotlin.String): kotlin.Int
|
||||
Reference in New Issue
Block a user