From 9dd67cfc4dfc0d25fb5f8583550464ed187db0a8 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Wed, 29 Apr 2015 17:37:01 +0300 Subject: [PATCH] InfixCallToOrdinaryIntention - smaller range + minor code improvements --- .../InfixCallToOrdinaryIntention.kt | 28 ++++++++++--------- .../functionCallAfterInfixCall.kt | 2 +- .../functionLiteralArgument.kt | 2 +- .../nonApplicableBinaryOperation.kt | 2 +- .../infixCallToOrdinary/nullAssertedCall.kt | 2 +- .../parenthesesAroundRightHandArgument.kt | 2 +- .../simpleInfixFunctionCall.kt | 2 +- 7 files changed, 21 insertions(+), 19 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/InfixCallToOrdinaryIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/InfixCallToOrdinaryIntention.kt index f614838db33..f76f3066541 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/InfixCallToOrdinaryIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/InfixCallToOrdinaryIntention.kt @@ -23,26 +23,28 @@ import org.jetbrains.kotlin.psi.JetFunctionLiteralExpression import org.jetbrains.kotlin.psi.JetParenthesizedExpression import org.jetbrains.kotlin.lexer.JetTokens -public class InfixCallToOrdinaryIntention : JetSelfTargetingOffsetIndependentIntention(javaClass(), "Replace infix call with ordinary call") { - override fun isApplicableTo(element: JetBinaryExpression): Boolean { - return element.getLeft() != null && element.getRight() != null && element.getOperationToken() == JetTokens.IDENTIFIER +public class InfixCallToOrdinaryIntention : JetSelfTargetingIntention(javaClass(), "Replace infix call with ordinary call") { + override fun isApplicableTo(element: JetBinaryExpression, caretOffset: Int): Boolean { + if (element.getOperationToken() != JetTokens.IDENTIFIER || element.getLeft() == null || element.getRight() == null) return false + return element.getOperationReference().getTextRange().containsOffset(caretOffset) } override fun applyTo(element: JetBinaryExpression, editor: Editor) { val receiverText = element.getLeft()!!.getText() val argumentText = element.getRight()!!.getText() val functionName = element.getOperationReference().getText() - val replacementExpressionStringBuilder = StringBuilder("$receiverText.$functionName") - replacementExpressionStringBuilder.append( - when (element.getRight()) { - is JetFunctionLiteralExpression -> " $argumentText" - is JetParenthesizedExpression -> argumentText - else -> "($argumentText)" - } - ) + val text = StringBuilder { + append(receiverText) + append(".") + append(functionName) + append(when (element.getRight()) { + is JetFunctionLiteralExpression -> " $argumentText" + is JetParenthesizedExpression -> argumentText + else -> "($argumentText)" + }) + }.toString() - val replacement = JetPsiFactory(element).createExpression(replacementExpressionStringBuilder.toString()) - element.replace(replacement) + element.replace(JetPsiFactory(element).createExpression(text)) } } diff --git a/idea/testData/intentions/infixCallToOrdinary/functionCallAfterInfixCall.kt b/idea/testData/intentions/infixCallToOrdinary/functionCallAfterInfixCall.kt index 76a8b4102c6..3bc06bf0f64 100644 --- a/idea/testData/intentions/infixCallToOrdinary/functionCallAfterInfixCall.kt +++ b/idea/testData/intentions/infixCallToOrdinary/functionCallAfterInfixCall.kt @@ -1,3 +1,3 @@ fun foo(x: Int) { - (x shl 1).minus() + (x shl 1).minus() } diff --git a/idea/testData/intentions/infixCallToOrdinary/functionLiteralArgument.kt b/idea/testData/intentions/infixCallToOrdinary/functionLiteralArgument.kt index db15a7baac9..5b67ae91742 100644 --- a/idea/testData/intentions/infixCallToOrdinary/functionLiteralArgument.kt +++ b/idea/testData/intentions/infixCallToOrdinary/functionLiteralArgument.kt @@ -2,5 +2,5 @@ trait Foo { fun foo(f: (Int) -> Unit) } fun foo(x: Foo) { - x foo { it * 2 } + x foo { it * 2 } } diff --git a/idea/testData/intentions/infixCallToOrdinary/nonApplicableBinaryOperation.kt b/idea/testData/intentions/infixCallToOrdinary/nonApplicableBinaryOperation.kt index 7a62c6a51d0..3d932d3d092 100644 --- a/idea/testData/intentions/infixCallToOrdinary/nonApplicableBinaryOperation.kt +++ b/idea/testData/intentions/infixCallToOrdinary/nonApplicableBinaryOperation.kt @@ -1,4 +1,4 @@ // IS_APPLICABLE: false fun foo(x: String) { - x == x + x == x } diff --git a/idea/testData/intentions/infixCallToOrdinary/nullAssertedCall.kt b/idea/testData/intentions/infixCallToOrdinary/nullAssertedCall.kt index 066148b11d6..d15aa7aa570 100644 --- a/idea/testData/intentions/infixCallToOrdinary/nullAssertedCall.kt +++ b/idea/testData/intentions/infixCallToOrdinary/nullAssertedCall.kt @@ -1,3 +1,3 @@ fun foo(x: String) { - x!! compareTo "1" + x!! compareTo "1" } diff --git a/idea/testData/intentions/infixCallToOrdinary/parenthesesAroundRightHandArgument.kt b/idea/testData/intentions/infixCallToOrdinary/parenthesesAroundRightHandArgument.kt index 338269d3a97..68934da493b 100644 --- a/idea/testData/intentions/infixCallToOrdinary/parenthesesAroundRightHandArgument.kt +++ b/idea/testData/intentions/infixCallToOrdinary/parenthesesAroundRightHandArgument.kt @@ -1,3 +1,3 @@ fun foo(x: String) { - x plus ("1" + "2") + x plus ("1" + "2") } diff --git a/idea/testData/intentions/infixCallToOrdinary/simpleInfixFunctionCall.kt b/idea/testData/intentions/infixCallToOrdinary/simpleInfixFunctionCall.kt index 854a8f59505..3905bb0ed64 100644 --- a/idea/testData/intentions/infixCallToOrdinary/simpleInfixFunctionCall.kt +++ b/idea/testData/intentions/infixCallToOrdinary/simpleInfixFunctionCall.kt @@ -1,3 +1,3 @@ fun foo(x: Int) { - x compareTo 1 + x compareTo 1 }