From 2850a7898dbde77bbeffc0b0d35c3458b5459273 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 27 Jul 2016 18:47:19 +0300 Subject: [PATCH] KT-11425: replace call with binary operator works now also with equals() and == (cherry picked from commit 5d47fdf) --- .../ReplaceCallWithBinaryOperatorIntention.kt | 30 ++++++++++++------- .../replaceCallWithBinaryOperator/equals.kt | 3 ++ .../equals.kt.after | 3 ++ .../intentions/IntentionTestGenerated.java | 6 ++++ 4 files changed, 31 insertions(+), 11 deletions(-) create mode 100644 idea/testData/intentions/conventionNameCalls/replaceCallWithBinaryOperator/equals.kt create mode 100644 idea/testData/intentions/conventionNameCalls/replaceCallWithBinaryOperator/equals.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/conventionNameCalls/ReplaceCallWithBinaryOperatorIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/conventionNameCalls/ReplaceCallWithBinaryOperatorIntention.kt index 541307b7fc8..3ef0c77fe3f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/conventionNameCalls/ReplaceCallWithBinaryOperatorIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/conventionNameCalls/ReplaceCallWithBinaryOperatorIntention.kt @@ -20,18 +20,22 @@ import com.intellij.codeInsight.intention.HighPriorityAction import com.intellij.openapi.editor.Editor import com.intellij.openapi.util.TextRange import org.jetbrains.kotlin.idea.intentions.* +import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.psi.KtDotQualifiedExpression -import org.jetbrains.kotlin.psi.KtPsiFactory -import org.jetbrains.kotlin.psi.createExpressionByPattern +import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.calls.model.ArgumentMatch import org.jetbrains.kotlin.resolve.calls.model.isReallySuccess import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.types.expressions.OperatorConventions +import org.jetbrains.kotlin.util.OperatorNameConventions -class ReplaceCallWithBinaryOperatorIntention : SelfTargetingRangeIntention(KtDotQualifiedExpression::class.java, "Replace call with binary operator"), HighPriorityAction { +class ReplaceCallWithBinaryOperatorIntention : SelfTargetingRangeIntention( + KtDotQualifiedExpression::class.java, + "Replace call with binary operator" +), HighPriorityAction { override fun applicabilityRange(element: KtDotQualifiedExpression): TextRange? { - val operation = operation(element.calleeName) ?: return null + val calleeExpression = element.callExpression?.calleeExpression as? KtSimpleNameExpression ?: return null + val operation = operation(calleeExpression) ?: return null val resolvedCall = element.toResolvedCall(BodyResolveMode.PARTIAL) ?: return null if (!resolvedCall.isReallySuccess()) return null @@ -42,19 +46,23 @@ class ReplaceCallWithBinaryOperatorIntention : SelfTargetingRangeIntention(2) \ No newline at end of file diff --git a/idea/testData/intentions/conventionNameCalls/replaceCallWithBinaryOperator/equals.kt.after b/idea/testData/intentions/conventionNameCalls/replaceCallWithBinaryOperator/equals.kt.after new file mode 100644 index 00000000000..cc156465d9f --- /dev/null +++ b/idea/testData/intentions/conventionNameCalls/replaceCallWithBinaryOperator/equals.kt.after @@ -0,0 +1,3 @@ +// INTENTION_TEXT: Replace with '==' operator + +val x = 2 == 2 \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index 517f3a577a1..6b782e173d6 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -2738,6 +2738,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest { doTest(fileName); } + @TestMetadata("equals.kt") + public void testEquals() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/conventionNameCalls/replaceCallWithBinaryOperator/equals.kt"); + doTest(fileName); + } + @TestMetadata("extensionFunction.kt") public void testExtensionFunction() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/conventionNameCalls/replaceCallWithBinaryOperator/extensionFunction.kt");