diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/SpecifyExplicitLambdaSignatureIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/SpecifyExplicitLambdaSignatureIntention.kt index a1381579cdb..40bd2fd5a02 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/SpecifyExplicitLambdaSignatureIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/SpecifyExplicitLambdaSignatureIntention.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.idea.intentions import com.intellij.codeInsight.intention.LowPriorityAction import com.intellij.openapi.editor.Editor import com.intellij.psi.PsiWhiteSpace +import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.core.ShortenReferences import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers @@ -44,13 +45,21 @@ class SpecifyExplicitLambdaSignatureIntention : SelfTargetingIntention + parameterDescriptor.render(psiName = functionLiteral.valueParameters.getOrNull(index)?.let { + it.name ?: it.destructuringDeclaration?.text + } ) + } + .joinToString() applyWithParameters(element, parameterString) } diff --git a/idea/testData/intentions/specifyExplicitLambdaSignature/anonymous.kt b/idea/testData/intentions/specifyExplicitLambdaSignature/anonymous.kt new file mode 100644 index 00000000000..ffeb5dfcd48 --- /dev/null +++ b/idea/testData/intentions/specifyExplicitLambdaSignature/anonymous.kt @@ -0,0 +1,7 @@ +class Declaration { + fun lambdaType(p: Int, f: (Int) -> Int) = f(p) +} + +fun call(declaration: Declaration) { + declaration.lambdaType(10) { _ -> 11 } +} \ No newline at end of file diff --git a/idea/testData/intentions/specifyExplicitLambdaSignature/anonymous.kt.after b/idea/testData/intentions/specifyExplicitLambdaSignature/anonymous.kt.after new file mode 100644 index 00000000000..a1b688ba05f --- /dev/null +++ b/idea/testData/intentions/specifyExplicitLambdaSignature/anonymous.kt.after @@ -0,0 +1,7 @@ +class Declaration { + fun lambdaType(p: Int, f: (Int) -> Int) = f(p) +} + +fun call(declaration: Declaration) { + declaration.lambdaType(10) { _: Int -> 11 } +} \ No newline at end of file diff --git a/idea/testData/intentions/specifyExplicitLambdaSignature/destructuring.kt b/idea/testData/intentions/specifyExplicitLambdaSignature/destructuring.kt new file mode 100644 index 00000000000..d2de3833583 --- /dev/null +++ b/idea/testData/intentions/specifyExplicitLambdaSignature/destructuring.kt @@ -0,0 +1,7 @@ +data class Declaration(val x: Int, val y: Int) { + fun lambdaType(p: Declaration, f: (Declaration) -> Int) = f(p) +} + +fun call(declaration: Declaration) { + declaration.lambdaType(declaration) { (x, y) -> 11 } +} \ No newline at end of file diff --git a/idea/testData/intentions/specifyExplicitLambdaSignature/destructuring.kt.after b/idea/testData/intentions/specifyExplicitLambdaSignature/destructuring.kt.after new file mode 100644 index 00000000000..5ab255f5f81 --- /dev/null +++ b/idea/testData/intentions/specifyExplicitLambdaSignature/destructuring.kt.after @@ -0,0 +1,7 @@ +data class Declaration(val x: Int, val y: Int) { + fun lambdaType(p: Declaration, f: (Declaration) -> Int) = f(p) +} + +fun call(declaration: Declaration) { + declaration.lambdaType(declaration) { (x, y): Declaration -> 11 } +} \ 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 6d9b7fe59bd..32aec2a7ad4 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -14407,6 +14407,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/intentions/specifyExplicitLambdaSignature"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), TargetBackend.ANY, true); } + @TestMetadata("anonymous.kt") + public void testAnonymous() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/specifyExplicitLambdaSignature/anonymous.kt"); + doTest(fileName); + } + @TestMetadata("coercionToUnit.kt") public void testCoercionToUnit() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/specifyExplicitLambdaSignature/coercionToUnit.kt"); @@ -14419,6 +14425,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest { doTest(fileName); } + @TestMetadata("destructuring.kt") + public void testDestructuring() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/specifyExplicitLambdaSignature/destructuring.kt"); + doTest(fileName); + } + @TestMetadata("emptyParamListWithBrackets.kt") public void testEmptyParamListWithBrackets() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/specifyExplicitLambdaSignature/emptyParamListWithBrackets.kt");