From 28aa0763a94841f377752ae5febf3728628b85e0 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Mon, 30 Jul 2018 05:59:52 +0300 Subject: [PATCH] "Convert to run / with": don't suggest on java static method call #KT-25739 Fixed --- .../ConvertDotQualifiedToScopeIntention.kt | 8 ++++++-- .../intentions/convertToRun/javaMethod.1.java | 4 ++++ .../convertToRun/javaMethod.1.java.after | 4 ++++ .../intentions/convertToRun/javaMethod.kt | 5 +++++ .../convertToRun/javaMethod.kt.after | 7 +++++++ .../convertToRun/javaStaticMethod.1.java | 4 ++++ .../convertToRun/javaStaticMethod.kt | 5 +++++ .../convertToWith/javaMethod.1.java | 4 ++++ .../convertToWith/javaMethod.1.java.after | 4 ++++ .../intentions/convertToWith/javaMethod.kt | 5 +++++ .../convertToWith/javaMethod.kt.after | 7 +++++++ .../convertToWith/javaStaticMethod.1.java | 4 ++++ .../convertToWith/javaStaticMethod.kt | 5 +++++ .../intentions/IntentionTestGenerated.java | 20 +++++++++++++++++++ 14 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 idea/testData/intentions/convertToRun/javaMethod.1.java create mode 100644 idea/testData/intentions/convertToRun/javaMethod.1.java.after create mode 100644 idea/testData/intentions/convertToRun/javaMethod.kt create mode 100644 idea/testData/intentions/convertToRun/javaMethod.kt.after create mode 100644 idea/testData/intentions/convertToRun/javaStaticMethod.1.java create mode 100644 idea/testData/intentions/convertToRun/javaStaticMethod.kt create mode 100644 idea/testData/intentions/convertToWith/javaMethod.1.java create mode 100644 idea/testData/intentions/convertToWith/javaMethod.1.java.after create mode 100644 idea/testData/intentions/convertToWith/javaMethod.kt create mode 100644 idea/testData/intentions/convertToWith/javaMethod.kt.after create mode 100644 idea/testData/intentions/convertToWith/javaStaticMethod.1.java create mode 100644 idea/testData/intentions/convertToWith/javaStaticMethod.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertDotQualifiedToScopeIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertDotQualifiedToScopeIntention.kt index 97797154d5e..e4ad41287de 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertDotQualifiedToScopeIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertDotQualifiedToScopeIntention.kt @@ -17,14 +17,18 @@ package org.jetbrains.kotlin.idea.intentions import com.intellij.openapi.editor.Editor +import com.intellij.psi.PsiClass +import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.psi.KtDotQualifiedExpression abstract class ConvertDotQualifiedToScopeIntention( - text: String + text: String ) : ConvertToScopeIntention(KtDotQualifiedExpression::class.java, text) { override fun isApplicableTo(element: KtDotQualifiedExpression, caretOffset: Int): Boolean { - val receiverExpressionText = element.getReceiverExpressionText() ?: return false + val receiverExpression = element.getLeftMostReceiverExpression() + if (receiverExpression.mainReference?.resolve() is PsiClass) return false + val receiverExpressionText = receiverExpression.text if (receiverExpressionText in BLACKLIST_RECEIVER_NAME) return false if (!isApplicableWithGivenReceiverText(element, receiverExpressionText)) return false val nextSibling = element.getDotQualifiedSiblingIfAny(forward = true) diff --git a/idea/testData/intentions/convertToRun/javaMethod.1.java b/idea/testData/intentions/convertToRun/javaMethod.1.java new file mode 100644 index 00000000000..b5ec9e84d47 --- /dev/null +++ b/idea/testData/intentions/convertToRun/javaMethod.1.java @@ -0,0 +1,4 @@ +public class JavaClass { + void bar1() {} + void bar2() {} +} \ No newline at end of file diff --git a/idea/testData/intentions/convertToRun/javaMethod.1.java.after b/idea/testData/intentions/convertToRun/javaMethod.1.java.after new file mode 100644 index 00000000000..b5ec9e84d47 --- /dev/null +++ b/idea/testData/intentions/convertToRun/javaMethod.1.java.after @@ -0,0 +1,4 @@ +public class JavaClass { + void bar1() {} + void bar2() {} +} \ No newline at end of file diff --git a/idea/testData/intentions/convertToRun/javaMethod.kt b/idea/testData/intentions/convertToRun/javaMethod.kt new file mode 100644 index 00000000000..d82968b2ea6 --- /dev/null +++ b/idea/testData/intentions/convertToRun/javaMethod.kt @@ -0,0 +1,5 @@ +// WITH_RUNTIME +fun test(c: JavaClass) { + c.bar1() + c.bar2() +} \ No newline at end of file diff --git a/idea/testData/intentions/convertToRun/javaMethod.kt.after b/idea/testData/intentions/convertToRun/javaMethod.kt.after new file mode 100644 index 00000000000..6b99c0b2419 --- /dev/null +++ b/idea/testData/intentions/convertToRun/javaMethod.kt.after @@ -0,0 +1,7 @@ +// WITH_RUNTIME +fun test(c: JavaClass) { + c.run { + bar1() + bar2() + } +} \ No newline at end of file diff --git a/idea/testData/intentions/convertToRun/javaStaticMethod.1.java b/idea/testData/intentions/convertToRun/javaStaticMethod.1.java new file mode 100644 index 00000000000..c7eb282285f --- /dev/null +++ b/idea/testData/intentions/convertToRun/javaStaticMethod.1.java @@ -0,0 +1,4 @@ +public class JavaClass { + public static void foo1() {} + public static void foo2() {} +} \ No newline at end of file diff --git a/idea/testData/intentions/convertToRun/javaStaticMethod.kt b/idea/testData/intentions/convertToRun/javaStaticMethod.kt new file mode 100644 index 00000000000..c67c8f44ea0 --- /dev/null +++ b/idea/testData/intentions/convertToRun/javaStaticMethod.kt @@ -0,0 +1,5 @@ +// IS_APPLICABLE: false +fun test() { + JavaClass.foo1() + JavaClass.foo2() +} \ No newline at end of file diff --git a/idea/testData/intentions/convertToWith/javaMethod.1.java b/idea/testData/intentions/convertToWith/javaMethod.1.java new file mode 100644 index 00000000000..b5ec9e84d47 --- /dev/null +++ b/idea/testData/intentions/convertToWith/javaMethod.1.java @@ -0,0 +1,4 @@ +public class JavaClass { + void bar1() {} + void bar2() {} +} \ No newline at end of file diff --git a/idea/testData/intentions/convertToWith/javaMethod.1.java.after b/idea/testData/intentions/convertToWith/javaMethod.1.java.after new file mode 100644 index 00000000000..b5ec9e84d47 --- /dev/null +++ b/idea/testData/intentions/convertToWith/javaMethod.1.java.after @@ -0,0 +1,4 @@ +public class JavaClass { + void bar1() {} + void bar2() {} +} \ No newline at end of file diff --git a/idea/testData/intentions/convertToWith/javaMethod.kt b/idea/testData/intentions/convertToWith/javaMethod.kt new file mode 100644 index 00000000000..d82968b2ea6 --- /dev/null +++ b/idea/testData/intentions/convertToWith/javaMethod.kt @@ -0,0 +1,5 @@ +// WITH_RUNTIME +fun test(c: JavaClass) { + c.bar1() + c.bar2() +} \ No newline at end of file diff --git a/idea/testData/intentions/convertToWith/javaMethod.kt.after b/idea/testData/intentions/convertToWith/javaMethod.kt.after new file mode 100644 index 00000000000..7c7cb663d4a --- /dev/null +++ b/idea/testData/intentions/convertToWith/javaMethod.kt.after @@ -0,0 +1,7 @@ +// WITH_RUNTIME +fun test(c: JavaClass) { + with(c) { + bar1() + bar2() + } +} \ No newline at end of file diff --git a/idea/testData/intentions/convertToWith/javaStaticMethod.1.java b/idea/testData/intentions/convertToWith/javaStaticMethod.1.java new file mode 100644 index 00000000000..c7eb282285f --- /dev/null +++ b/idea/testData/intentions/convertToWith/javaStaticMethod.1.java @@ -0,0 +1,4 @@ +public class JavaClass { + public static void foo1() {} + public static void foo2() {} +} \ No newline at end of file diff --git a/idea/testData/intentions/convertToWith/javaStaticMethod.kt b/idea/testData/intentions/convertToWith/javaStaticMethod.kt new file mode 100644 index 00000000000..c67c8f44ea0 --- /dev/null +++ b/idea/testData/intentions/convertToWith/javaStaticMethod.kt @@ -0,0 +1,5 @@ +// IS_APPLICABLE: false +fun test() { + JavaClass.foo1() + JavaClass.foo2() +} \ 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 a2917f8c508..e9f11d4a2a5 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -7032,6 +7032,16 @@ public class IntentionTestGenerated extends AbstractIntentionTest { runTest("idea/testData/intentions/convertToRun/itReceiver.kt"); } + @TestMetadata("javaMethod.kt") + public void testJavaMethod() throws Exception { + runTest("idea/testData/intentions/convertToRun/javaMethod.kt"); + } + + @TestMetadata("javaStaticMethod.kt") + public void testJavaStaticMethod() throws Exception { + runTest("idea/testData/intentions/convertToRun/javaStaticMethod.kt"); + } + @TestMetadata("methodChain.kt") public void testMethodChain() throws Exception { runTest("idea/testData/intentions/convertToRun/methodChain.kt"); @@ -7341,6 +7351,16 @@ public class IntentionTestGenerated extends AbstractIntentionTest { runTest("idea/testData/intentions/convertToWith/itReceiver.kt"); } + @TestMetadata("javaMethod.kt") + public void testJavaMethod() throws Exception { + runTest("idea/testData/intentions/convertToWith/javaMethod.kt"); + } + + @TestMetadata("javaStaticMethod.kt") + public void testJavaStaticMethod() throws Exception { + runTest("idea/testData/intentions/convertToWith/javaStaticMethod.kt"); + } + @TestMetadata("methodChain.kt") public void testMethodChain() throws Exception { runTest("idea/testData/intentions/convertToWith/methodChain.kt");