diff --git a/generators/src/org/jetbrains/jet/generators/tests/GenerateTests.kt b/generators/src/org/jetbrains/jet/generators/tests/GenerateTests.kt index 4681d3fab02..c0bbe1f6fef 100644 --- a/generators/src/org/jetbrains/jet/generators/tests/GenerateTests.kt +++ b/generators/src/org/jetbrains/jet/generators/tests/GenerateTests.kt @@ -565,6 +565,7 @@ fun main(args: Array) { testClass(javaClass()) { model("refactoring/introduceVariable", extension = "kt", testMethod = "doIntroduceVariableTest") + model("refactoring/extractFunction", extension = "kt", testMethod = "doExtractFunctionTest") } } diff --git a/idea/testData/refactoring/extractFunction/basic/malformedExpression.kt b/idea/testData/refactoring/extractFunction/basic/malformedExpression.kt new file mode 100644 index 00000000000..b05110f5563 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/basic/malformedExpression.kt @@ -0,0 +1,4 @@ +fun foo(a: Int): Int { + val b: Int = 1 + return a + b*a +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/basic/malformedExpression.kt.conflicts b/idea/testData/refactoring/extractFunction/basic/malformedExpression.kt.conflicts new file mode 100644 index 00000000000..21617cc617d --- /dev/null +++ b/idea/testData/refactoring/extractFunction/basic/malformedExpression.kt.conflicts @@ -0,0 +1 @@ +Cannot perform refactoring without an expression \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/basic/malformedStatements.kt b/idea/testData/refactoring/extractFunction/basic/malformedStatements.kt new file mode 100644 index 00000000000..7887978cb33 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/basic/malformedStatements.kt @@ -0,0 +1,9 @@ +fun foo(a: Int): Int { + val b: Int = 1 + val c: Int = 1 + + println(a) + println(b) + println(c) + return a + b*c +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/basic/malformedStatements.kt.conflicts b/idea/testData/refactoring/extractFunction/basic/malformedStatements.kt.conflicts new file mode 100644 index 00000000000..21617cc617d --- /dev/null +++ b/idea/testData/refactoring/extractFunction/basic/malformedStatements.kt.conflicts @@ -0,0 +1 @@ +Cannot perform refactoring without an expression \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalBreakWithIf.kt b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalBreakWithIf.kt new file mode 100644 index 00000000000..06e39ec903c --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalBreakWithIf.kt @@ -0,0 +1,11 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + val b: Int = 1 + for (n in 1..a) { + if (a + b > 0) break + println(a - b) + if (a - b > 0) break + println(a + b) + } + return 1 +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalBreakWithIf.kt.after b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalBreakWithIf.kt.after new file mode 100644 index 00000000000..61293509d3f --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalBreakWithIf.kt.after @@ -0,0 +1,16 @@ +// NEXT_SIBLING: +fun b(a: Int, b: Int): Boolean { + if (a + b > 0) return true + println(a - b) + if (a - b > 0) return true + println(a + b) + return false +} + +fun foo(a: Int): Int { + val b: Int = 1 + for (n in 1..a) { + if (b(a, b)) break + } + return 1 +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalBreakWithIfElse.kt b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalBreakWithIfElse.kt new file mode 100644 index 00000000000..63958876889 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalBreakWithIfElse.kt @@ -0,0 +1,13 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + val b: Int = 1 + for (n in 1..a) { + if (a + b > 0) break + else { + println(a - b) + if (a - b > 0) break else println(a + b) + } + + } + return 1 +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalBreakWithIfElse.kt.after b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalBreakWithIfElse.kt.after new file mode 100644 index 00000000000..c7c713ea5ae --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalBreakWithIfElse.kt.after @@ -0,0 +1,18 @@ +// NEXT_SIBLING: +fun b(a: Int, b: Int): Boolean { + if (a + b > 0) return true + else { + println(a - b) + if (a - b > 0) return true else println(a + b) + } + return false +} + +fun foo(a: Int): Int { + val b: Int = 1 + for (n in 1..a) { + if (b(a, b)) break + + } + return 1 +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalBreakWithWhen.kt b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalBreakWithWhen.kt new file mode 100644 index 00000000000..c81a34a83e9 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalBreakWithWhen.kt @@ -0,0 +1,12 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + val b: Int = 1 + for (n in 1..a) { + when { + a + b > 0 -> break + a - b > 0 -> break + else -> println(0) + } + } + return 1 +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalBreakWithWhen.kt.after b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalBreakWithWhen.kt.after new file mode 100644 index 00000000000..13aa5e4459b --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalBreakWithWhen.kt.after @@ -0,0 +1,17 @@ +// NEXT_SIBLING: +fun b(a: Int, b: Int): Boolean { + when { + a + b > 0 -> return true + a - b > 0 -> return true + else -> println(0) + } + return false +} + +fun foo(a: Int): Int { + val b: Int = 1 + for (n in 1..a) { + if (b(a, b)) break + } + return 1 +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalReturnWithIf.kt b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalReturnWithIf.kt new file mode 100644 index 00000000000..a0dd31adbe5 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalReturnWithIf.kt @@ -0,0 +1,7 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + val b: Int = 1 + if (a + b > 0) return 0 + println(a - b) + return 1 +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalReturnWithIf.kt.after b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalReturnWithIf.kt.after new file mode 100644 index 00000000000..6866c6eace0 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalReturnWithIf.kt.after @@ -0,0 +1,12 @@ +// NEXT_SIBLING: +fun b(a: Int, b: Int): Boolean { + if (a + b > 0) return true + println(a - b) + return false +} + +fun foo(a: Int): Int { + val b: Int = 1 + if (b(a, b)) return 0 + return 1 +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalReturnWithIfElse.kt b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalReturnWithIfElse.kt new file mode 100644 index 00000000000..023ff58f138 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalReturnWithIfElse.kt @@ -0,0 +1,8 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + val b: Int = 1 + if (a + b > 0) return 0 + else if (a - b < 0) println(a - b) + else println(0) + return 1 +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalReturnWithIfElse.kt.after b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalReturnWithIfElse.kt.after new file mode 100644 index 00000000000..062b5fb5f70 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalReturnWithIfElse.kt.after @@ -0,0 +1,13 @@ +// NEXT_SIBLING: +fun b(a: Int, b: Int): Boolean { + if (a + b > 0) return true + else if (a - b < 0) println(a - b) + else println(0) + return false +} + +fun foo(a: Int): Int { + val b: Int = 1 + if (b(a, b)) return 0 + return 1 +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalReturnWithWhen.kt b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalReturnWithWhen.kt new file mode 100644 index 00000000000..aa2be0cb790 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalReturnWithWhen.kt @@ -0,0 +1,11 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + val b: Int = 1 + when (a + b) { + 0 -> return 0 + 1 -> println(1) + else -> println(2) + } + + return 1 +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalReturnWithWhen.kt.after b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalReturnWithWhen.kt.after new file mode 100644 index 00000000000..39b12fac80b --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalReturnWithWhen.kt.after @@ -0,0 +1,16 @@ +// NEXT_SIBLING: +fun b(a: Int, b: Int): Boolean { + when (a + b) { + 0 -> return true + 1 -> println(1) + else -> println(2) + } + return false +} + +fun foo(a: Int): Int { + val b: Int = 1 + if (b(a, b)) return 0 + + return 1 +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/unconditionalBreakWithIf.kt b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/unconditionalBreakWithIf.kt new file mode 100644 index 00000000000..1cd2217b5c4 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/unconditionalBreakWithIf.kt @@ -0,0 +1,10 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + val b: Int = 1 + for (n in 1..a) { + if (a + b > 0) break + println(a - b) + break + } + return 1 +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/unconditionalBreakWithIf.kt.after b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/unconditionalBreakWithIf.kt.after new file mode 100644 index 00000000000..fe159a70a3c --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/unconditionalBreakWithIf.kt.after @@ -0,0 +1,15 @@ +// NEXT_SIBLING: +fun unit(a: Int, b: Int) { + if (a + b > 0) return + println(a - b) + return +} + +fun foo(a: Int): Int { + val b: Int = 1 + for (n in 1..a) { + unit(a, b) + break + } + return 1 +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/unconditionalBreakWithIfElse.kt b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/unconditionalBreakWithIfElse.kt new file mode 100644 index 00000000000..2c3dd73680f --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/unconditionalBreakWithIfElse.kt @@ -0,0 +1,12 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + val b: Int = 1 + for (n in 1..a) { + if (a + b > 0) break + else { + println(a - b) + break + } + } + return 1 +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/unconditionalBreakWithIfElse.kt.after b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/unconditionalBreakWithIfElse.kt.after new file mode 100644 index 00000000000..edc1c4c378a --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/unconditionalBreakWithIfElse.kt.after @@ -0,0 +1,17 @@ +// NEXT_SIBLING: +fun unit(a: Int, b: Int) { + if (a + b > 0) return + else { + println(a - b) + return + } +} + +fun foo(a: Int): Int { + val b: Int = 1 + for (n in 1..a) { + unit(a, b) + break + } + return 1 +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/unconditionalBreakWithWhen.kt b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/unconditionalBreakWithWhen.kt new file mode 100644 index 00000000000..2a6c92814a6 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/unconditionalBreakWithWhen.kt @@ -0,0 +1,15 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + val b: Int = 1 + for (n in 1..a) { + when { + a + b > 0 -> break + a - b > 0 -> break + else -> { + println(0) + break + } + } + } + return 1 +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/unconditionalBreakWithWhen.kt.after b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/unconditionalBreakWithWhen.kt.after new file mode 100644 index 00000000000..3a2b6622cf7 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/unconditionalBreakWithWhen.kt.after @@ -0,0 +1,20 @@ +// NEXT_SIBLING: +fun unit(a: Int, b: Int) { + when { + a + b > 0 -> return + a - b > 0 -> return + else -> { + println(0) + return + } + } +} + +fun foo(a: Int): Int { + val b: Int = 1 + for (n in 1..a) { + unit(a, b) + break + } + return 1 +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/default/defaultCF.kt b/idea/testData/refactoring/extractFunction/controlFlow/default/defaultCF.kt new file mode 100644 index 00000000000..2df388f597d --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/default/defaultCF.kt @@ -0,0 +1,9 @@ +// NEXT_SIBLING: +fun foo(a: Int) { + val b: Int = 1 + + if(a > 0) { + println(a) + } + println(b) +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/default/defaultCF.kt.after b/idea/testData/refactoring/extractFunction/controlFlow/default/defaultCF.kt.after new file mode 100644 index 00000000000..fb393acd945 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/default/defaultCF.kt.after @@ -0,0 +1,13 @@ +// NEXT_SIBLING: +fun unit(a: Int, b: Int) { + if (a > 0) { + println(a) + } + println(b) +} + +fun foo(a: Int) { + val b: Int = 1 + + unit(a, b) +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/default/defaultCFWithJumps.kt b/idea/testData/refactoring/extractFunction/controlFlow/default/defaultCFWithJumps.kt new file mode 100644 index 00000000000..0e2640727ea --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/default/defaultCFWithJumps.kt @@ -0,0 +1,12 @@ +// NEXT_SIBLING: +fun foo(a: Int) { + val b: Int = 1 + + var t = a + while(t > 0) { + if (t == 2) continue + println(t) + if (t == 1) break + t-- + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/default/defaultCFWithJumps.kt.after b/idea/testData/refactoring/extractFunction/controlFlow/default/defaultCFWithJumps.kt.after new file mode 100644 index 00000000000..47a09991285 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/default/defaultCFWithJumps.kt.after @@ -0,0 +1,16 @@ +// NEXT_SIBLING: +fun unit(a: Int) { + var t = a + while (t > 0) { + if (t == 2) continue + println(t) + if (t == 1) break + t-- + } +} + +fun foo(a: Int) { + val b: Int = 1 + + unit(a) +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/definiteReturns/definiteReturnWithIf.kt b/idea/testData/refactoring/extractFunction/controlFlow/definiteReturns/definiteReturnWithIf.kt new file mode 100644 index 00000000000..567cbf9c435 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/definiteReturns/definiteReturnWithIf.kt @@ -0,0 +1,7 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + val b: Int = 1 + if (a + b > 0) return 1 + else if (a - b < 0) return 2 + else return b +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/definiteReturns/definiteReturnWithIf.kt.after b/idea/testData/refactoring/extractFunction/controlFlow/definiteReturns/definiteReturnWithIf.kt.after new file mode 100644 index 00000000000..b966f14c6fb --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/definiteReturns/definiteReturnWithIf.kt.after @@ -0,0 +1,11 @@ +// NEXT_SIBLING: +fun i(a: Int, b: Int): Int { + if (a + b > 0) return 1 + else if (a - b < 0) return 2 + else return b +} + +fun foo(a: Int): Int { + val b: Int = 1 + return i(a, b) +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/definiteReturns/definiteReturnWithWhen.kt b/idea/testData/refactoring/extractFunction/controlFlow/definiteReturns/definiteReturnWithWhen.kt new file mode 100644 index 00000000000..834207e34a5 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/definiteReturns/definiteReturnWithWhen.kt @@ -0,0 +1,9 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + val b: Int = 1 + when (a + b) { + 0 -> return b + 1 -> return -b + else -> return a - b + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/definiteReturns/definiteReturnWithWhen.kt.after b/idea/testData/refactoring/extractFunction/controlFlow/definiteReturns/definiteReturnWithWhen.kt.after new file mode 100644 index 00000000000..be4501084cb --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/definiteReturns/definiteReturnWithWhen.kt.after @@ -0,0 +1,13 @@ +// NEXT_SIBLING: +fun i(a: Int, b: Int): Int { + when (a + b) { + 0 -> return b + 1 -> return -b + else -> return a - b + } +} + +fun foo(a: Int): Int { + val b: Int = 1 + return i(a, b) +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/definiteReturns/singleDefiniteReturn.kt b/idea/testData/refactoring/extractFunction/controlFlow/definiteReturns/singleDefiniteReturn.kt new file mode 100644 index 00000000000..a7e3333327e --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/definiteReturns/singleDefiniteReturn.kt @@ -0,0 +1,5 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + val b: Int = 1 + return a + b +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/definiteReturns/singleDefiniteReturn.kt.after b/idea/testData/refactoring/extractFunction/controlFlow/definiteReturns/singleDefiniteReturn.kt.after new file mode 100644 index 00000000000..f4387e8c373 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/definiteReturns/singleDefiniteReturn.kt.after @@ -0,0 +1,9 @@ +// NEXT_SIBLING: +fun i(a: Int, b: Int): Int { + return a + b +} + +fun foo(a: Int): Int { + val b: Int = 1 + return i(a, b) +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/evaluateExpression/evalExprInIf.kt b/idea/testData/refactoring/extractFunction/controlFlow/evaluateExpression/evalExprInIf.kt new file mode 100644 index 00000000000..287c2b2f02b --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/evaluateExpression/evalExprInIf.kt @@ -0,0 +1,5 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + val b: Int = 1 + return if (a + b > 0) 1 else if (a - b < 0) 2 else b +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/evaluateExpression/evalExprInIf.kt.after b/idea/testData/refactoring/extractFunction/controlFlow/evaluateExpression/evalExprInIf.kt.after new file mode 100644 index 00000000000..35be3bc760c --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/evaluateExpression/evalExprInIf.kt.after @@ -0,0 +1,9 @@ +// NEXT_SIBLING: +fun i(a: Int, b: Int): Int { + return if (a + b > 0) 1 else if (a - b < 0) 2 else b +} + +fun foo(a: Int): Int { + val b: Int = 1 + return i(a, b) +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/evaluateExpression/evalExprInWhen.kt b/idea/testData/refactoring/extractFunction/controlFlow/evaluateExpression/evalExprInWhen.kt new file mode 100644 index 00000000000..e143f761770 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/evaluateExpression/evalExprInWhen.kt @@ -0,0 +1,9 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + val b: Int = 1 + return when (a + b) { + 0 -> b + 1 -> -b + else -> a - b + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/evaluateExpression/evalExprInWhen.kt.after b/idea/testData/refactoring/extractFunction/controlFlow/evaluateExpression/evalExprInWhen.kt.after new file mode 100644 index 00000000000..92cd2b7e877 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/evaluateExpression/evalExprInWhen.kt.after @@ -0,0 +1,13 @@ +// NEXT_SIBLING: +fun i(a: Int, b: Int): Int { + return when (a + b) { + 0 -> b + 1 -> -b + else -> a - b + } +} + +fun foo(a: Int): Int { + val b: Int = 1 + return i(a, b) +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/evaluateExpression/simpleEvalExpr.kt b/idea/testData/refactoring/extractFunction/controlFlow/evaluateExpression/simpleEvalExpr.kt new file mode 100644 index 00000000000..2f949c1f8e0 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/evaluateExpression/simpleEvalExpr.kt @@ -0,0 +1,5 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + val b: Int = 1 + return a + b +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/evaluateExpression/simpleEvalExpr.kt.after b/idea/testData/refactoring/extractFunction/controlFlow/evaluateExpression/simpleEvalExpr.kt.after new file mode 100644 index 00000000000..f4387e8c373 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/evaluateExpression/simpleEvalExpr.kt.after @@ -0,0 +1,9 @@ +// NEXT_SIBLING: +fun i(a: Int, b: Int): Int { + return a + b +} + +fun foo(a: Int): Int { + val b: Int = 1 + return i(a, b) +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/outputValues/multipleOutputValues.kt b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/multipleOutputValues.kt new file mode 100644 index 00000000000..8447c22e4ab --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/multipleOutputValues.kt @@ -0,0 +1,12 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + var b: Int = 1 + var c: Int = 1 + + b += a + c -= a + println(b) + println(c) + + return b +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/outputValues/multipleOutputValues.kt.conflicts b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/multipleOutputValues.kt.conflicts new file mode 100644 index 00000000000..a0bfaa64039 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/multipleOutputValues.kt.conflicts @@ -0,0 +1 @@ +Selected code fragment has multiple output values: b c \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/outputValues/multipleOutputValuesWithIf.kt b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/multipleOutputValuesWithIf.kt new file mode 100644 index 00000000000..ab332122f3c --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/multipleOutputValuesWithIf.kt @@ -0,0 +1,16 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + var b: Int = 1 + var c: Int = 1 + + if (a > 0) { + b += a + } + else { + c -= a + } + println(b) + println(c) + + return b +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/outputValues/multipleOutputValuesWithIf.kt.conflicts b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/multipleOutputValuesWithIf.kt.conflicts new file mode 100644 index 00000000000..a0bfaa64039 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/multipleOutputValuesWithIf.kt.conflicts @@ -0,0 +1 @@ +Selected code fragment has multiple output values: b c \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/outputValues/multipleOutputValuesWithWhen.kt b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/multipleOutputValuesWithWhen.kt new file mode 100644 index 00000000000..a8973c0b562 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/multipleOutputValuesWithWhen.kt @@ -0,0 +1,18 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + var b: Int = 1 + var c: Int = 1 + + when { + a > 0 -> { + b += a + } + else -> { + c -= a + } + } + println(b) + println(c) + + return b +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/outputValues/multipleOutputValuesWithWhen.kt.conflicts b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/multipleOutputValuesWithWhen.kt.conflicts new file mode 100644 index 00000000000..a0bfaa64039 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/multipleOutputValuesWithWhen.kt.conflicts @@ -0,0 +1 @@ +Selected code fragment has multiple output values: b c \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValue.kt b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValue.kt new file mode 100644 index 00000000000..7ee976112f6 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValue.kt @@ -0,0 +1,9 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + var b: Int = 1 + + b += a + println(b) + + return b +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValue.kt.after b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValue.kt.after new file mode 100644 index 00000000000..6d7b4ddb7be --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValue.kt.after @@ -0,0 +1,15 @@ +// NEXT_SIBLING: +fun i(a: Int, b: Int): Int { + var b1 = b + b1 += a + println(b1) + return b1 +} + +fun foo(a: Int): Int { + var b: Int = 1 + + b = i(a, b) + + return b +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValueWithIf.kt b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValueWithIf.kt new file mode 100644 index 00000000000..e3413a7a3d1 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValueWithIf.kt @@ -0,0 +1,11 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + var b: Int = 1 + + if (a > 0) { + b = b + 1 + } + println(b) + + return b +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValueWithIf.kt.after b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValueWithIf.kt.after new file mode 100644 index 00000000000..b9d2cb7145f --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValueWithIf.kt.after @@ -0,0 +1,17 @@ +// NEXT_SIBLING: +fun i(a: Int, b: Int): Int { + var b1 = b + if (a > 0) { + b1 = b1 + 1 + } + println(b1) + return b1 +} + +fun foo(a: Int): Int { + var b: Int = 1 + + b = i(a, b) + + return b +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValueWithIfElse.kt b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValueWithIfElse.kt new file mode 100644 index 00000000000..c80852f40ba --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValueWithIfElse.kt @@ -0,0 +1,17 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + var b: Int = 1 + + if (a > 0) { + b = b + 1 + } + else if (a < 0) { + b-- + } + else { + b = a + } + println(b) + + return b +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValueWithIfElse.kt.after b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValueWithIfElse.kt.after new file mode 100644 index 00000000000..900adf4988f --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValueWithIfElse.kt.after @@ -0,0 +1,21 @@ +// NEXT_SIBLING: +fun i(a: Int, b: Int): Int { + var b1 = b + if (a > 0) { + b1 = b1 + 1 + } else if (a < 0) { + b1-- + } else { + b1 = a + } + println(b1) + return b1 +} + +fun foo(a: Int): Int { + var b: Int = 1 + + b = i(a, b) + + return b +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValueWithWhen.kt b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValueWithWhen.kt new file mode 100644 index 00000000000..c459f686507 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValueWithWhen.kt @@ -0,0 +1,16 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + var b: Int = 1 + + when { + a > 0 -> { + b = b + 1 + } + a < 0 -> { + b = b - 1 + } + } + println(b) + + return b +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValueWithWhen.kt.after b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValueWithWhen.kt.after new file mode 100644 index 00000000000..2a56b5bf6ea --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValueWithWhen.kt.after @@ -0,0 +1,22 @@ +// NEXT_SIBLING: +fun i(a: Int, b: Int): Int { + var b1 = b + when { + a > 0 -> { + b1 = b1 + 1 + } + a < 0 -> { + b1 = b1 - 1 + } + } + println(b1) + return b1 +} + +fun foo(a: Int): Int { + var b: Int = 1 + + b = i(a, b) + + return b +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValueWithWhenElse.kt b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValueWithWhenElse.kt new file mode 100644 index 00000000000..217a535e96f --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValueWithWhenElse.kt @@ -0,0 +1,19 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + var b: Int = 1 + + when { + a > 0 -> { + b = b + 1 + } + a < 0 -> { + b = b - 1 + } + else -> { + b = a + } + } + println(b) + + return b +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValueWithWhenElse.kt.after b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValueWithWhenElse.kt.after new file mode 100644 index 00000000000..46b6d3903ce --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValueWithWhenElse.kt.after @@ -0,0 +1,25 @@ +// NEXT_SIBLING: +fun i(a: Int, b: Int): Int { + var b1 = b + when { + a > 0 -> { + b1 = b1 + 1 + } + a < 0 -> { + b1 = b1 - 1 + } + else -> { + b1 = a + } + } + println(b1) + return b1 +} + +fun foo(a: Int): Int { + var b: Int = 1 + + b = i(a, b) + + return b +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/unextractable/anonymousObject.kt b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/anonymousObject.kt new file mode 100644 index 00000000000..8f2a0bd6e5d --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/anonymousObject.kt @@ -0,0 +1,15 @@ +trait Callable { + fun call(): T +} + +fun foo(a: Int): Int { + // NEXT_SIBLING: + val o = object: Callable { + val b: Int = 1 + + override fun call(): Int { + return a + b + } + } + return o.call() +} diff --git a/idea/testData/refactoring/extractFunction/controlFlow/unextractable/anonymousObject.kt.conflicts b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/anonymousObject.kt.conflicts new file mode 100644 index 00000000000..0ef37503755 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/anonymousObject.kt.conflicts @@ -0,0 +1 @@ +Cannot extract method since following types are not denotable in the target scope: foo.<no name provided> diff --git a/idea/testData/refactoring/extractFunction/controlFlow/unextractable/evalExpressionWithReturn.kt b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/evalExpressionWithReturn.kt new file mode 100644 index 00000000000..40ed6f3e276 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/evalExpressionWithReturn.kt @@ -0,0 +1,7 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + val b: Int = 1 + + val t = if (a > 0) return a else a + b + return t +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/unextractable/evalExpressionWithReturn.kt.conflicts b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/evalExpressionWithReturn.kt.conflicts new file mode 100644 index 00000000000..dfc6ea81584 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/evalExpressionWithReturn.kt.conflicts @@ -0,0 +1 @@ +Selected code fragment has multiple exit points \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/unextractable/evalExpressionWithThrow.kt b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/evalExpressionWithThrow.kt new file mode 100644 index 00000000000..1c77481545a --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/evalExpressionWithThrow.kt @@ -0,0 +1,7 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + val b: Int = 1 + + val t = if (a > 0) throw Exception("") else a + b + return t +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/unextractable/evalExpressionWithThrow.kt.conflicts b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/evalExpressionWithThrow.kt.conflicts new file mode 100644 index 00000000000..dfc6ea81584 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/evalExpressionWithThrow.kt.conflicts @@ -0,0 +1 @@ +Selected code fragment has multiple exit points \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/unextractable/jumpsAndReturns.kt b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/jumpsAndReturns.kt new file mode 100644 index 00000000000..7eac6a097a2 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/jumpsAndReturns.kt @@ -0,0 +1,11 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + val b: Int = 1 + for (n in 1..a) { + if (a + b > 0) break + println(a - b) + if (a - b > 0) return 0 + println(a + b) + } + return 1 +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/unextractable/jumpsAndReturns.kt.conflicts b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/jumpsAndReturns.kt.conflicts new file mode 100644 index 00000000000..dfc6ea81584 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/jumpsAndReturns.kt.conflicts @@ -0,0 +1 @@ +Selected code fragment has multiple exit points \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/unextractable/multipleJumps.kt b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/multipleJumps.kt new file mode 100644 index 00000000000..b15bd17a880 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/multipleJumps.kt @@ -0,0 +1,11 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + val b: Int = 1 + for (n in 1..a) { + if (a + b > 0) break + println(a - b) + if (a - b > 0) continue + println(a + b) + } + return 1 +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/unextractable/multipleJumps.kt.conflicts b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/multipleJumps.kt.conflicts new file mode 100644 index 00000000000..dfc6ea81584 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/multipleJumps.kt.conflicts @@ -0,0 +1 @@ +Selected code fragment has multiple exit points \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/unextractable/multipleReturnsWithDefault.kt b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/multipleReturnsWithDefault.kt new file mode 100644 index 00000000000..d38b661b941 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/multipleReturnsWithDefault.kt @@ -0,0 +1,10 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + val b: Int = 1 + + if (a > 0) return a + if (a < 0) return b + + + return t +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/unextractable/multipleReturnsWithDefault.kt.conflicts b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/multipleReturnsWithDefault.kt.conflicts new file mode 100644 index 00000000000..dfc6ea81584 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/multipleReturnsWithDefault.kt.conflicts @@ -0,0 +1 @@ +Selected code fragment has multiple exit points \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/unextractable/outputValueWithExpression.kt b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/outputValueWithExpression.kt new file mode 100644 index 00000000000..1528ef47435 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/outputValueWithExpression.kt @@ -0,0 +1,15 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + var b: Int = 1 + + val t = if (a > 0) { + b += a + b + } + else { + a + } + println(b) + + return t +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/unextractable/outputValueWithExpression.kt.conflicts b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/outputValueWithExpression.kt.conflicts new file mode 100644 index 00000000000..a3cb60bc6a1 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/outputValueWithExpression.kt.conflicts @@ -0,0 +1 @@ +Selected code fragment has output values as well as alternative exit points \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/unextractable/outputValueWithReturn.kt b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/outputValueWithReturn.kt new file mode 100644 index 00000000000..e018369d549 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/outputValueWithReturn.kt @@ -0,0 +1,8 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + var b: Int = 1 + + b += a + println(b) + return b +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/unextractable/outputValueWithReturn.kt.conflicts b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/outputValueWithReturn.kt.conflicts new file mode 100644 index 00000000000..a3cb60bc6a1 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/outputValueWithReturn.kt.conflicts @@ -0,0 +1 @@ +Selected code fragment has output values as well as alternative exit points \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/unextractable/outputValueWithThrow.kt b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/outputValueWithThrow.kt new file mode 100644 index 00000000000..4b936c8ea18 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/outputValueWithThrow.kt @@ -0,0 +1,9 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + var b: Int = 1 + + if (n == 10) throw Exception("") + b++ + + return b +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/unextractable/outputValueWithThrow.kt.conflicts b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/outputValueWithThrow.kt.conflicts new file mode 100644 index 00000000000..a3cb60bc6a1 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/outputValueWithThrow.kt.conflicts @@ -0,0 +1 @@ +Selected code fragment has output values as well as alternative exit points \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/controlFlow/unextractable/variablesOutOfScope.kt b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/variablesOutOfScope.kt new file mode 100644 index 00000000000..f59132eb055 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/variablesOutOfScope.kt @@ -0,0 +1,6 @@ +// NEXT_SIBLING: +fun foo(t: Int): Int { + val x = t + 1 + if (x > 0) return x + return 0 +} diff --git a/idea/testData/refactoring/extractFunction/controlFlow/unextractable/variablesOutOfScope.kt.conflicts b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/variablesOutOfScope.kt.conflicts new file mode 100644 index 00000000000..8ef3b3ff76a --- /dev/null +++ b/idea/testData/refactoring/extractFunction/controlFlow/unextractable/variablesOutOfScope.kt.conflicts @@ -0,0 +1 @@ +Following declarations won't be available outside of extracted function body: x diff --git a/idea/testData/refactoring/extractFunction/parameters/extractSuper/labeledSuperPropertyCall.kt b/idea/testData/refactoring/extractFunction/parameters/extractSuper/labeledSuperPropertyCall.kt new file mode 100644 index 00000000000..6c963e39768 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/extractSuper/labeledSuperPropertyCall.kt @@ -0,0 +1,12 @@ +public open class Z { + val z: Int = 0 +} + +// NEXT_SIBLING: +public class A(): Z() { + var a: Int = 1 + + fun foo(): Int { + return a + super@A.z + } +} diff --git a/idea/testData/refactoring/extractFunction/parameters/extractSuper/labeledSuperPropertyCall.kt.conflicts b/idea/testData/refactoring/extractFunction/parameters/extractSuper/labeledSuperPropertyCall.kt.conflicts new file mode 100644 index 00000000000..87b59349d78 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/extractSuper/labeledSuperPropertyCall.kt.conflicts @@ -0,0 +1 @@ +Cannot extract super-call diff --git a/idea/testData/refactoring/extractFunction/parameters/extractSuper/superFunctionCall.kt b/idea/testData/refactoring/extractFunction/parameters/extractSuper/superFunctionCall.kt new file mode 100644 index 00000000000..267a5069e0f --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/extractSuper/superFunctionCall.kt @@ -0,0 +1,15 @@ +public open class Z { + fun zzz() { + + } +} + +// NEXT_SIBLING: +public class A(): Z() { + var a: Int = 1 + + fun foo(): Int { + super.zzz() + return a + 1 + } +} diff --git a/idea/testData/refactoring/extractFunction/parameters/extractSuper/superFunctionCall.kt.conflicts b/idea/testData/refactoring/extractFunction/parameters/extractSuper/superFunctionCall.kt.conflicts new file mode 100644 index 00000000000..87b59349d78 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/extractSuper/superFunctionCall.kt.conflicts @@ -0,0 +1 @@ +Cannot extract super-call diff --git a/idea/testData/refactoring/extractFunction/parameters/extractSuper/superLabeledFunctionCall.kt b/idea/testData/refactoring/extractFunction/parameters/extractSuper/superLabeledFunctionCall.kt new file mode 100644 index 00000000000..6e675e20114 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/extractSuper/superLabeledFunctionCall.kt @@ -0,0 +1,15 @@ +public open class Z { + fun zzz() { + + } +} + +// NEXT_SIBLING: +public class A(): Z() { + var a: Int = 1 + + fun foo(): Int { + super@A.zzz() + return a + 1 + } +} diff --git a/idea/testData/refactoring/extractFunction/parameters/extractSuper/superLabeledFunctionCall.kt.conflicts b/idea/testData/refactoring/extractFunction/parameters/extractSuper/superLabeledFunctionCall.kt.conflicts new file mode 100644 index 00000000000..87b59349d78 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/extractSuper/superLabeledFunctionCall.kt.conflicts @@ -0,0 +1 @@ +Cannot extract super-call diff --git a/idea/testData/refactoring/extractFunction/parameters/extractSuper/superPropertyCall.kt b/idea/testData/refactoring/extractFunction/parameters/extractSuper/superPropertyCall.kt new file mode 100644 index 00000000000..98ad5b6ce7c --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/extractSuper/superPropertyCall.kt @@ -0,0 +1,12 @@ +public open class Z { + val z: Int = 0 +} + +// NEXT_SIBLING: +public class A(): Z() { + var a: Int = 1 + + fun foo(): Int { + return a + super.z + } +} diff --git a/idea/testData/refactoring/extractFunction/parameters/extractSuper/superPropertyCall.kt.conflicts b/idea/testData/refactoring/extractFunction/parameters/extractSuper/superPropertyCall.kt.conflicts new file mode 100644 index 00000000000..87b59349d78 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/extractSuper/superPropertyCall.kt.conflicts @@ -0,0 +1 @@ +Cannot extract super-call diff --git a/idea/testData/refactoring/extractFunction/parameters/extractThis/explicitLabeledThisInMember.kt b/idea/testData/refactoring/extractFunction/parameters/extractThis/explicitLabeledThisInMember.kt new file mode 100644 index 00000000000..ddfc49d0a9a --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/extractThis/explicitLabeledThisInMember.kt @@ -0,0 +1,16 @@ +public open class Z { + val z: Int = 0 +} + +// NEXT_SIBLING: +public class A(): Z() { + var a: Int = 1 + + public inner class B(): Z() { + var b: Int = 1 + + fun foo(): Int { + return this@A.a + this@B.b + this@A.z + this@B.z + } + } +} diff --git a/idea/testData/refactoring/extractFunction/parameters/extractThis/explicitLabeledThisInMember.kt.after b/idea/testData/refactoring/extractFunction/parameters/extractThis/explicitLabeledThisInMember.kt.after new file mode 100644 index 00000000000..313a581e394 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/extractThis/explicitLabeledThisInMember.kt.after @@ -0,0 +1,20 @@ +public open class Z { + val z: Int = 0 +} + +// NEXT_SIBLING: +fun i(a1: A, b1: A.B): Int { + return a1.a + b1.b + a1.z + b1.z +} + +public class A(): Z() { + var a: Int = 1 + + public inner class B(): Z() { + var b: Int = 1 + + fun foo(): Int { + return i(this@A, this@B) + } + } +} diff --git a/idea/testData/refactoring/extractFunction/parameters/extractThis/explicitThisInExtension.kt b/idea/testData/refactoring/extractFunction/parameters/extractThis/explicitThisInExtension.kt new file mode 100644 index 00000000000..4a5f728aa5d --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/extractThis/explicitThisInExtension.kt @@ -0,0 +1,6 @@ +class Z(val a: Int) + +// NEXT_SIBLING: +fun Z.foo(): Int { + return this.a + 1 +} diff --git a/idea/testData/refactoring/extractFunction/parameters/extractThis/explicitThisInExtension.kt.after b/idea/testData/refactoring/extractFunction/parameters/extractThis/explicitThisInExtension.kt.after new file mode 100644 index 00000000000..31387b10d44 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/extractThis/explicitThisInExtension.kt.after @@ -0,0 +1,10 @@ +class Z(val a: Int) + +// NEXT_SIBLING: +fun Z.i(): Int { + return a +} + +fun Z.foo(): Int { + return i() + 1 +} diff --git a/idea/testData/refactoring/extractFunction/parameters/extractThis/explicitThisInMember.kt b/idea/testData/refactoring/extractFunction/parameters/extractThis/explicitThisInMember.kt new file mode 100644 index 00000000000..a0f2e25232a --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/extractThis/explicitThisInMember.kt @@ -0,0 +1,16 @@ +public open class Z { + val z: Int = 0 +} + +// NEXT_SIBLING: +public class A(): Z() { + var a: Int = 1 + + public inner class B(): Z() { + var b: Int = 1 + + fun foo(): Int { + return a + this.b + this.z + } + } +} diff --git a/idea/testData/refactoring/extractFunction/parameters/extractThis/explicitThisInMember.kt.after b/idea/testData/refactoring/extractFunction/parameters/extractThis/explicitThisInMember.kt.after new file mode 100644 index 00000000000..1c545ad6605 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/extractThis/explicitThisInMember.kt.after @@ -0,0 +1,20 @@ +public open class Z { + val z: Int = 0 +} + +// NEXT_SIBLING: +fun i(a1: A, b1: A.B): Int { + return a1.a + b1.b + b1.z +} + +public class A(): Z() { + var a: Int = 1 + + public inner class B(): Z() { + var b: Int = 1 + + fun foo(): Int { + return i(this@A, this) + } + } +} diff --git a/idea/testData/refactoring/extractFunction/parameters/extractThis/implicitAndExplicitLabeledThisInMember.kt b/idea/testData/refactoring/extractFunction/parameters/extractThis/implicitAndExplicitLabeledThisInMember.kt new file mode 100644 index 00000000000..32fbe3e3d31 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/extractThis/implicitAndExplicitLabeledThisInMember.kt @@ -0,0 +1,16 @@ +public open class Z { + val z: Int = 0 +} + +// NEXT_SIBLING: +public class A(): Z() { + var a: Int = 1 + + public inner class B(): Z() { + var b: Int = 1 + + fun foo(): Int { + return a + b + this@A.z + this@B.z + } + } +} diff --git a/idea/testData/refactoring/extractFunction/parameters/extractThis/implicitAndExplicitLabeledThisInMember.kt.after b/idea/testData/refactoring/extractFunction/parameters/extractThis/implicitAndExplicitLabeledThisInMember.kt.after new file mode 100644 index 00000000000..313a581e394 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/extractThis/implicitAndExplicitLabeledThisInMember.kt.after @@ -0,0 +1,20 @@ +public open class Z { + val z: Int = 0 +} + +// NEXT_SIBLING: +fun i(a1: A, b1: A.B): Int { + return a1.a + b1.b + a1.z + b1.z +} + +public class A(): Z() { + var a: Int = 1 + + public inner class B(): Z() { + var b: Int = 1 + + fun foo(): Int { + return i(this@A, this@B) + } + } +} diff --git a/idea/testData/refactoring/extractFunction/parameters/extractThis/implicitAndExplicitThisInExtension.kt b/idea/testData/refactoring/extractFunction/parameters/extractThis/implicitAndExplicitThisInExtension.kt new file mode 100644 index 00000000000..0e4acd18602 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/extractThis/implicitAndExplicitThisInExtension.kt @@ -0,0 +1,6 @@ +class Z(val a: Int) + +// NEXT_SIBLING: +fun Z.foo(): Int { + return this.a + a + 1 +} diff --git a/idea/testData/refactoring/extractFunction/parameters/extractThis/implicitAndExplicitThisInExtension.kt.after b/idea/testData/refactoring/extractFunction/parameters/extractThis/implicitAndExplicitThisInExtension.kt.after new file mode 100644 index 00000000000..af406195a73 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/extractThis/implicitAndExplicitThisInExtension.kt.after @@ -0,0 +1,10 @@ +class Z(val a: Int) + +// NEXT_SIBLING: +fun Z.i(): Int { + return a + a +} + +fun Z.foo(): Int { + return i() + 1 +} diff --git a/idea/testData/refactoring/extractFunction/parameters/extractThis/implicitThisInExtension.kt b/idea/testData/refactoring/extractFunction/parameters/extractThis/implicitThisInExtension.kt new file mode 100644 index 00000000000..39062eb46a1 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/extractThis/implicitThisInExtension.kt @@ -0,0 +1,6 @@ +class Z(val a: Int) + +// NEXT_SIBLING: +fun Z.foo(): Int { + return a + 1 +} diff --git a/idea/testData/refactoring/extractFunction/parameters/extractThis/implicitThisInExtension.kt.after b/idea/testData/refactoring/extractFunction/parameters/extractThis/implicitThisInExtension.kt.after new file mode 100644 index 00000000000..31387b10d44 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/extractThis/implicitThisInExtension.kt.after @@ -0,0 +1,10 @@ +class Z(val a: Int) + +// NEXT_SIBLING: +fun Z.i(): Int { + return a +} + +fun Z.foo(): Int { + return i() + 1 +} diff --git a/idea/testData/refactoring/extractFunction/parameters/extractThis/implicitThisInMember.kt b/idea/testData/refactoring/extractFunction/parameters/extractThis/implicitThisInMember.kt new file mode 100644 index 00000000000..1add23e1352 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/extractThis/implicitThisInMember.kt @@ -0,0 +1,16 @@ +public open class Z { + val z: Int = 0 +} + +// NEXT_SIBLING: +public class A(): Z() { + var a: Int = 1 + + public inner class B(): Z() { + var b: Int = 1 + + fun foo(): Int { + return a + b + z + } + } +} diff --git a/idea/testData/refactoring/extractFunction/parameters/extractThis/implicitThisInMember.kt.after b/idea/testData/refactoring/extractFunction/parameters/extractThis/implicitThisInMember.kt.after new file mode 100644 index 00000000000..cf243f62ea9 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/extractThis/implicitThisInMember.kt.after @@ -0,0 +1,20 @@ +public open class Z { + val z: Int = 0 +} + +// NEXT_SIBLING: +fun i(a1: A, b1: A.B): Int { + return a1.a + b1.b + b1.z +} + +public class A(): Z() { + var a: Int = 1 + + public inner class B(): Z() { + var b: Int = 1 + + fun foo(): Int { + return i(this@A, this@B) + } + } +} diff --git a/idea/testData/refactoring/extractFunction/parameters/misc/classObject.kt b/idea/testData/refactoring/extractFunction/parameters/misc/classObject.kt new file mode 100644 index 00000000000..6841da6de93 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/misc/classObject.kt @@ -0,0 +1,15 @@ +// NEXT_SIBLING: +class MyClass { + fun test(): Int { + coFun() + return coProp + 10 + } + + class object { + val coProp = 1 + + fun coFun() { + + } + } +} diff --git a/idea/testData/refactoring/extractFunction/parameters/misc/classObject.kt.after b/idea/testData/refactoring/extractFunction/parameters/misc/classObject.kt.after new file mode 100644 index 00000000000..a7a1ac6ab89 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/misc/classObject.kt.after @@ -0,0 +1,19 @@ +// NEXT_SIBLING: +fun i(): Int { + MyClass.coFun() + return MyClass.coProp + 10 +} + +class MyClass { + fun test(): Int { + return i() + } + + class object { + val coProp = 1 + + fun coFun() { + + } + } +} diff --git a/idea/testData/refactoring/extractFunction/parameters/misc/innerClassObject.kt b/idea/testData/refactoring/extractFunction/parameters/misc/innerClassObject.kt new file mode 100644 index 00000000000..8a52494b870 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/misc/innerClassObject.kt @@ -0,0 +1,19 @@ +// NEXT_SIBLING: +class A { + class B { + fun test(): Int { + coFun() + return coProp + 10 + } + + class object { + val coProp = 1 + + fun coFun() { + + } + } + } +} + + diff --git a/idea/testData/refactoring/extractFunction/parameters/misc/innerClassObject.kt.after b/idea/testData/refactoring/extractFunction/parameters/misc/innerClassObject.kt.after new file mode 100644 index 00000000000..40f9ec66457 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/misc/innerClassObject.kt.after @@ -0,0 +1,23 @@ +// NEXT_SIBLING: +fun i(): Int { + A.B.coFun() + return A.B.coProp + 10 +} + +class A { + class B { + fun test(): Int { + return i() + } + + class object { + val coProp = 1 + + fun coFun() { + + } + } + } +} + + diff --git a/idea/testData/refactoring/extractFunction/parameters/misc/multipleOccurrences.kt b/idea/testData/refactoring/extractFunction/parameters/misc/multipleOccurrences.kt new file mode 100644 index 00000000000..81924b1c2d3 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/misc/multipleOccurrences.kt @@ -0,0 +1,4 @@ +// NEXT_SIBLING: +fun foo(a: Int, b: Int, c: Int): Int { + return (a + b*a - c) + b*c +} diff --git a/idea/testData/refactoring/extractFunction/parameters/misc/multipleOccurrences.kt.after b/idea/testData/refactoring/extractFunction/parameters/misc/multipleOccurrences.kt.after new file mode 100644 index 00000000000..8fbe6cc1e3d --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/misc/multipleOccurrences.kt.after @@ -0,0 +1,8 @@ +// NEXT_SIBLING: +fun i(a: Int, b: Int, c: Int): Int { + return (a + b * a - c) + b * c +} + +fun foo(a: Int, b: Int, c: Int): Int { + return i(a, b, c) +} diff --git a/idea/testData/refactoring/extractFunction/parameters/misc/usagesInCallArgs.kt b/idea/testData/refactoring/extractFunction/parameters/misc/usagesInCallArgs.kt new file mode 100644 index 00000000000..8e781849724 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/misc/usagesInCallArgs.kt @@ -0,0 +1,12 @@ +// NEXT_SIBLING: +public class A() { + fun bar(a: Int, b: Int): Int { + return a + b + } +} + +fun foo(a: A, x: Int): Int { + val t = 10 + val u = 20 + return a.bar(t - x, u + x) +} diff --git a/idea/testData/refactoring/extractFunction/parameters/misc/usagesInCallArgs.kt.after b/idea/testData/refactoring/extractFunction/parameters/misc/usagesInCallArgs.kt.after new file mode 100644 index 00000000000..8e0b5d72cbc --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/misc/usagesInCallArgs.kt.after @@ -0,0 +1,16 @@ +// NEXT_SIBLING: +fun i(a: A, t: Int, u: Int, x: Int): Int { + return a.bar(t - x, u + x) +} + +public class A() { + fun bar(a: Int, b: Int): Int { + return a + b + } +} + +fun foo(a: A, x: Int): Int { + val t = 10 + val u = 20 + return i(a, t, u, x) +} diff --git a/idea/testData/refactoring/extractFunction/parameters/nonDenotableTypes/anonymousObject.kt b/idea/testData/refactoring/extractFunction/parameters/nonDenotableTypes/anonymousObject.kt new file mode 100644 index 00000000000..970decabe0f --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/nonDenotableTypes/anonymousObject.kt @@ -0,0 +1,15 @@ +trait Callable { + fun call(): T +} + +fun foo(a: Int): Int { + // NEXT_SIBLING: + val o = object: Callable { + val b: Int = 1 + + override fun call(): Int { + return a + b + } + } + return o.call() +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/parameters/nonDenotableTypes/anonymousObject.kt.conflicts b/idea/testData/refactoring/extractFunction/parameters/nonDenotableTypes/anonymousObject.kt.conflicts new file mode 100644 index 00000000000..f121223719e --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/nonDenotableTypes/anonymousObject.kt.conflicts @@ -0,0 +1 @@ +Cannot extract method since following types are not denotable in the target scope: foo.<no name provided> \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/parameters/nonDenotableTypes/localClass.kt b/idea/testData/refactoring/extractFunction/parameters/nonDenotableTypes/localClass.kt new file mode 100644 index 00000000000..16a4db32d3b --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/nonDenotableTypes/localClass.kt @@ -0,0 +1,7 @@ +// NEXT_SIBLING: +fun foo(a: Int): Int { + class T(val b: Int) + + val t = T(1) + return a + t.b +} \ No newline at end of file diff --git a/idea/testData/refactoring/extractFunction/parameters/nonDenotableTypes/localClass.kt.conflicts b/idea/testData/refactoring/extractFunction/parameters/nonDenotableTypes/localClass.kt.conflicts new file mode 100644 index 00000000000..7caf9b8e1f9 --- /dev/null +++ b/idea/testData/refactoring/extractFunction/parameters/nonDenotableTypes/localClass.kt.conflicts @@ -0,0 +1 @@ +Cannot extract method since following types are not denotable in the target scope: foo.T \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/AbstractJetExtractionTest.kt b/idea/tests/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/AbstractJetExtractionTest.kt index 0128bde2c5c..f60ec95c1bd 100644 --- a/idea/tests/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/AbstractJetExtractionTest.kt +++ b/idea/tests/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/AbstractJetExtractionTest.kt @@ -17,36 +17,72 @@ package org.jetbrains.jet.plugin.refactoring.introduce.introduceVariable import com.intellij.ide.DataManager -import com.intellij.refactoring.RefactoringActionHandler +import com.intellij.psi.PsiElement import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase import org.jetbrains.jet.JetTestCaseBuilder import org.jetbrains.jet.lang.psi.JetFile import org.jetbrains.jet.plugin.refactoring.extractFunction.ExtractKotlinFunctionHandler import java.io.File -import org.jetbrains.jet.JetTestUtils +import org.jetbrains.jet.plugin.refactoring.extractFunction.selectElements +import org.jetbrains.jet.lang.psi.JetTreeVisitorVoid +import com.intellij.psi.PsiComment import com.intellij.refactoring.BaseRefactoringProcessor.ConflictsInTestsException +import org.jetbrains.jet.JetTestUtils +import com.intellij.testFramework.fixtures.JavaCodeInsightTestFixture +import com.intellij.psi.util.PsiTreeUtil +import com.intellij.psi.PsiWhiteSpace +import org.jetbrains.jet.lang.psi.JetPackageDirective public abstract class AbstractJetExtractionTest() : LightCodeInsightFixtureTestCase() { + val fixture: JavaCodeInsightTestFixture get() = myFixture + protected fun doIntroduceVariableTest(path: String) { - doTest(path, KotlinIntroduceVariableHandler()) + doTest(path) { file -> + KotlinIntroduceVariableHandler().invoke( + fixture.getProject(), + fixture.getEditor(), + file, + DataManager.getInstance().getDataContext(fixture.getEditor().getComponent()) + ) + } } - protected fun doTest(path: String, handler: RefactoringActionHandler) { + protected fun doExtractFunctionTest(path: String) { + doTest(path) { file -> + var explicitNextSibling: PsiElement? = null + file.accept( + object: JetTreeVisitorVoid() { + override fun visitComment(comment: PsiComment?) { + if (comment?.getText() == "// NEXT_SIBLING:") { + explicitNextSibling = PsiTreeUtil.skipSiblingsForward( + comment, + javaClass(), + javaClass(), + javaClass() + ) + } + } + } + ) + + val editor = fixture.getEditor() + selectElements(editor, file) { (elements, nextSibling) -> + ExtractKotlinFunctionHandler().doInvoke(editor, file, elements, explicitNextSibling ?: nextSibling) + } + } + } + + protected fun doTest(path: String, action: (JetFile) -> Unit) { val mainFile = File(path) val afterFile = File("$path.after") val conflictFile = File("$path.conflicts") - myFixture.setTestDataPath("${JetTestCaseBuilder.getHomeDirectory()}/${mainFile.getParent()}") + fixture.setTestDataPath("${JetTestCaseBuilder.getHomeDirectory()}/${mainFile.getParent()}") - val file = myFixture.configureByFile(mainFile.getName()) as JetFile + val file = fixture.configureByFile(mainFile.getName()) as JetFile try { - handler.invoke( - getProject(), - myFixture.getEditor(), - file, - DataManager.getInstance().getDataContext(myFixture.getEditor().getComponent()) - ) + action(file) assert(!conflictFile.exists()) JetTestUtils.assertEqualsToFile(afterFile, file.getText()!!) diff --git a/idea/tests/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/JetExtractionTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/JetExtractionTestGenerated.java index 6810254042a..ef90598b66a 100644 --- a/idea/tests/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/JetExtractionTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/refactoring/introduce/introduceVariable/JetExtractionTestGenerated.java @@ -30,7 +30,7 @@ import org.jetbrains.jet.plugin.refactoring.introduce.introduceVariable.Abstract /** This class is generated by {@link org.jetbrains.jet.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */ @SuppressWarnings("all") -@InnerTestClasses({JetExtractionTestGenerated.IntroduceVariable.class}) +@InnerTestClasses({JetExtractionTestGenerated.IntroduceVariable.class, JetExtractionTestGenerated.ExtractFunction.class}) public class JetExtractionTestGenerated extends AbstractJetExtractionTest { @TestMetadata("idea/testData/refactoring/introduceVariable") public static class IntroduceVariable extends AbstractJetExtractionTest { @@ -180,9 +180,423 @@ public class JetExtractionTestGenerated extends AbstractJetExtractionTest { } + @TestMetadata("idea/testData/refactoring/extractFunction") + @InnerTestClasses({ExtractFunction.Basic.class, ExtractFunction.ControlFlow.class, ExtractFunction.Parameters.class}) + public static class ExtractFunction extends AbstractJetExtractionTest { + public void testAllFilesPresentInExtractFunction() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/refactoring/extractFunction"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("idea/testData/refactoring/extractFunction/basic") + public static class Basic extends AbstractJetExtractionTest { + public void testAllFilesPresentInBasic() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/refactoring/extractFunction/basic"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("malformedExpression.kt") + public void testMalformedExpression() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/basic/malformedExpression.kt"); + } + + @TestMetadata("malformedStatements.kt") + public void testMalformedStatements() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/basic/malformedStatements.kt"); + } + + } + + @TestMetadata("idea/testData/refactoring/extractFunction/controlFlow") + @InnerTestClasses({ControlFlow.ConditionalJumps.class, ControlFlow.Default.class, ControlFlow.DefiniteReturns.class, ControlFlow.EvaluateExpression.class, ControlFlow.OutputValues.class, ControlFlow.Unextractable.class}) + public static class ControlFlow extends AbstractJetExtractionTest { + public void testAllFilesPresentInControlFlow() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/refactoring/extractFunction/controlFlow"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps") + public static class ConditionalJumps extends AbstractJetExtractionTest { + public void testAllFilesPresentInConditionalJumps() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("conditionalBreakWithIf.kt") + public void testConditionalBreakWithIf() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalBreakWithIf.kt"); + } + + @TestMetadata("conditionalBreakWithIfElse.kt") + public void testConditionalBreakWithIfElse() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalBreakWithIfElse.kt"); + } + + @TestMetadata("conditionalBreakWithWhen.kt") + public void testConditionalBreakWithWhen() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalBreakWithWhen.kt"); + } + + @TestMetadata("conditionalReturnWithIf.kt") + public void testConditionalReturnWithIf() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalReturnWithIf.kt"); + } + + @TestMetadata("conditionalReturnWithIfElse.kt") + public void testConditionalReturnWithIfElse() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalReturnWithIfElse.kt"); + } + + @TestMetadata("conditionalReturnWithWhen.kt") + public void testConditionalReturnWithWhen() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/conditionalReturnWithWhen.kt"); + } + + @TestMetadata("unconditionalBreakWithIf.kt") + public void testUnconditionalBreakWithIf() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/unconditionalBreakWithIf.kt"); + } + + @TestMetadata("unconditionalBreakWithIfElse.kt") + public void testUnconditionalBreakWithIfElse() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/unconditionalBreakWithIfElse.kt"); + } + + @TestMetadata("unconditionalBreakWithWhen.kt") + public void testUnconditionalBreakWithWhen() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/conditionalJumps/unconditionalBreakWithWhen.kt"); + } + + } + + @TestMetadata("idea/testData/refactoring/extractFunction/controlFlow/default") + public static class Default extends AbstractJetExtractionTest { + public void testAllFilesPresentInDefault() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/refactoring/extractFunction/controlFlow/default"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("defaultCF.kt") + public void testDefaultCF() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/default/defaultCF.kt"); + } + + @TestMetadata("defaultCFWithJumps.kt") + public void testDefaultCFWithJumps() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/default/defaultCFWithJumps.kt"); + } + + } + + @TestMetadata("idea/testData/refactoring/extractFunction/controlFlow/definiteReturns") + public static class DefiniteReturns extends AbstractJetExtractionTest { + public void testAllFilesPresentInDefiniteReturns() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/refactoring/extractFunction/controlFlow/definiteReturns"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("definiteReturnWithIf.kt") + public void testDefiniteReturnWithIf() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/definiteReturns/definiteReturnWithIf.kt"); + } + + @TestMetadata("definiteReturnWithWhen.kt") + public void testDefiniteReturnWithWhen() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/definiteReturns/definiteReturnWithWhen.kt"); + } + + @TestMetadata("singleDefiniteReturn.kt") + public void testSingleDefiniteReturn() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/definiteReturns/singleDefiniteReturn.kt"); + } + + } + + @TestMetadata("idea/testData/refactoring/extractFunction/controlFlow/evaluateExpression") + public static class EvaluateExpression extends AbstractJetExtractionTest { + public void testAllFilesPresentInEvaluateExpression() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/refactoring/extractFunction/controlFlow/evaluateExpression"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("evalExprInIf.kt") + public void testEvalExprInIf() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/evaluateExpression/evalExprInIf.kt"); + } + + @TestMetadata("evalExprInWhen.kt") + public void testEvalExprInWhen() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/evaluateExpression/evalExprInWhen.kt"); + } + + @TestMetadata("simpleEvalExpr.kt") + public void testSimpleEvalExpr() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/evaluateExpression/simpleEvalExpr.kt"); + } + + } + + @TestMetadata("idea/testData/refactoring/extractFunction/controlFlow/outputValues") + public static class OutputValues extends AbstractJetExtractionTest { + public void testAllFilesPresentInOutputValues() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/refactoring/extractFunction/controlFlow/outputValues"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("multipleOutputValues.kt") + public void testMultipleOutputValues() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/outputValues/multipleOutputValues.kt"); + } + + @TestMetadata("multipleOutputValuesWithIf.kt") + public void testMultipleOutputValuesWithIf() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/outputValues/multipleOutputValuesWithIf.kt"); + } + + @TestMetadata("multipleOutputValuesWithWhen.kt") + public void testMultipleOutputValuesWithWhen() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/outputValues/multipleOutputValuesWithWhen.kt"); + } + + @TestMetadata("singleOutputValue.kt") + public void testSingleOutputValue() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValue.kt"); + } + + @TestMetadata("singleOutputValueWithIf.kt") + public void testSingleOutputValueWithIf() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValueWithIf.kt"); + } + + @TestMetadata("singleOutputValueWithIfElse.kt") + public void testSingleOutputValueWithIfElse() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValueWithIfElse.kt"); + } + + @TestMetadata("singleOutputValueWithWhen.kt") + public void testSingleOutputValueWithWhen() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValueWithWhen.kt"); + } + + @TestMetadata("singleOutputValueWithWhenElse.kt") + public void testSingleOutputValueWithWhenElse() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/outputValues/singleOutputValueWithWhenElse.kt"); + } + + } + + @TestMetadata("idea/testData/refactoring/extractFunction/controlFlow/unextractable") + public static class Unextractable extends AbstractJetExtractionTest { + public void testAllFilesPresentInUnextractable() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/refactoring/extractFunction/controlFlow/unextractable"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("anonymousObject.kt") + public void testAnonymousObject() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/unextractable/anonymousObject.kt"); + } + + @TestMetadata("evalExpressionWithReturn.kt") + public void testEvalExpressionWithReturn() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/unextractable/evalExpressionWithReturn.kt"); + } + + @TestMetadata("evalExpressionWithThrow.kt") + public void testEvalExpressionWithThrow() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/unextractable/evalExpressionWithThrow.kt"); + } + + @TestMetadata("jumpsAndReturns.kt") + public void testJumpsAndReturns() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/unextractable/jumpsAndReturns.kt"); + } + + @TestMetadata("multipleJumps.kt") + public void testMultipleJumps() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/unextractable/multipleJumps.kt"); + } + + @TestMetadata("multipleReturnsWithDefault.kt") + public void testMultipleReturnsWithDefault() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/unextractable/multipleReturnsWithDefault.kt"); + } + + @TestMetadata("outputValueWithExpression.kt") + public void testOutputValueWithExpression() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/unextractable/outputValueWithExpression.kt"); + } + + @TestMetadata("outputValueWithReturn.kt") + public void testOutputValueWithReturn() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/unextractable/outputValueWithReturn.kt"); + } + + @TestMetadata("outputValueWithThrow.kt") + public void testOutputValueWithThrow() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/unextractable/outputValueWithThrow.kt"); + } + + @TestMetadata("variablesOutOfScope.kt") + public void testVariablesOutOfScope() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/controlFlow/unextractable/variablesOutOfScope.kt"); + } + + } + + public static Test innerSuite() { + TestSuite suite = new TestSuite("ControlFlow"); + suite.addTestSuite(ControlFlow.class); + suite.addTestSuite(ConditionalJumps.class); + suite.addTestSuite(Default.class); + suite.addTestSuite(DefiniteReturns.class); + suite.addTestSuite(EvaluateExpression.class); + suite.addTestSuite(OutputValues.class); + suite.addTestSuite(Unextractable.class); + return suite; + } + } + + @TestMetadata("idea/testData/refactoring/extractFunction/parameters") + @InnerTestClasses({Parameters.ExtractSuper.class, Parameters.ExtractThis.class, Parameters.Misc.class, Parameters.NonDenotableTypes.class}) + public static class Parameters extends AbstractJetExtractionTest { + public void testAllFilesPresentInParameters() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/refactoring/extractFunction/parameters"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("idea/testData/refactoring/extractFunction/parameters/extractSuper") + public static class ExtractSuper extends AbstractJetExtractionTest { + public void testAllFilesPresentInExtractSuper() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/refactoring/extractFunction/parameters/extractSuper"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("labeledSuperPropertyCall.kt") + public void testLabeledSuperPropertyCall() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/parameters/extractSuper/labeledSuperPropertyCall.kt"); + } + + @TestMetadata("superFunctionCall.kt") + public void testSuperFunctionCall() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/parameters/extractSuper/superFunctionCall.kt"); + } + + @TestMetadata("superLabeledFunctionCall.kt") + public void testSuperLabeledFunctionCall() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/parameters/extractSuper/superLabeledFunctionCall.kt"); + } + + @TestMetadata("superPropertyCall.kt") + public void testSuperPropertyCall() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/parameters/extractSuper/superPropertyCall.kt"); + } + + } + + @TestMetadata("idea/testData/refactoring/extractFunction/parameters/extractThis") + public static class ExtractThis extends AbstractJetExtractionTest { + public void testAllFilesPresentInExtractThis() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/refactoring/extractFunction/parameters/extractThis"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("explicitLabeledThisInMember.kt") + public void testExplicitLabeledThisInMember() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/parameters/extractThis/explicitLabeledThisInMember.kt"); + } + + @TestMetadata("explicitThisInExtension.kt") + public void testExplicitThisInExtension() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/parameters/extractThis/explicitThisInExtension.kt"); + } + + @TestMetadata("explicitThisInMember.kt") + public void testExplicitThisInMember() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/parameters/extractThis/explicitThisInMember.kt"); + } + + @TestMetadata("implicitAndExplicitLabeledThisInMember.kt") + public void testImplicitAndExplicitLabeledThisInMember() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/parameters/extractThis/implicitAndExplicitLabeledThisInMember.kt"); + } + + @TestMetadata("implicitAndExplicitThisInExtension.kt") + public void testImplicitAndExplicitThisInExtension() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/parameters/extractThis/implicitAndExplicitThisInExtension.kt"); + } + + @TestMetadata("implicitThisInExtension.kt") + public void testImplicitThisInExtension() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/parameters/extractThis/implicitThisInExtension.kt"); + } + + @TestMetadata("implicitThisInMember.kt") + public void testImplicitThisInMember() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/parameters/extractThis/implicitThisInMember.kt"); + } + + } + + @TestMetadata("idea/testData/refactoring/extractFunction/parameters/misc") + public static class Misc extends AbstractJetExtractionTest { + public void testAllFilesPresentInMisc() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/refactoring/extractFunction/parameters/misc"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("classObject.kt") + public void testClassObject() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/parameters/misc/classObject.kt"); + } + + @TestMetadata("innerClassObject.kt") + public void testInnerClassObject() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/parameters/misc/innerClassObject.kt"); + } + + @TestMetadata("multipleOccurrences.kt") + public void testMultipleOccurrences() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/parameters/misc/multipleOccurrences.kt"); + } + + @TestMetadata("usagesInCallArgs.kt") + public void testUsagesInCallArgs() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/parameters/misc/usagesInCallArgs.kt"); + } + + } + + @TestMetadata("idea/testData/refactoring/extractFunction/parameters/nonDenotableTypes") + public static class NonDenotableTypes extends AbstractJetExtractionTest { + public void testAllFilesPresentInNonDenotableTypes() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/refactoring/extractFunction/parameters/nonDenotableTypes"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("anonymousObject.kt") + public void testAnonymousObject() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/parameters/nonDenotableTypes/anonymousObject.kt"); + } + + @TestMetadata("localClass.kt") + public void testLocalClass() throws Exception { + doExtractFunctionTest("idea/testData/refactoring/extractFunction/parameters/nonDenotableTypes/localClass.kt"); + } + + } + + public static Test innerSuite() { + TestSuite suite = new TestSuite("Parameters"); + suite.addTestSuite(Parameters.class); + suite.addTestSuite(ExtractSuper.class); + suite.addTestSuite(ExtractThis.class); + suite.addTestSuite(Misc.class); + suite.addTestSuite(NonDenotableTypes.class); + return suite; + } + } + + public static Test innerSuite() { + TestSuite suite = new TestSuite("ExtractFunction"); + suite.addTestSuite(ExtractFunction.class); + suite.addTestSuite(Basic.class); + suite.addTest(ControlFlow.innerSuite()); + suite.addTest(Parameters.innerSuite()); + return suite; + } + } + public static Test suite() { TestSuite suite = new TestSuite("JetExtractionTestGenerated"); suite.addTestSuite(IntroduceVariable.class); + suite.addTest(ExtractFunction.innerSuite()); return suite; } }