FIR resolve: add partial support of extension lambda calls

Here we introduce ONLY_IMPLICIT_RECEIVER tower level
to support extension lambda calls on local variables,
and soften extension receiver checks to make such extensions visible & applicable.
Also here we try to map arguments twice for functional types
This commit is contained in:
Mikhail Glukhikh
2019-12-23 15:56:50 +03:00
parent 49e94f1ee3
commit de50f8aef3
65 changed files with 292 additions and 144 deletions
@@ -4,7 +4,7 @@ package a
import java.util.HashMap
private fun <T> test(value: T, extf: String.(value: T)->Unit) {
"".<!UNRESOLVED_REFERENCE!>extf<!>(value)
"".extf(value)
}
fun main() {
@@ -4,7 +4,7 @@ package kt2514
//+JDK
import java.io.Closeable
fun <T> Thread.use(block: Thread.() -> T): T = <!INAPPLICABLE_CANDIDATE!>block<!>()
fun <T> Thread.use(block: Thread.() -> T): T = block()
fun <T: Closeable, R> T.use(block: (T)-> R) : R = block(this)
@@ -7,7 +7,7 @@ interface Closeable {
class C : Closeable
public inline fun <T: Closeable, R> use(t: T, block: T.(T)-> R) : R {
return t.<!UNRESOLVED_REFERENCE!>block<!>(t)
return t.block(t)
}
fun test() {
@@ -7,7 +7,7 @@ interface Closeable {
class C : Closeable
public inline fun <T: Closeable, R> T.use(block: T.()-> R) : R {
return this.<!UNRESOLVED_REFERENCE!>block<!>()
return this.block()
}
fun test() {
@@ -15,7 +15,7 @@ fun Int.test(f: String.(Int) -> Unit) {
f("", 0)
<!INAPPLICABLE_CANDIDATE!>f<!>("")
with("") {
<!INAPPLICABLE_CANDIDATE!>f<!>(0)
f(0)
<!INAPPLICABLE_CANDIDATE!>f<!>(0.0)
}
}