Receiver smart casts: additional test for a?.b() when b is invokable property

This commit is contained in:
Mikhail Glukhikh
2016-07-25 10:39:30 +03:00
parent 692623cb55
commit 7c66f632ca
2 changed files with 30 additions and 0 deletions
@@ -121,4 +121,16 @@ fun falsePositive(w: Wrapper) {
// Here we should NOT have smart cast
<!SMARTCAST_IMPOSSIBLE!>w.unwrap()<!>.length
}
}
class Invokable(val x: String) {
operator fun invoke() = x
}
class InvokableProperty(val i: Invokable)
fun checkInvokable(ip: InvokableProperty?) {
if (ip?.<!UNSAFE_IMPLICIT_INVOKE_CALL!>i<!>() == "Hello") {
<!DEBUG_INFO_SMARTCAST!>ip<!>.hashCode()
}
}
@@ -1,5 +1,6 @@
package
public fun checkInvokable(/*0*/ ip: InvokableProperty?): kotlin.Unit
public fun falsePositive(/*0*/ w: Wrapper): kotlin.Unit
public fun getA(): A?
public fun handleGet(/*0*/ arg: HttpExchange): HttpExchange
@@ -35,6 +36,23 @@ public final class HttpExchange {
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class Invokable {
public constructor Invokable(/*0*/ x: kotlin.String)
public final val x: kotlin.String
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public final operator fun invoke(): kotlin.String
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class InvokableProperty {
public constructor InvokableProperty(/*0*/ i: Invokable)
public final val i: Invokable
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public open class SomeClass {
public constructor SomeClass(/*0*/ data: kotlin.Any)
public final val data: kotlin.Any