Extract Function: Allow capturing local function references as lambda parameters

This commit is contained in:
Alexey Sedunov
2015-04-13 14:37:18 +03:00
parent 86bb0d5bc5
commit daebf569ab
17 changed files with 212 additions and 9 deletions
@@ -0,0 +1,16 @@
// OPTIONS: true, false, false, false, true
// PARAM_DESCRIPTOR: local final fun baz(m: kotlin.Int): Int defined in foo.bar
// PARAM_DESCRIPTOR: value-parameter val n: kotlin.Int defined in foo
// PARAM_TYPES: (kotlin.Int) -> Int
// PARAM_TYPES: kotlin.Int
// SIBLING:
fun foo(n: Int): Int {
fun bar(): Int {
fun baz(m: Int) = m * n
return <selection>baz(n + 1)</selection>
}
return bar()
}
@@ -0,0 +1,18 @@
// OPTIONS: true, false, false, false, true
// PARAM_DESCRIPTOR: local final fun baz(m: kotlin.Int): Int defined in foo.bar
// PARAM_DESCRIPTOR: value-parameter val n: kotlin.Int defined in foo
// PARAM_TYPES: (kotlin.Int) -> Int
// PARAM_TYPES: kotlin.Int
// SIBLING:
fun foo(n: Int): Int {
fun bar(): Int {
fun baz(m: Int) = m * n
return i(::baz, n)
}
return bar()
}
private fun i(baz: (Int) -> Int, n: Int) = baz(n + 1)
@@ -0,0 +1,10 @@
// OPTIONS: true, false, false, false, true
// PARAM_DESCRIPTOR: local final fun kotlin.Int.bar(m: kotlin.Int): Int defined in foo
// PARAM_DESCRIPTOR: value-parameter val n: kotlin.Int defined in foo
// PARAM_TYPES: kotlin.Int.(kotlin.Int) -> Int
// PARAM_TYPES: kotlin.Int
fun foo(n: Int): Int {
fun Int.bar(m: Int) = this * m * n
return <selection>n.bar(n + 1)</selection>
}
@@ -0,0 +1,12 @@
// OPTIONS: true, false, false, false, true
// PARAM_DESCRIPTOR: local final fun kotlin.Int.bar(m: kotlin.Int): Int defined in foo
// PARAM_DESCRIPTOR: value-parameter val n: kotlin.Int defined in foo
// PARAM_TYPES: kotlin.Int.(kotlin.Int) -> Int
// PARAM_TYPES: kotlin.Int
fun foo(n: Int): Int {
fun Int.bar(m: Int) = this * m * n
return i(Int::bar, n)
}
private fun i(bar: Int.(Int) -> Int, n: Int) = n.bar(n + 1)
@@ -0,0 +1,13 @@
// OPTIONS: true, false, false, false, true
// PARAM_DESCRIPTOR: local final fun kotlin.Int.bar1(m: kotlin.Int): Int defined in foo
// PARAM_DESCRIPTOR: local final fun kotlin.Int.bar2(m: kotlin.Int): Int defined in foo
// PARAM_DESCRIPTOR: value-parameter val n: kotlin.Int defined in foo
// PARAM_TYPES: kotlin.Int.(kotlin.Int) -> Int
// PARAM_TYPES: kotlin.Int.(kotlin.Int) -> Int
// PARAM_TYPES: kotlin.Int
fun foo(n: Int): Int {
fun Int.bar1(m: Int) = this + m + n
fun Int.bar2(m: Int) = this * m * n
return <selection>n.bar1(n + 1).bar2(n + 2)</selection>
}
@@ -0,0 +1,15 @@
// OPTIONS: true, false, false, false, true
// PARAM_DESCRIPTOR: local final fun kotlin.Int.bar1(m: kotlin.Int): Int defined in foo
// PARAM_DESCRIPTOR: local final fun kotlin.Int.bar2(m: kotlin.Int): Int defined in foo
// PARAM_DESCRIPTOR: value-parameter val n: kotlin.Int defined in foo
// PARAM_TYPES: kotlin.Int.(kotlin.Int) -> Int
// PARAM_TYPES: kotlin.Int.(kotlin.Int) -> Int
// PARAM_TYPES: kotlin.Int
fun foo(n: Int): Int {
fun Int.bar1(m: Int) = this + m + n
fun Int.bar2(m: Int) = this * m * n
return i(Int::bar1, Int::bar2, n)
}
private fun i(bar1: Int.(Int) -> Int, bar2: Int.(Int) -> Int, n: Int) = n.bar1(n + 1).bar2(n + 2)
@@ -0,0 +1,10 @@
// OPTIONS: true, false, false, false, true
// PARAM_DESCRIPTOR: local final fun kotlin.Int.bar(m: kotlin.Int): Int defined in foo
// PARAM_DESCRIPTOR: value-parameter val n: kotlin.Int defined in foo
// PARAM_TYPES: kotlin.Int.(kotlin.Int) -> Int
// PARAM_TYPES: kotlin.Int
fun foo(n: Int): Int {
fun Int.bar(m: Int) = this * m * n
return <selection>n bar (n + 1)</selection>
}
@@ -0,0 +1,12 @@
// OPTIONS: true, false, false, false, true
// PARAM_DESCRIPTOR: local final fun kotlin.Int.bar(m: kotlin.Int): Int defined in foo
// PARAM_DESCRIPTOR: value-parameter val n: kotlin.Int defined in foo
// PARAM_TYPES: kotlin.Int.(kotlin.Int) -> Int
// PARAM_TYPES: kotlin.Int
fun foo(n: Int): Int {
fun Int.bar(m: Int) = this * m * n
return i(Int::bar, n)
}
private fun i(bar: Int.(Int) -> Int, n: Int) = n bar (n + 1)
@@ -0,0 +1,10 @@
// OPTIONS: true, false, false, false, true
// PARAM_DESCRIPTOR: local final fun bar(m: kotlin.Int): Int defined in foo
// PARAM_DESCRIPTOR: value-parameter val n: kotlin.Int defined in foo
// PARAM_TYPES: (kotlin.Int) -> Int
// PARAM_TYPES: kotlin.Int
fun foo(n: Int): Int {
fun bar(m: Int) = m * n
return <selection>bar(n + 1)</selection>
}
@@ -0,0 +1,12 @@
// OPTIONS: true, false, false, false, true
// PARAM_DESCRIPTOR: local final fun bar(m: kotlin.Int): Int defined in foo
// PARAM_DESCRIPTOR: value-parameter val n: kotlin.Int defined in foo
// PARAM_TYPES: (kotlin.Int) -> Int
// PARAM_TYPES: kotlin.Int
fun foo(n: Int): Int {
fun bar(m: Int) = m * n
return i(::bar, n)
}
private fun i(bar: (Int) -> Int, n: Int) = bar(n + 1)