Change Signature: move lambda outside of parentheses if the arguments are reordered so that the lambda goes last

#KT-30128 Fixed
This commit is contained in:
Toshiaki Kameyama
2019-02-27 00:08:23 +09:00
committed by klunnii
parent 912fd556e5
commit 82d81d5223
4 changed files with 23 additions and 0 deletions
@@ -31,11 +31,14 @@ import com.intellij.usageView.UsageViewDescriptor
import com.intellij.util.containers.MultiMap
import org.jetbrains.kotlin.idea.KotlinBundle
import org.jetbrains.kotlin.idea.codeInsight.shorten.performDelayedRefactoringRequests
import org.jetbrains.kotlin.idea.core.canMoveLambdaOutsideParentheses
import org.jetbrains.kotlin.idea.core.moveFunctionLiteralOutsideParentheses
import org.jetbrains.kotlin.idea.refactoring.broadcastRefactoringExit
import org.jetbrains.kotlin.idea.refactoring.changeSignature.usages.KotlinFunctionCallUsage
import org.jetbrains.kotlin.idea.refactoring.changeSignature.usages.KotlinImplicitReceiverUsage
import org.jetbrains.kotlin.idea.refactoring.changeSignature.usages.KotlinUsageInfo
import org.jetbrains.kotlin.idea.refactoring.changeSignature.usages.KotlinWrapperForJavaUsageInfos
import org.jetbrains.kotlin.psi.KtCallExpression
import java.util.*
class KotlinChangeSignatureProcessor(
@@ -136,6 +139,12 @@ class KotlinChangeSignatureProcessor(
override fun performRefactoring(usages: Array<out UsageInfo>) {
try {
super.performRefactoring(usages)
usages.forEach {
val callExpression = it.element as? KtCallExpression ?: return@forEach
if (callExpression.canMoveLambdaOutsideParentheses()) {
callExpression.moveFunctionLiteralOutsideParentheses()
}
}
performDelayedRefactoringRequests(myProject)
} finally {
changeInfo.invalidate()
@@ -0,0 +1,6 @@
fun <caret>foo(y: Int, x: () -> Unit) {
}
fun test() {
foo(1) { 2 }
}
@@ -0,0 +1,6 @@
fun <caret>foo(x: () -> Unit, y: Int) {
}
fun test() {
foo({ 2 }, 1)
}
@@ -1618,4 +1618,6 @@ class KotlinChangeSignatureTest : KotlinLightCodeInsightFixtureTestCase() {
addParameter(parameterInfo)
}
}
fun testMoveLambdaParameterToLast() = doTest { swapParameters(0, 1) }
}