From ffa3cf002736e03f3ab8477622610e0e0c0fa4ac Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 31 Jan 2017 13:21:47 +0100 Subject: [PATCH] Don't show "Convert lambda to reference" for lambdas passed to suspend functions #KT-16072 Fixed --- .../intentions/ConvertLambdaToReferenceIntention.kt | 2 ++ .../intentions/convertLambdaToReference/suspendFun.kt | 10 ++++++++++ .../kotlin/idea/intentions/IntentionTestGenerated.java | 6 ++++++ 3 files changed, 18 insertions(+) create mode 100644 idea/testData/intentions/convertLambdaToReference/suspendFun.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt index ec5d831d608..f738c44a57f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/ConvertLambdaToReferenceIntention.kt @@ -87,6 +87,8 @@ class ConvertLambdaToReferenceIntention : SelfTargetingOffsetIndependentIntentio if (calleeDescriptor.typeParameters.isNotEmpty()) return false // No references to Java synthetic properties if (calleeDescriptor is SyntheticJavaPropertyDescriptor) return false + // No suspend functions + if ((calleeDescriptor as? FunctionDescriptor)?.isSuspend ?: false) return false val descriptorHasReceiver = with(calleeDescriptor) { // No references to both member / extension if (dispatchReceiverParameter != null && extensionReceiverParameter != null) return false diff --git a/idea/testData/intentions/convertLambdaToReference/suspendFun.kt b/idea/testData/intentions/convertLambdaToReference/suspendFun.kt new file mode 100644 index 00000000000..f5a1c639ce9 --- /dev/null +++ b/idea/testData/intentions/convertLambdaToReference/suspendFun.kt @@ -0,0 +1,10 @@ +// IS_APPLICABLE: false +// WITH_RUNTIME + +suspend fun String.bar() { + +} + +suspend fun x() { + listOf("Jack", "Tom").forEach { it.bar() } +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index c0d40c1c0e4..0d48aa18e32 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -4463,6 +4463,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest { doTest(fileName); } + @TestMetadata("suspendFun.kt") + public void testSuspendFun() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/convertLambdaToReference/suspendFun.kt"); + doTest(fileName); + } + @TestMetadata("syntheticProperty.kt") public void testSyntheticProperty() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/convertLambdaToReference/syntheticProperty.kt");