Extract Function: Allow to extract local variables which are used outside of extracted fragment

This commit is contained in:
Alexey Sedunov
2014-07-03 18:55:11 +04:00
parent 540e8b8b46
commit d95f6383b7
35 changed files with 439 additions and 93 deletions
@@ -0,0 +1,18 @@
// PARAM_TYPES: kotlin.Int
// PARAM_TYPES: kotlin.Int
// PARAM_DESCRIPTOR: value-parameter val a: kotlin.Int defined in foo
// PARAM_DESCRIPTOR: val b: kotlin.Int defined in foo
// SIBLING:
fun foo(a: Int): Int {
val b: Int = 1
for (n in 1..a) {
<selection>if (a + b > 0) break
val c: Int
println(a - b)
if (a - b > 0) break
println(a + b)</selection>
c = 1
println(c)
}
return 1
}
@@ -0,0 +1,24 @@
// PARAM_TYPES: kotlin.Int
// PARAM_TYPES: kotlin.Int
// PARAM_DESCRIPTOR: value-parameter val a: kotlin.Int defined in foo
// PARAM_DESCRIPTOR: val b: kotlin.Int defined in foo
// SIBLING:
fun foo(a: Int): Int {
val b: Int = 1
for (n in 1..a) {
val c: Int
if (b(a, b)) break
c = 1
println(c)
}
return 1
}
fun b(a: Int, b: Int): Boolean {
if (a + b > 0) return true
val c: Int
println(a - b)
if (a - b > 0) return true
println(a + b)
return false
}
@@ -0,0 +1,17 @@
// PARAM_TYPES: kotlin.Int, Comparable<Int>
// PARAM_TYPES: kotlin.Int, Number, Comparable<Int>, Any
// PARAM_DESCRIPTOR: value-parameter val a: kotlin.Int defined in foo
// PARAM_DESCRIPTOR: val b: kotlin.Int defined in foo
// SIBLING:
fun foo(a: Int) {
val b: Int = 1
<selection>if(a > 0) {
println(a)
}
val c: Int
println(b)</selection>
c = 1
println(c)
}
@@ -0,0 +1,22 @@
// PARAM_TYPES: kotlin.Int, Comparable<Int>
// PARAM_TYPES: kotlin.Int, Number, Comparable<Int>, Any
// PARAM_DESCRIPTOR: value-parameter val a: kotlin.Int defined in foo
// PARAM_DESCRIPTOR: val b: kotlin.Int defined in foo
// SIBLING:
fun foo(a: Int) {
val b: Int = 1
val c: Int
unit(a, b)
c = 1
println(c)
}
fun unit(a: Int, b: Int) {
if (a > 0) {
println(a)
}
val c: Int
println(b)
}
@@ -0,0 +1,5 @@
// SIBLING:
fun foo() {
<selection>val a = 10</selection>
println(a)
}
@@ -0,0 +1,10 @@
// SIBLING:
fun foo() {
val a = i()
println(a)
}
fun i(): Int {
val a = 10
return a
}
@@ -0,0 +1,10 @@
// SIBLING:
fun foo() {
<selection>val a: Int
val b = 10
val c: Int
</selection>
a = 1
c = 2
println(a + b + c)
}
@@ -0,0 +1,17 @@
// SIBLING:
fun foo() {
val a: Int
val b = i()
val c: Int
a = 1
c = 2
println(a + b + c)
}
fun i(): Int {
val a: Int
val b = 10
val c: Int
return b
}
@@ -0,0 +1,9 @@
// SIBLING:
fun foo() {
<selection>val a: Int
val b = 10
val c: Int = 1
</selection>
a = 2
println(a + b)
}
@@ -0,0 +1,15 @@
// SIBLING:
fun foo() {
val a: Int
val b = i()
a = 2
println(a + b)
}
fun i(): Int {
val a: Int
val b = 10
val c: Int = 1
return b
}
@@ -0,0 +1,6 @@
// SIBLING:
fun foo() {
<selection>val a: Int
a = 10</selection>
println(a)
}
@@ -0,0 +1,11 @@
// SIBLING:
fun foo() {
val a: Int = i()
println(a)
}
fun i(): Int {
val a: Int
a = 10
return a
}
@@ -0,0 +1,16 @@
// SIBLING:
fun main(args: Array<String>) {
val a = i()
val t = object: T {
override fun foo(n: Int) = n + a
}
}
fun i(): Int {
val a = 1
return a
}
trait T {
fun foo(n: Int): Int
}
@@ -0,0 +1,14 @@
// SIBLING:
fun main(args: Array<String>) {
val a = i()
lambda {
a
}
}
fun i(): Int {
val a = 1
return a
}
fun lambda(f: () -> Unit) {}
@@ -0,0 +1,10 @@
// SIBLING:
fun main(args: Array<String>) {
val a = i()
fun foo() = a
}
fun i(): Int {
val a = 1
return a
}
@@ -0,0 +1,6 @@
// SIBLING:
fun foo() {
<selection>val a = 1
val b = 2</selection>
println(a + b)
}
@@ -0,0 +1 @@
Selected code fragment has multiple output values: a b
@@ -1 +0,0 @@
Following variables are used outside of selected code fragment: a
@@ -1 +0,0 @@
Following variables are used outside of selected code fragment: a
@@ -1 +0,0 @@
Following variables are used outside of selected code fragment: a