DFA: take into account if / else and when expression assignments #KT-10002 Fixed

Also #KT-7479 Fixed
This commit is contained in:
Mikhail Glukhikh
2015-11-17 13:50:22 +03:00
parent e7fc6bcc6e
commit 7cd867b936
10 changed files with 102 additions and 4 deletions
@@ -0,0 +1,19 @@
fun baz(s: String?): String {
// If String type is given explicitly, problem disappears
val t = if (s == null) {
""
}
else {
val u: String? = null
if (u == null) return ""
// !! is detected as unnecessary here
u
}
return <!DEBUG_INFO_SMARTCAST!>t<!>
}
fun foo(s: String?): String {
if (s == null) return ""
val t = if (s == "abc") <!DEBUG_INFO_SMARTCAST!>s<!> else "xyz"
return t
}
@@ -0,0 +1,4 @@
package
public fun baz(/*0*/ s: kotlin.String?): kotlin.String
public fun foo(/*0*/ s: kotlin.String?): kotlin.String
@@ -0,0 +1,18 @@
fun baz(s: String?): String {
if (s == null) return ""
// if explicit type String is given for t, problem disappears
val t = when(<!DEBUG_INFO_SMARTCAST!>s<!>) {
// !! is detected as unnecessary here
"abc" -> s
else -> "xyz"
}
return <!DEBUG_INFO_SMARTCAST!>t<!>
}
fun foo(s: String?): String {
val t = when {
s != null -> s
else -> ""
}
return <!DEBUG_INFO_SMARTCAST!>t<!>
}
@@ -0,0 +1,4 @@
package
public fun baz(/*0*/ s: kotlin.String?): kotlin.String
public fun foo(/*0*/ s: kotlin.String?): kotlin.String