Extraction Engine: Generate function/property accessor with expression body (whenever applicable)

#KT-6405 Fixed
This commit is contained in:
Alexey Sedunov
2015-03-12 16:15:35 +03:00
parent 9d8cfd04d9
commit 9cb42944d1
92 changed files with 142 additions and 295 deletions
@@ -1,8 +1,6 @@
fun foo(a: Int): Int {
// SIBLING:
fun i(): Int {
return a + 10
}
fun i() = a + 10
return i()
}
@@ -1,9 +1,7 @@
fun foo() {
val a = 1
// SIBLING:
fun b1(): Boolean {
return a > 0
}
fun b1() = a > 0
if (b1()) {
fun b(): Int { return 0 }
@@ -3,7 +3,5 @@ trait T{
return i()
}
fun i(): Int {
return 1
}
fun i() = 1
}
@@ -8,6 +8,4 @@ fun foo(a: Int): Int {
return if (b(a, b)) 1 else if (a - b < 0) 2 else b
}
private fun b(a: Int, b: Int): Boolean {
return a + b > 0
}
private fun b(a: Int, b: Int) = a + b > 0
@@ -8,6 +8,4 @@ fun foo(a: Int): Int {
return if (a + b > 0) 1 else i(a, b)
}
private fun i(a: Int, b: Int): Int {
return if (a - b < 0) 2 else b
}
private fun i(a: Int, b: Int) = if (a - b < 0) 2 else b
@@ -4,6 +4,4 @@ fun foo(a: Int): Int {
return if (a + b > 0) i() else if (a - b < 0) 2 else b
}
private fun i(): Int {
return 1
}
private fun i() = 1
@@ -10,6 +10,4 @@ fun foo(a: Int): Int {
}
}
private fun i(b: Int): Int {
return b
}
private fun i(b: Int) = b
@@ -8,6 +8,4 @@ fun foo(a: Int): Int {
}
}
private fun i(): Int {
return 0
}
private fun i() = 0
@@ -12,6 +12,4 @@ fun foo(a: Int): Int {
}
}
private fun i(a: Int, b: Int): Int {
return a + b
}
private fun i(a: Int, b: Int) = a + b
@@ -5,6 +5,4 @@
// SIBLING:
fun foo(a: Int, b: Int): Int = i(a, b)
private fun i(a: Int, b: Int): Int {
return a + b
}
private fun i(a: Int, b: Int) = a + b
@@ -8,6 +8,4 @@ fun foo(a: Int): Int {
return i(a, b)
}
private fun i(a: Int, b: Int): Int {
return if (a + b > 0) 1 else if (a - b < 0) 2 else b
}
private fun i(a: Int, b: Int) = if (a + b > 0) 1 else if (a - b < 0) 2 else b
@@ -8,6 +8,4 @@ fun foo(a: Int): Int {
return i(a, b)
}
private fun i(a: Int, b: Int): Int {
return a + b
}
private fun i(a: Int, b: Int) = a + b
@@ -5,6 +5,4 @@ fun foo(t: Array<Int>) {
t.check(function())
}
private fun function(): (Int) -> Boolean {
return { it + 1 > 1 }
}
private fun function() = { it + 1 > 1 }
@@ -5,6 +5,4 @@ fun foo(t: Array<Int>) {
t.check(function())
}
private fun function(): (Int) -> Boolean {
return { it + 1 > 1 }
}
private fun function() = { it + 1 > 1 }
@@ -5,6 +5,4 @@ fun foo(t: Array<Int>) {
t.check(1, 2, function())
}
private fun function(): (Int) -> Boolean {
return { it + 1 > 1 }
}
private fun function() = { it + 1 > 1 }
@@ -5,6 +5,4 @@ fun foo(t: Array<Int>) {
t.check(a = 1, b = 2, f = function())
}
private fun function(): (Int) -> Boolean {
return { it + 1 > 1 }
}
private fun function() = { it + 1 > 1 }
@@ -11,6 +11,4 @@ fun foo(a: Int): Int {
return t
}
private fun i(a: Int, b: Int): Int {
return if (a > 0) throw Exception("") else a + b
}
private fun i(a: Int, b: Int) = if (a > 0) throw Exception("") else a + b
@@ -5,9 +5,7 @@ class A {
return i()
}
private fun i(): Int {
return a + b - 1
}
private fun i() = a + b - 1
}
}
}
@@ -8,8 +8,6 @@ class A {
return i(a, b)
}
private fun i(a: Int, b: Int): Int {
return a + b - 1
}
private fun i(a: Int, b: Int) = a + b - 1
}
}
@@ -9,7 +9,5 @@ class A {
}.invoke()
}
private fun i(a: Int, b: Int): Int {
return a + b - 1
}
private fun i(a: Int, b: Int) = a + b - 1
}
@@ -5,9 +5,7 @@ class A {
return i()
}
private fun i(): Int {
return a + b - 1
}
private fun i() = a + b - 1
}
return L().invoke()
@@ -1,7 +1,5 @@
fun foo(a: Int, b: Int): Int {
fun i(): Int {
return a + b - 1
}
fun i() = a + b - 1
fun bar() {
return i()
@@ -9,7 +9,5 @@ class A {
}.invoke()
}
private fun i(a: Int, b: Int): Int {
return a + b - 1
}
private fun i(a: Int, b: Int) = a + b - 1
}
@@ -6,6 +6,4 @@ fun foo(a: Int, b: Int): Int {
return i(a, b)
}
private fun i(a: Int, b: Int): Int {
return a + b - 1
}
private fun i(a: Int, b: Int) = a + b - 1
@@ -8,6 +8,4 @@ class A(a: Int, b: Int): T
class B(a: Int, b: Int): T by A(i(a, b), a - b)
private fun i(a: Int, b: Int): Int {
return a + b
}
private fun i(a: Int, b: Int) = a + b
@@ -6,6 +6,4 @@ class A(a: Int, b: Int): T
class B(t: T): T by t(t)
private fun t(t: T): T {
return t
}
private fun t(t: T) = t
@@ -6,6 +6,4 @@ open class A(a: Int, b: Int)
class B(a: Int, b: Int): A(i(a, b), a - b)
private fun i(a: Int, b: Int): Int {
return a + b
}
private fun i(a: Int, b: Int) = a + b
@@ -3,7 +3,5 @@ class A {
val x = i()
val y = i()
private fun i(): Int {
return 1 + 1
}
private fun i() = 1 + 1
}
@@ -4,6 +4,4 @@ fun foo() {
val y = i()
}
private fun i(): Int {
return 1 + 1
}
private fun i() = 1 + 1
@@ -5,6 +5,4 @@ fun main(args: Array<String>) {
val y = i()
}
private fun i(): Int {
return 1 + 1
}
private fun i() = 1 + 1
@@ -11,6 +11,4 @@ fun foo(): Int {
}
}
private fun i(s: String?): Int {
return s!!.length
}
private fun i(s: String?) = s!!.length
@@ -24,6 +24,4 @@ fun bar() {
i(f(), f())
}
private fun i(a: Int, b: Int): Int {
return a + b * a
}
private fun i(a: Int, b: Int) = a + b * a
@@ -1,7 +1,5 @@
class A(val a: Int, val b: Int) {
val foo: Int get() = i() - 1
private fun i(): Int {
return a + b
}
private fun i() = a + b
}
@@ -1,7 +1,5 @@
class A(val a: Int, val b: Int) {
val foo: Int get() = { i() - 1 }.invoke()
private fun i(): Int {
return a + b
}
private fun i() = a + b
}
@@ -2,6 +2,4 @@ val a = 1
val b = 1
val foo: Int get() = i() - 1
private fun i(): Int {
return a + b
}
private fun i() = a + b
@@ -2,6 +2,4 @@ val a = 1
val b = 1
val foo: Int get() = { i() - 1 }.invoke()
private fun i(): Int {
return a + b
}
private fun i() = a + b
@@ -5,7 +5,5 @@ class A(val a: Int, b: Int) {
println(i(b) - 1)
}
private fun i(b: Int): Int {
return a + b
}
private fun i(b: Int) = a + b
}
@@ -5,7 +5,5 @@ class A(val a: Int, b: Int) {
println({ i(b) - 1 }.invoke())
}
private fun i(b: Int): Int {
return a + b
}
private fun i(b: Int) = a + b
}
@@ -3,6 +3,4 @@
val n = 1
class A(val a: Int, val b: Int = i(a))
private fun i(a: Int): Int {
return a + n
}
private fun i(a: Int) = a + n
@@ -3,6 +3,4 @@
val n = 1
class A(val a: Int, val b: Int = { i(a) }.invoke())
private fun i(a: Int): Int {
return a + n
}
private fun i(a: Int) = a + n
@@ -3,9 +3,7 @@
// PARAM_DESCRIPTOR: value-parameter val a: kotlin.Int defined in bar.foo
// PARAM_DESCRIPTOR: value-parameter val b: kotlin.Int defined in bar.foo
fun bar(n: Int) {
fun i(a: Int, b: Int): Int {
return a + b - n
}
fun i(a: Int, b: Int) = a + b - n
fun foo(a: Int, b: Int) = i(a, b) - 1
}
@@ -3,9 +3,7 @@
// PARAM_DESCRIPTOR: value-parameter val a: kotlin.Int defined in bar.foo
// PARAM_DESCRIPTOR: value-parameter val b: kotlin.Int defined in bar.foo
fun bar(n: Int) {
fun i(a: Int, b: Int): Int {
return a + b - n
}
fun i(a: Int, b: Int) = a + b - n
fun foo(a: Int, b: Int) = { i(a, b) - 1 }.invoke()
}
@@ -5,7 +5,5 @@
class A(val n: Int) {
fun foo(a: Int, b: Int) = i(a, b) - 1
private fun i(a: Int, b: Int): Int {
return a + b - n
}
private fun i(a: Int, b: Int) = a + b - n
}
@@ -3,7 +3,5 @@
class A(val n: Int) {
fun foo(a: Int, b: Int = i(a)) = a + b - n - 1
private fun i(a: Int): Int {
return a + n
}
private fun i(a: Int) = a + n
}
@@ -3,7 +3,5 @@
class A(val n: Int) {
fun foo(a: Int, b: Int = { i(a) }.invoke()) = a + b - n - 1
private fun i(a: Int): Int {
return a + n
}
private fun i(a: Int) = a + n
}
@@ -5,7 +5,5 @@
class A(val n: Int) {
fun foo(a: Int, b: Int) = { i(a, b) - 1 }.invoke()
private fun i(a: Int, b: Int): Int {
return a + b - n
}
private fun i(a: Int, b: Int) = a + b - n
}
@@ -4,6 +4,4 @@
// PARAM_DESCRIPTOR: value-parameter val b: kotlin.Int defined in foo
fun foo(a: Int, b: Int) = i(a, b) - 1
private fun i(a: Int, b: Int): Int {
return a + b
}
private fun i(a: Int, b: Int) = a + b
@@ -3,6 +3,4 @@
val n = 1
fun foo(a: Int, b: Int = i(a)) = a + b - 1
private fun i(a: Int): Int {
return a + n
}
private fun i(a: Int) = a + n
@@ -3,6 +3,4 @@
val n = 1
fun foo(a: Int, b: Int = { i(a) }) = a + b - 1
private fun i(a: Int): Int {
return a + n
}
private fun i(a: Int) = a + n
@@ -4,6 +4,4 @@
// PARAM_DESCRIPTOR: value-parameter val b: kotlin.Int defined in foo
fun foo(a: Int, b: Int) = { i(a, b) - 1 }.invoke()
private fun i(a: Int, b: Int): Int {
return a + b
}
private fun i(a: Int, b: Int) = a + b
@@ -6,6 +6,4 @@ fun bar(a: Int, b: Int) {
val foo = i(a, b) - 1
}
private fun i(a: Int, b: Int): Int {
return a + b
}
private fun i(a: Int, b: Int) = a + b
@@ -6,6 +6,4 @@ fun bar(a: Int, b: Int) {
val foo = { i(a, b) - 1 }.invoke()
}
private fun i(a: Int, b: Int): Int {
return a + b
}
private fun i(a: Int, b: Int) = a + b
@@ -3,7 +3,5 @@
class A(val a: Int, b: Int) {
val foo = i(b) - 1
private fun i(b: Int): Int {
return a + b
}
private fun i(b: Int) = a + b
}
@@ -3,7 +3,5 @@
class A(val a: Int, b: Int) {
val foo = { i(b) - 1 }.invoke()
private fun i(b: Int): Int {
return a + b
}
private fun i(b: Int) = a + b
}
@@ -4,6 +4,4 @@ fun foo() {
val (a, b) = pair()
}
private fun pair(): Pair<Int, Int> {
return 1 to 2
}
private fun pair() = 1 to 2
@@ -2,6 +2,4 @@ val a = 1
val b = 1
val foo = i() - 1
private fun i(): Int {
return a + b
}
private fun i() = a + b
@@ -2,6 +2,4 @@ val a = 1
val b = 1
val foo = { i() - 1 }.invoke()
private fun i(): Int {
return a + b
}
private fun i() = a + b
@@ -7,6 +7,4 @@ fun test() {
val n = i(property)
}
private fun i(property: String?): Int? {
return property?.length()
}
private fun i(property: String?) = property?.length()
@@ -7,6 +7,4 @@ fun test() {
val n = i(property)
}
private fun i(property: String): Int {
return property.length()
}
private fun i(property: String) = property.length()
@@ -19,6 +19,4 @@ public class A(): Z() {
}
}
private fun i(a1: A, b1: A.B): Int {
return a1.a + b1.b + a1.z + b1.z
}
private fun i(a1: A, b1: A.B) = a1.a + b1.b + a1.z + b1.z
@@ -7,6 +7,4 @@ fun Z.foo(): Int {
return i() + 1
}
private fun Z.i(): Int {
return this.a
}
private fun Z.i() = this.a
@@ -19,6 +19,4 @@ public class A(): Z() {
}
}
private fun i(a1: A, b1: A.B): Int {
return a1.a + b1.b + b1.z
}
private fun i(a1: A, b1: A.B) = a1.a + b1.b + b1.z
@@ -19,6 +19,4 @@ public class A(): Z() {
}
}
private fun i(a1: A, b1: A.B): Int {
return a1.a + b1.b + a1.z + b1.z
}
private fun i(a1: A, b1: A.B) = a1.a + b1.b + a1.z + b1.z
@@ -7,6 +7,4 @@ fun Z.foo(): Int {
return i() + 1
}
private fun Z.i(): Int {
return this.a + a
}
private fun Z.i() = this.a + a
@@ -7,6 +7,4 @@ fun Z.foo(): Int {
return i() + 1
}
private fun Z.i(): Int {
return a
}
private fun Z.i() = a
@@ -19,6 +19,4 @@ public class A(): Z() {
}
}
private fun i(a1: A, b1: A.B): Int {
return a1.a + b1.b + b1.z
}
private fun i(a1: A, b1: A.B) = a1.a + b1.b + b1.z
@@ -9,9 +9,7 @@ class A {
fun B.foo() = i(this@A, this)
}
private fun i(a1: A, b: B): Int {
return a1.a + b.b
}
private fun i(a1: A, b: B) = a1.a + b.b
class B {
val b = 1
@@ -9,6 +9,4 @@ fun foo(t: Array<Array<Int>>) {
}
}
private fun i(it: Int): Int {
return it + 1
}
private fun i(it: Int) = it + 1
@@ -9,6 +9,4 @@ fun foo(t: Array<Int>) {
}
}
private fun b(t: Array<Int>): Boolean {
return t.check { it + 1 > 1 }
}
private fun b(t: Array<Int>) = t.check { it + 1 > 1 }
@@ -9,6 +9,4 @@ fun foo(t: Array<Array<Int>>) {
}
}
private fun b(it: Array<Int>): Boolean {
return it.check { it + 1 > 1 }
}
private fun b(it: Array<Int>) = it.check { it + 1 > 1 }
@@ -9,6 +9,4 @@ fun foo(t: Array<Int>) {
}
}
private fun i(it: Int): Int {
return it + 1
}
private fun i(it: Int) = it + 1
@@ -9,6 +9,4 @@ fun foo(a: Int, b: Int, c: Int): Int {
return i(a, b, c)
}
private fun i(a: Int, b: Int, c: Int): Int {
return (a + b * a - c) + b * c
}
private fun i(a: Int, b: Int, c: Int) = (a + b * a - c) + b * c
@@ -13,9 +13,7 @@ public class A() {
}
}
private fun i(a: A, t: Int, u: Int, x: Int): Int {
return a.bar(t - x, u + x)
}
private fun i(a: A, t: Int, u: Int, x: Int) = a.bar(t - x, u + x)
fun foo(a: A, x: Int): Int {
val t = 10
@@ -9,6 +9,4 @@ fun foo<V: Data>(v: V): Pair<Int, V> {
return pair(v)
}
private fun <V : Data> pair(v: V): Pair<Int, V> {
return Pair(v.x + 10, v)
}
private fun <V : Data> pair(v: V) = Pair(v.x + 10, v)
@@ -10,6 +10,4 @@ fun foo<V: Data>(v: V): Pair<Int, V> where V: DataEx {
return pair(v)
}
private fun <V : Data> pair(v: V): Pair<Int, V> where V : DataEx {
return Pair(v.x + 10, v)
}
private fun <V : Data> pair(v: V) where V : DataEx = Pair(v.x + 10, v)
@@ -9,6 +9,4 @@ class A<T> {
}
}
private fun <T> i(d: Data<T>): Int {
return d.t + 1
}
private fun <T> i(d: Data<T>) = d.t + 1
@@ -17,6 +17,4 @@ class A<T: Data>(val t: T) where T: DataEx {
}
}
private fun <T : Data, U : Data, V : Data> i(a: A<T>, b: A.B<U>, v: V): Int where T : DataEx, U : DataExEx, V : DataEx {
return a.t.x + b.u.x + v.x
}
private fun <T : Data, U : Data, V : Data> i(a: A<T>, b: A.B<U>, v: V) where T : DataEx, U : DataExEx, V : DataEx = a.t.x + b.u.x + v.x
@@ -14,7 +14,5 @@ class A<T: Data>(val t: T) where T: DataEx {
}
}
private fun <U : Data, V : Data> B<U>.i(v: V): Int where U : DataExEx, V : DataEx {
return t.x + u.x + v.x
}
private fun <U : Data, V : Data> B<U>.i(v: V) where U : DataExEx, V : DataEx = t.x + u.x + v.x
}
@@ -11,8 +11,6 @@ class A<T: Data>(val t: T) where T: DataEx {
return i(v)
}
private fun <V : Data> i(v: V): Int where V : DataEx {
return t.x + u.x + v.x
}
private fun <V : Data> i(v: V) where V : DataEx = t.x + u.x + v.x
}
}
@@ -15,6 +15,4 @@ class A<T: Data>(val t: T) {
}
}
private fun <T : Data, U : Data, V : Data> i(a: A<T>, b: A.B<U>, v: V): Int {
return a.t.x + b.u.x + v.x
}
private fun <T : Data, U : Data, V : Data> i(a: A<T>, b: A.B<U>, v: V) = a.t.x + b.u.x + v.x
@@ -12,7 +12,5 @@ class A<T: Data>(val t: T) {
}
}
private fun <U : Data, V : Data> B<U>.i(v: V): Int {
return t.x + u.x + v.x
}
private fun <U : Data, V : Data> B<U>.i(v: V) = t.x + u.x + v.x
}
@@ -9,8 +9,6 @@ class A<T: Data>(val t: T) {
return i(v)
}
private fun <V : Data> i(v: V): Int {
return t.x + u.x + v.x
}
private fun <V : Data> i(v: V) = t.x + u.x + v.x
}
}
@@ -12,6 +12,4 @@ class A<T: Data>(val t: T) where T: DataEx {
}
}
private fun <T : Data, V : Data> A<T>.i(v: V): Int where T : DataEx {
return t.x + v.x
}
private fun <T : Data, V : Data> A<T>.i(v: V) where T : DataEx = t.x + v.x