From 2f29b38b198c58f40b48cc7092bee30a31ae6325 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Fri, 3 Apr 2020 09:26:41 +0900 Subject: [PATCH] "Replace 'invoke' with direct call" intention: fix false positive when function is not operator #KT-37977 Fixed --- .../conventionNameCalls/ReplaceInvokeIntention.kt | 8 +++++++- .../conventionNameCalls/replaceInvoke/java.1.java | 3 +++ .../replaceInvoke/java.1.java.after | 3 +++ .../conventionNameCalls/replaceInvoke/java.kt | 3 +++ .../conventionNameCalls/replaceInvoke/java.kt.after | 3 +++ .../conventionNameCalls/replaceInvoke/notOperator.kt | 8 ++++++++ .../kotlin/idea/intentions/IntentionTestGenerated.java | 10 ++++++++++ 7 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 idea/testData/intentions/conventionNameCalls/replaceInvoke/java.1.java create mode 100644 idea/testData/intentions/conventionNameCalls/replaceInvoke/java.1.java.after create mode 100644 idea/testData/intentions/conventionNameCalls/replaceInvoke/java.kt create mode 100644 idea/testData/intentions/conventionNameCalls/replaceInvoke/java.kt.after create mode 100644 idea/testData/intentions/conventionNameCalls/replaceInvoke/notOperator.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/conventionNameCalls/ReplaceInvokeIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/conventionNameCalls/ReplaceInvokeIntention.kt index a4002c49876..b652ef93942 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/conventionNameCalls/ReplaceInvokeIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/conventionNameCalls/ReplaceInvokeIntention.kt @@ -8,12 +8,15 @@ package org.jetbrains.kotlin.idea.intentions.conventionNameCalls import com.intellij.codeInsight.intention.HighPriorityAction import com.intellij.openapi.editor.Editor import com.intellij.openapi.util.TextRange +import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.intentions.SelfTargetingRangeIntention import org.jetbrains.kotlin.idea.intentions.callExpression import org.jetbrains.kotlin.idea.intentions.calleeName +import org.jetbrains.kotlin.idea.intentions.toResolvedCall import org.jetbrains.kotlin.psi.KtCallExpression import org.jetbrains.kotlin.psi.KtDotQualifiedExpression +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.util.OperatorNameConventions class ReplaceInvokeIntention : SelfTargetingRangeIntention( @@ -21,7 +24,10 @@ class ReplaceInvokeIntention : SelfTargetingRangeIntentioninvoke() +} \ No newline at end of file diff --git a/idea/testData/intentions/conventionNameCalls/replaceInvoke/java.kt.after b/idea/testData/intentions/conventionNameCalls/replaceInvoke/java.kt.after new file mode 100644 index 00000000000..99993184de6 --- /dev/null +++ b/idea/testData/intentions/conventionNameCalls/replaceInvoke/java.kt.after @@ -0,0 +1,3 @@ +fun main() { + JavaClass()() +} \ No newline at end of file diff --git a/idea/testData/intentions/conventionNameCalls/replaceInvoke/notOperator.kt b/idea/testData/intentions/conventionNameCalls/replaceInvoke/notOperator.kt new file mode 100644 index 00000000000..3e3be18a79d --- /dev/null +++ b/idea/testData/intentions/conventionNameCalls/replaceInvoke/notOperator.kt @@ -0,0 +1,8 @@ +// IS_APPLICABLE: false +class C { + fun invoke() {} +} + +fun main() { + C().invoke() +} \ 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 7a1069a0055..16483a3ea4a 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -3930,6 +3930,11 @@ public class IntentionTestGenerated extends AbstractIntentionTest { runTest("idea/testData/intentions/conventionNameCalls/replaceInvoke/invokeInExpression.kt"); } + @TestMetadata("java.kt") + public void testJava() throws Exception { + runTest("idea/testData/intentions/conventionNameCalls/replaceInvoke/java.kt"); + } + @TestMetadata("namedArgumentInvoke.kt") public void testNamedArgumentInvoke() throws Exception { runTest("idea/testData/intentions/conventionNameCalls/replaceInvoke/namedArgumentInvoke.kt"); @@ -3940,6 +3945,11 @@ public class IntentionTestGenerated extends AbstractIntentionTest { runTest("idea/testData/intentions/conventionNameCalls/replaceInvoke/noArgumentInvoke.kt"); } + @TestMetadata("notOperator.kt") + public void testNotOperator() throws Exception { + runTest("idea/testData/intentions/conventionNameCalls/replaceInvoke/notOperator.kt"); + } + @TestMetadata("typeAndValueArgument.kt") public void testTypeAndValueArgument() throws Exception { runTest("idea/testData/intentions/conventionNameCalls/replaceInvoke/typeAndValueArgument.kt");