Handling of 2 more class of cases:

1. Function has parameter of functional type with our data class inside
2. Value of data class type used in a call with lambda
This commit is contained in:
Valentin Kipyatkov
2016-08-26 18:56:32 +03:00
parent ca2cd3d656
commit 5b3102058c
4 changed files with 158 additions and 47 deletions
@@ -0,0 +1,31 @@
package pack4
import pack.A
fun takeExtFun(p: A.() -> Unit) {
}
fun takeFun1(p: (A) -> Unit) {
}
fun takeFun2(p: ((A?, Int) -> Unit)?) {
}
fun takeFun3(p: (List<A>) -> Unit) {
}
fun takeFuns(p: MutableList<(A) -> Unit>) {
p[0] = { val (x, y) = it }
}
fun <T> x(p1: T, p2: (T) -> Unit){}
fun foo(p: A) {
takeExtFun { val (x, y) = this }
takeFun1 { val (x, y) = it }
takeFun2 { a, n -> val (x, y) = a!! }
takeFun3 { val (x, y) = it[0] }
x(p) { val (x, y) = it }
}
@@ -0,0 +1,11 @@
package pack5
import pack.A
var Any.v: (A) -> Unit
get() = TODO()
set(value) = TODO()
fun f() {
"".v = { val (x, y ) = it }
}
@@ -15,4 +15,11 @@
[dataClass.2.kt] Value read 8 val (x, y, z) = a
[dataClass.2.kt] Value read 9 val (x1, y1, z1) = f()
[dataClass.3.kt] Value read 12 val (x, y, z) = a
[dataClass.3.kt] Value read 15 val (x1, y1, z1) = a1
[dataClass.3.kt] Value read 15 val (x1, y1, z1) = a1
[dataClass.4.kt] Value read 18 p[0] = { val (x, y) = it }
[dataClass.4.kt] Value read 24 takeExtFun { val (x, y) = this }
[dataClass.4.kt] Value read 26 takeFun1 { val (x, y) = it }
[dataClass.4.kt] Value read 27 takeFun2 { a, n -> val (x, y) = a!! }
[dataClass.4.kt] Value read 28 takeFun3 { val (x, y) = it[0] }
[dataClass.4.kt] Value read 30 x(p) { val (x, y) = it }
[dataClass.5.kt] Value read 10 "".v = { val (x, y ) = it }