diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterDialog.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterDialog.kt index fef8073e2fa..ef857c10bbc 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterDialog.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterDialog.kt @@ -34,6 +34,7 @@ import org.jetbrains.kotlin.idea.refactoring.isMultiLine import org.jetbrains.kotlin.idea.refactoring.runRefactoringWithPostprocessing import org.jetbrains.kotlin.idea.refactoring.validateElement import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers +import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.quoteIfNeeded import org.jetbrains.kotlin.types.KotlinType @@ -285,6 +286,9 @@ class KotlinIntroduceParameterDialog private constructor( val returnType = function.typeReference?.text ?: "Unit" chosenType = (receiverType?.let { "$it." } ?: "") + "($parameterTypes) -> $returnType" + if (KtTokens.SUSPEND_KEYWORD in newDescriptor.modifiers) { + chosenType = "${KtTokens.SUSPEND_KEYWORD} $chosenType" + } newArgumentValue = createLambdaForArgument(function) newReplacer = { } diff --git a/idea/testData/refactoring/introduceLambdaParameter/suspendCalls.kt b/idea/testData/refactoring/introduceLambdaParameter/suspendCalls.kt new file mode 100644 index 00000000000..601ba0cc5a4 --- /dev/null +++ b/idea/testData/refactoring/introduceLambdaParameter/suspendCalls.kt @@ -0,0 +1,6 @@ +// WITH_DEFAULT_VALUE: false +suspend fun foo(n: Int) = n + +suspend fun test() { + val m = foo(1) +} \ No newline at end of file diff --git a/idea/testData/refactoring/introduceLambdaParameter/suspendCalls.kt.after b/idea/testData/refactoring/introduceLambdaParameter/suspendCalls.kt.after new file mode 100644 index 00000000000..b8150794587 --- /dev/null +++ b/idea/testData/refactoring/introduceLambdaParameter/suspendCalls.kt.after @@ -0,0 +1,6 @@ +// WITH_DEFAULT_VALUE: false +suspend fun foo(n: Int) = n + +suspend fun test(i: suspend () -> Int) { + val m = i() +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractionTestGenerated.java index 806b09867d8..c551da6f301 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/introduce/ExtractionTestGenerated.java @@ -3557,6 +3557,11 @@ public class ExtractionTestGenerated extends AbstractExtractionTest { runTest("idea/testData/refactoring/introduceLambdaParameter/lambdaParamWithDefaultValue.kt"); } + @TestMetadata("suspendCalls.kt") + public void testSuspendCalls() throws Exception { + runTest("idea/testData/refactoring/introduceLambdaParameter/suspendCalls.kt"); + } + @TestMetadata("idea/testData/refactoring/introduceLambdaParameter/multiline") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)