Support smart casts after if (nullable ?: boolean) #KT-8492 Fixed

This commit is contained in:
Mikhail Glukhikh
2017-08-10 16:38:38 +03:00
parent 9be5cf89b4
commit b2d931fb1f
8 changed files with 160 additions and 2 deletions
@@ -0,0 +1,50 @@
// !LANGUAGE: -BooleanElvisBoundSmartCasts
interface Order {
val expired: Boolean?
fun notExpired(): Boolean
fun doSomething()
}
fun foo(o: Any) {
val order = o as? Order
if (order?.expired ?: false) {
order<!UNSAFE_CALL!>.<!>doSomething()
}
else {
}
if (order?.notExpired() ?: false) {
order<!UNSAFE_CALL!>.<!>doSomething()
}
}
fun bar(o: Any) {
val order = o as? Order
if (order?.expired ?: true) {
}
else {
order!!.doSomething()
}
if (order?.notExpired() ?: true) {
}
else {
order!!.doSomething()
}
}
fun baz(o: Boolean?) {
if (o ?: false) {
o<!UNSAFE_CALL!>.<!>hashCode()
}
if (o ?: true) {
}
else {
o<!UNSAFE_CALL!>.<!>hashCode()
}
}