diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/intentions/OperatorToFunctionIntention.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/intentions/OperatorToFunctionIntention.kt index 664d83a9056..ae681372821 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/intentions/OperatorToFunctionIntention.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/intentions/OperatorToFunctionIntention.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.idea.util.CommentSaver import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getQualifiedElementSelector +import org.jetbrains.kotlin.resolve.calls.callUtil.getCalleeExpressionIfAny import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.util.OperatorNameConventions @@ -199,9 +200,15 @@ public class OperatorToFunctionIntention : SelfTargetingIntention( val funcLitArgs = element.getLambdaArguments() val calleeText = callee.getText() val transformation = "$calleeText.${OperatorNameConventions.INVOKE.asString()}" + - (if (argumentString == null) "" else "($argumentString)") + (if (argumentString == null) "()" else "($argumentString)") val transformed = KtPsiFactory(element).createExpression(transformation) - funcLitArgs.forEach { transformed.add(it) } + val callExpression = transformed.getCalleeExpressionIfAny()?.parent as? KtCallExpression + if (callExpression != null) { + funcLitArgs.forEach { callExpression.add(it) } + if (argumentString == null) { + callExpression.valueArgumentList?.delete() + } + } return callee.getParent()!!.replace(transformed) as KtExpression } diff --git a/idea/testData/intentions/operatorToFunction/functionCallWithMultipleArgumentsAndSingleLambda.kt.after b/idea/testData/intentions/operatorToFunction/functionCallWithMultipleArgumentsAndSingleLambda.kt.after index d5496b8894d..691d9423987 100644 --- a/idea/testData/intentions/operatorToFunction/functionCallWithMultipleArgumentsAndSingleLambda.kt.after +++ b/idea/testData/intentions/operatorToFunction/functionCallWithMultipleArgumentsAndSingleLambda.kt.after @@ -4,5 +4,5 @@ class Mocha() { } fun main() { val mocha = Mocha() - val testing = mocha.invoke(1, "fire"){ x: Int -> "hello world" } + val testing = mocha.invoke(1, "fire") { x: Int -> "hello world" } } \ No newline at end of file diff --git a/idea/testData/intentions/operatorToFunction/functionCallWithSingleLambda.kt.after b/idea/testData/intentions/operatorToFunction/functionCallWithSingleLambda.kt.after index 3bbe35d4bfd..6425e29fd0c 100644 --- a/idea/testData/intentions/operatorToFunction/functionCallWithSingleLambda.kt.after +++ b/idea/testData/intentions/operatorToFunction/functionCallWithSingleLambda.kt.after @@ -3,5 +3,5 @@ class Mocha() { } fun main() { val mocha = Mocha() - val testing = mocha.invoke{ x: Int -> "hello world" } + val testing = mocha.invoke { x: Int -> "hello world" } } \ No newline at end of file