Extract method refactoring should order parameters by first usage

Fixes #KT-16198
This commit is contained in:
Kirill Rakhman
2017-03-05 13:26:04 +01:00
committed by asedunov
parent 1296c5444b
commit 646f50dd66
30 changed files with 76 additions and 79 deletions
@@ -1,7 +1,7 @@
// PARAM_TYPES: kotlin.String, kotlin.Comparable<kotlin.String>, kotlin.CharSequence, java.io.Serializable, kotlin.Any
// PARAM_TYPES: X<kotlin.Any>
// PARAM_DESCRIPTOR: value-parameter s: kotlin.String? defined in foo
// PARAM_TYPES: kotlin.String, kotlin.Comparable<kotlin.String>, kotlin.CharSequence, java.io.Serializable, kotlin.Any
// PARAM_DESCRIPTOR: value-parameter x: X<kotlin.Any> defined in foo
// PARAM_DESCRIPTOR: value-parameter s: kotlin.String? defined in foo
class X<T> {
fun add(t: T) {
@@ -1,7 +1,7 @@
// PARAM_TYPES: kotlin.String, kotlin.Comparable<kotlin.String>, kotlin.CharSequence, java.io.Serializable, kotlin.Any
// PARAM_TYPES: X<kotlin.Any>
// PARAM_DESCRIPTOR: value-parameter s: kotlin.String? defined in foo
// PARAM_TYPES: kotlin.String, kotlin.Comparable<kotlin.String>, kotlin.CharSequence, java.io.Serializable, kotlin.Any
// PARAM_DESCRIPTOR: value-parameter x: X<kotlin.Any> defined in foo
// PARAM_DESCRIPTOR: value-parameter s: kotlin.String? defined in foo
class X<T> {
fun add(t: T) {
@@ -11,10 +11,10 @@ class X<T> {
// SIBLING:
fun foo(s: String?, x: X<Any>) {
when {
s != null -> __dummyTestFun__(s, x)
s != null -> __dummyTestFun__(x, s)
}
}
private fun __dummyTestFun__(s: String, x: X<Any>) {
private fun __dummyTestFun__(x: X<Any>, s: String) {
x.add(s)
}
@@ -1,7 +1,7 @@
// PARAM_TYPES: kotlin.String?, kotlin.Comparable<kotlin.String>?, kotlin.CharSequence?, java.io.Serializable?, kotlin.Any?
// PARAM_TYPES: X<kotlin.Any?>
// PARAM_DESCRIPTOR: value-parameter s: kotlin.String? defined in foo
// PARAM_TYPES: kotlin.String?, kotlin.Comparable<kotlin.String>?, kotlin.CharSequence?, java.io.Serializable?, kotlin.Any?
// PARAM_DESCRIPTOR: value-parameter x: X<kotlin.Any?> defined in foo
// PARAM_DESCRIPTOR: value-parameter s: kotlin.String? defined in foo
class X<T> {
fun add(t: T) {
@@ -1,7 +1,7 @@
// PARAM_TYPES: kotlin.String?, kotlin.Comparable<kotlin.String>?, kotlin.CharSequence?, java.io.Serializable?, kotlin.Any?
// PARAM_TYPES: X<kotlin.Any?>
// PARAM_DESCRIPTOR: value-parameter s: kotlin.String? defined in foo
// PARAM_TYPES: kotlin.String?, kotlin.Comparable<kotlin.String>?, kotlin.CharSequence?, java.io.Serializable?, kotlin.Any?
// PARAM_DESCRIPTOR: value-parameter x: X<kotlin.Any?> defined in foo
// PARAM_DESCRIPTOR: value-parameter s: kotlin.String? defined in foo
class X<T> {
fun add(t: T) {
@@ -11,10 +11,10 @@ class X<T> {
// SIBLING:
fun foo(s: String?, x: X<Any?>) {
when {
s != null -> __dummyTestFun__(s, x)
s != null -> __dummyTestFun__(x, s)
}
}
private fun __dummyTestFun__(s: String?, x: X<Any?>) {
private fun __dummyTestFun__(x: X<Any?>, s: String?) {
x.add(s)
}
@@ -1,8 +1,8 @@
// OPTIONS: true, false, false, false, true, false
// PARAM_DESCRIPTOR: local final fun kotlin.Int.bar(m: kotlin.Int): kotlin.Int defined in foo
// PARAM_DESCRIPTOR: value-parameter n: kotlin.Int defined in foo
// PARAM_TYPES: kotlin.Int.(m: kotlin.Int) -> kotlin.Int
// PARAM_DESCRIPTOR: local final fun kotlin.Int.bar(m: kotlin.Int): kotlin.Int defined in foo
// PARAM_TYPES: kotlin.Int
// PARAM_TYPES: kotlin.Int.(m: kotlin.Int) -> kotlin.Int
fun foo(n: Int): Int {
fun Int.bar(m: Int) = this * m * n
@@ -1,12 +1,12 @@
// OPTIONS: true, false, false, false, true, false
// PARAM_DESCRIPTOR: local final fun kotlin.Int.bar(m: kotlin.Int): kotlin.Int defined in foo
// PARAM_DESCRIPTOR: value-parameter n: kotlin.Int defined in foo
// PARAM_TYPES: kotlin.Int.(m: kotlin.Int) -> kotlin.Int
// PARAM_DESCRIPTOR: local final fun kotlin.Int.bar(m: kotlin.Int): kotlin.Int defined in foo
// PARAM_TYPES: kotlin.Int
// PARAM_TYPES: kotlin.Int.(m: kotlin.Int) -> kotlin.Int
fun foo(n: Int): Int {
fun Int.bar(m: Int) = this * m * n
return i(Int::bar, n)
return i(n, Int::bar)
}
private fun i(bar: Int.(m: Int) -> Int, n: Int) = n.bar(n + 1)
private fun i(n: Int, bar: Int.(m: Int) -> Int) = n.bar(n + 1)
@@ -1,10 +1,11 @@
// OPTIONS: true, false, false, false, true, false
// PARAM_DESCRIPTOR: value-parameter n: kotlin.Int defined in foo
// PARAM_DESCRIPTOR: local final fun kotlin.Int.bar1(m: kotlin.Int): kotlin.Int defined in foo
// PARAM_DESCRIPTOR: local final fun kotlin.Int.bar2(m: kotlin.Int): kotlin.Int defined in foo
// PARAM_DESCRIPTOR: value-parameter n: kotlin.Int defined in foo
// PARAM_TYPES: kotlin.Int.(m: kotlin.Int) -> kotlin.Int
// PARAM_TYPES: kotlin.Int.(m: kotlin.Int) -> kotlin.Int
// PARAM_TYPES: kotlin.Int
// PARAM_TYPES: kotlin.Int.(m: kotlin.Int) -> kotlin.Int
// PARAM_TYPES: kotlin.Int.(m: kotlin.Int) -> kotlin.Int
fun foo(n: Int): Int {
fun Int.bar1(m: Int) = this + m + n
fun Int.bar2(m: Int) = this * m * n
@@ -1,15 +1,16 @@
// OPTIONS: true, false, false, false, true, false
// PARAM_DESCRIPTOR: value-parameter n: kotlin.Int defined in foo
// PARAM_DESCRIPTOR: local final fun kotlin.Int.bar1(m: kotlin.Int): kotlin.Int defined in foo
// PARAM_DESCRIPTOR: local final fun kotlin.Int.bar2(m: kotlin.Int): kotlin.Int defined in foo
// PARAM_DESCRIPTOR: value-parameter n: kotlin.Int defined in foo
// PARAM_TYPES: kotlin.Int.(m: kotlin.Int) -> kotlin.Int
// PARAM_TYPES: kotlin.Int.(m: kotlin.Int) -> kotlin.Int
// PARAM_TYPES: kotlin.Int
// PARAM_TYPES: kotlin.Int.(m: kotlin.Int) -> kotlin.Int
// PARAM_TYPES: kotlin.Int.(m: kotlin.Int) -> 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)
return i(n, Int::bar1, Int::bar2)
}
private fun i(bar1: Int.(m: Int) -> Int, bar2: Int.(m: Int) -> Int, n: Int) = n.bar1(n + 1).bar2(n + 2)
private fun i(n: Int, bar1: Int.(m: Int) -> Int, bar2: Int.(m: Int) -> Int) = n.bar1(n + 1).bar2(n + 2)
@@ -1,8 +1,8 @@
// OPTIONS: true, false, false, false, true, false
// PARAM_DESCRIPTOR: local final fun kotlin.Int.bar(m: kotlin.Int): kotlin.Int defined in foo
// PARAM_DESCRIPTOR: value-parameter n: kotlin.Int defined in foo
// PARAM_TYPES: kotlin.Int.(m: kotlin.Int) -> kotlin.Int
// PARAM_DESCRIPTOR: local final fun kotlin.Int.bar(m: kotlin.Int): kotlin.Int defined in foo
// PARAM_TYPES: kotlin.Int
// PARAM_TYPES: kotlin.Int.(m: kotlin.Int) -> kotlin.Int
fun foo(n: Int): Int {
fun Int.bar(m: Int) = this * m * n
@@ -1,12 +1,12 @@
// OPTIONS: true, false, false, false, true, false
// PARAM_DESCRIPTOR: local final fun kotlin.Int.bar(m: kotlin.Int): kotlin.Int defined in foo
// PARAM_DESCRIPTOR: value-parameter n: kotlin.Int defined in foo
// PARAM_TYPES: kotlin.Int.(m: kotlin.Int) -> kotlin.Int
// PARAM_DESCRIPTOR: local final fun kotlin.Int.bar(m: kotlin.Int): kotlin.Int defined in foo
// PARAM_TYPES: kotlin.Int
// PARAM_TYPES: kotlin.Int.(m: kotlin.Int) -> kotlin.Int
fun foo(n: Int): Int {
fun Int.bar(m: Int) = this * m * n
return i(Int::bar, n)
return i(n, Int::bar)
}
private fun i(bar: Int.(m: Int) -> Int, n: Int) = n bar (n + 1)
private fun i(n: Int, bar: Int.(m: Int) -> Int) = n bar (n + 1)
@@ -4,8 +4,8 @@
// PARAM_TYPES: kotlin.Int
// PARAM_DESCRIPTOR: value-parameter a: A defined in foo
// PARAM_DESCRIPTOR: val t: kotlin.Int defined in foo
// PARAM_DESCRIPTOR: val u: kotlin.Int defined in foo
// PARAM_DESCRIPTOR: value-parameter x: kotlin.Int defined in foo
// PARAM_DESCRIPTOR: val u: kotlin.Int defined in foo
// SIBLING:
public class A() {
fun bar(a: Int, b: Int): Int {
@@ -4,8 +4,8 @@
// PARAM_TYPES: kotlin.Int
// PARAM_DESCRIPTOR: value-parameter a: A defined in foo
// PARAM_DESCRIPTOR: val t: kotlin.Int defined in foo
// PARAM_DESCRIPTOR: val u: kotlin.Int defined in foo
// PARAM_DESCRIPTOR: value-parameter x: kotlin.Int defined in foo
// PARAM_DESCRIPTOR: val u: kotlin.Int defined in foo
// SIBLING:
public class A() {
fun bar(a: Int, b: Int): Int {
@@ -13,10 +13,10 @@ public class A() {
}
}
private fun i(a: A, t: Int, u: Int, x: Int) = a.bar(t - x, u + x)
private fun i(a: A, t: Int, x: Int, u: Int) = a.bar(t - x, u + x)
fun foo(a: A, x: Int): Int {
val t = 10
val u = 20
return i(a, t, u, x)
return i(a, t, x, u)
}