Call chains: receiver data flow info is dropped for extensions with nullable receiver #KT-10056 Fixed

This commit is contained in:
Mikhail Glukhikh
2015-11-18 14:41:48 +03:00
parent 97cdaba8b0
commit 8788d8e2d5
11 changed files with 198 additions and 5 deletions
@@ -0,0 +1,27 @@
// FILE: Foo.java
public class Foo {
public String bar;
private Foo(String bar) {
this.bar = bar;
}
public static Foo create(String bar) {
return new Foo(bar);
}
}
// FILE: Test.kt
public inline fun <T, R> T.let(f: (T) -> R): R = f(this)
fun test() {
val foo = Foo.create(null)
foo?.bar.let {
// Error, foo?.bar is nullable
it<!UNSAFE_CALL!>.<!>length
// Foo is nullable but flexible, so call is considered safe here
foo.bar.length
// Correct
foo?.bar?.length
}
}