Merge pull request #472 from wutalman/move_lambda

KT-4889: (Bug fix) Intention to move lambda outside parentheses now handles commas
This commit is contained in:
Svetlana Isakova
2014-05-29 17:11:41 +04:00
8 changed files with 90 additions and 9 deletions
@@ -31,15 +31,27 @@ public class MoveLambdaOutsideParenthesesIntention : JetSelfTargetingIntention<J
override fun applyTo(element: JetCallExpression, editor: Editor) {
val args = element.getValueArguments()
val literal = args.last!!.getArgumentExpression()?.getText() // we know args.last is non null
val callText = element.getText()
if (callText == null || literal == null) return
val endIndex = callText.lastIndexOf(",")
val newCall = if (endIndex > 0) {
"${callText.substring(0, endIndex)}) $literal"
} else {
"${callText.substring(0, callText.indexOf("("))} $literal"
}
val literal = args.last!!.getArgumentExpression()?.getText()
val calleeText = element.getCalleeExpression()?.getText()
if (calleeText == null || literal == null) return
val params =
args.subList(0, args.size - 1).map {
val name = it?.getArgumentName()?.getText()
val arg = it?.getArgumentExpression()?.getText()
if (name != null) {
"$name = $arg"
} else {
"$arg"
}
}.makeString(", ", "(", ")")
val newCall =
if (params == "()") {
"$calleeText $literal"
} else {
"$calleeText$params $literal"
}
element.replace(JetPsiFactory.createExpression(element.getProject(), newCall))
}
}