Extract Function/Introduce Property: Support extraction of string template fragments

This commit is contained in:
Alexey Sedunov
2015-11-18 15:11:10 +03:00
parent f4b4b023a3
commit 741489f4a5
75 changed files with 846 additions and 91 deletions
@@ -0,0 +1,3 @@
fun foo(param: Int): String {
return "<selection>abc${pa</selection>ram}def"
}
@@ -0,0 +1 @@
Cannot perform refactoring without an expression
@@ -0,0 +1,3 @@
fun foo(param: Int): String {
return "<selection>abc$pa</selection>ram"
}
@@ -0,0 +1 @@
Cannot perform refactoring without an expression
@@ -0,0 +1,3 @@
fun foo(a: Int): String {
return "<selection>abc$a\</selection>ndef"
}
@@ -0,0 +1 @@
Cannot perform refactoring without an expression
@@ -0,0 +1,7 @@
// SUGGESTED_NAMES: b, getX
fun foo(param: Int): String {
val x = "xyfalsez"
val y = "xyFalsez"
val z = false
return "ab<selection>false</selection>def"
}
@@ -0,0 +1,9 @@
// SUGGESTED_NAMES: b, getX
fun foo(param: Int): String {
val x = "xy${b()}z"
val y = "xyFalsez"
val z = false
return "ab${b()}def"
}
private fun b() = false
@@ -0,0 +1,8 @@
// SUGGESTED_NAMES: i, getX
fun foo(param: Int): String {
val x = "a1234_"
val y = "-4123a"
val z = "+1243a"
val u = 123
return "ab<selection>123</selection>def"
}
@@ -0,0 +1,10 @@
// SUGGESTED_NAMES: i, getX
fun foo(param: Int): String {
val x = "a${i()}4_"
val y = "-4${i()}a"
val z = "+1243a"
val u = 123
return "ab${i()}def"
}
private fun i() = 123
@@ -0,0 +1,7 @@
// SUGGESTED_NAMES: b, getX
fun foo(param: Int): String {
val x = "atrue123"
val x = "aTRUE123"
val z = true
return "ab<selection>true</selection>def"
}
@@ -0,0 +1,9 @@
// SUGGESTED_NAMES: b, getX
fun foo(param: Int): String {
val x = "a${b()}123"
val x = "aTRUE123"
val z = true
return "ab${b()}def"
}
private fun b() = true
@@ -0,0 +1,8 @@
// PARAM_DESCRIPTOR: value-parameter val a: kotlin.Int defined in foo
// PARAM_TYPES: kotlin.Int, Number, Comparable<Int>, java.io.Serializable, Any
fun foo(a: Int): String {
val x = "abc$a"
val y = "abc${a}"
val z = "abc{$a}def"
return "<selection>abc$a</selection>" + "def"
}
@@ -0,0 +1,10 @@
// PARAM_DESCRIPTOR: value-parameter val a: kotlin.Int defined in foo
// PARAM_TYPES: kotlin.Int, Number, Comparable<Int>, java.io.Serializable, Any
fun foo(a: Int): String {
val x = s(a)
val y = s(a)
val z = "abc{$a}def"
return s(a) + "def"
}
private fun s(a: Int) = "abc$a"
@@ -0,0 +1,8 @@
// PARAM_DESCRIPTOR: value-parameter val a: kotlin.Int defined in foo
// PARAM_TYPES: kotlin.Int
fun foo(a: Int): String {
val x = "-${a + 1}"
val y = "x${a + 1}y"
val z = "x${a - 1}y"
return "abc<selection>${a + 1}</selection>def"
}
@@ -0,0 +1,10 @@
// PARAM_DESCRIPTOR: value-parameter val a: kotlin.Int defined in foo
// PARAM_TYPES: kotlin.Int
fun foo(a: Int): String {
val x = "-${i(a)}"
val y = "x${i(a)}y"
val z = "x${a - 1}y"
return "abc${i(a)}def"
}
private fun i(a: Int) = a + 1
@@ -0,0 +1,8 @@
// PARAM_DESCRIPTOR: value-parameter val a: kotlin.Int defined in foo
// PARAM_TYPES: kotlin.Int, Number, Comparable<Int>, java.io.Serializable, Any
fun foo(a: Int): String {
val x = "-$a"
val y = "x${a}y"
val z = "x$ay"
return "abc<selection>${a}</selection>def"
}
@@ -0,0 +1,10 @@
// PARAM_DESCRIPTOR: value-parameter val a: kotlin.Int defined in foo
// PARAM_TYPES: kotlin.Int, Number, Comparable<Int>, java.io.Serializable, Any
fun foo(a: Int): String {
val x = "-$a"
val y = "x${a}y"
val z = "x$ay"
return "abc${i(a)}def"
}
private fun i(a: Int) = a
@@ -0,0 +1,8 @@
// SUGGESTED_NAMES: s, getX
// PARAM_DESCRIPTOR: value-parameter val a: kotlin.Int defined in foo
// PARAM_TYPES: kotlin.Int
fun foo(a: Int): String {
val x = "+cd$a:${a + 1}efg"
val y = "+cd$a${a + 1}efg"
return "ab<selection>cd$a:${a + 1}ef</selection>"
}
@@ -0,0 +1,10 @@
// SUGGESTED_NAMES: s, getX
// PARAM_DESCRIPTOR: value-parameter val a: kotlin.Int defined in foo
// PARAM_TYPES: kotlin.Int
fun foo(a: Int): String {
val x = "+${s(a)}g"
val y = "+cd$a${a + 1}efg"
return "ab${s(a)}"
}
private fun s(a: Int) = "cd$a:${a + 1}ef"
@@ -0,0 +1,8 @@
// SUGGESTED_NAMES: s, getX
// PARAM_DESCRIPTOR: value-parameter val a: kotlin.Int defined in foo
// PARAM_TYPES: kotlin.Int
fun foo(a: Int): String {
val x = "_c$a:${a + 1}d_"
val y = "_$a:${a + 1}d_"
return "ab<selection>c$a:${a + 1}d</selection>ef"
}
@@ -0,0 +1,10 @@
// SUGGESTED_NAMES: s, getX
// PARAM_DESCRIPTOR: value-parameter val a: kotlin.Int defined in foo
// PARAM_TYPES: kotlin.Int
fun foo(a: Int): String {
val x = "_${s(a)}_"
val y = "_$a:${a + 1}d_"
return "ab${s(a)}ef"
}
private fun s(a: Int) = "c$a:${a + 1}d"
@@ -0,0 +1,8 @@
// SUGGESTED_NAMES: s, getX
// PARAM_DESCRIPTOR: value-parameter val a: kotlin.Int defined in foo
// PARAM_TYPES: kotlin.Int
fun foo(a: Int): String {
val x = "_ab$a:${a + 1}cd__"
val y = "_a$a:${a + 1}cd__"
return "<selection>ab$a:${a + 1}cd</selection>ef"
}
@@ -0,0 +1,10 @@
// SUGGESTED_NAMES: s, getX
// PARAM_DESCRIPTOR: value-parameter val a: kotlin.Int defined in foo
// PARAM_TYPES: kotlin.Int
fun foo(a: Int): String {
val x = "_${s(a)}__"
val y = "_a$a:${a + 1}cd__"
return "${s(a)}ef"
}
private fun s(a: Int) = "ab$a:${a + 1}cd"
@@ -0,0 +1,12 @@
// SUGGESTED_NAMES: s, getX
// PARAM_DESCRIPTOR: value-parameter val a: kotlin.Int defined in foo
// PARAM_TYPES: kotlin.Int
fun foo(a: Int): String {
val x = """_c$a
:${a + 1}d_"""
val y = "_$a:${a + 1}d_"
val z = """_c$a:${a + 1}d_"""
val u = "_c$a\n:${a + 1}d_"
return """ab<selection>c$a
:${a + 1}d</selection>ef"""
}
@@ -0,0 +1,13 @@
// SUGGESTED_NAMES: s, getX
// PARAM_DESCRIPTOR: value-parameter val a: kotlin.Int defined in foo
// PARAM_TYPES: kotlin.Int
fun foo(a: Int): String {
val x = """_${s(a)}_"""
val y = "_$a:${a + 1}d_"
val z = """_c$a:${a + 1}d_"""
val u = "_c$a\n:${a + 1}d_"
return """ab${s(a)}ef"""
}
private fun s(a: Int) = """c$a
:${a + 1}d"""
@@ -0,0 +1,7 @@
// SUGGESTED_NAMES: s, getX
fun foo(a: Int): String {
val x = "xabc$a"
val y = "${a}abcx"
val z = "xacb$a"
return "<selection>abc</selection>def"
}
@@ -0,0 +1,9 @@
// SUGGESTED_NAMES: s, getX
fun foo(a: Int): String {
val x = "x${s()}$a"
val y = "${a}${s()}x"
val z = "xacb$a"
return "${s()}def"
}
private fun s() = "abc"
@@ -0,0 +1,7 @@
// SUGGESTED_NAMES: s, getX
fun foo(a: Int): String {
val x = "xcd$a"
val y = "${a}cdx"
val z = "xcf$a"
return "ab<selection>cd</selection>ef"
}
@@ -0,0 +1,9 @@
// SUGGESTED_NAMES: s, getX
fun foo(a: Int): String {
val x = "x${s()}$a"
val y = "${a}${s()}x"
val z = "xcf$a"
return "ab${s()}ef"
}
private fun s() = "cd"
@@ -0,0 +1,7 @@
// SUGGESTED_NAMES: s, getX
fun foo(a: Int): String {
val x = "xdef$a"
val y = "${a}defx"
val z = "xddf$a"
return "abc<selection>def</selection>"
}
@@ -0,0 +1,9 @@
// SUGGESTED_NAMES: s, getX
fun foo(a: Int): String {
val x = "x${s()}$a"
val y = "${a}${s()}x"
val z = "xddf$a"
return "abc${s()}"
}
private fun s() = "def"