diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveUnusedFunctionParameterFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveUnusedFunctionParameterFix.kt index c535f27420d..326ee29668c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveUnusedFunctionParameterFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveUnusedFunctionParameterFix.kt @@ -23,6 +23,8 @@ import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.psi.KtFunctionLiteral +import org.jetbrains.kotlin.psi.KtNamedFunction import org.jetbrains.kotlin.psi.KtParameter class RemoveUnusedFunctionParameterFix(parameter: KtParameter) : KotlinQuickFixAction(parameter) { @@ -38,8 +40,12 @@ class RemoveUnusedFunctionParameterFix(parameter: KtParameter) : KotlinQuickFixA } companion object : KotlinSingleIntentionActionFactory() { - override fun createAction(diagnostic: Diagnostic): KotlinQuickFixAction { - return RemoveUnusedFunctionParameterFix(Errors.UNUSED_PARAMETER.cast(diagnostic).psiElement) + override fun createAction(diagnostic: Diagnostic): KotlinQuickFixAction? { + val parameter = Errors.UNUSED_PARAMETER.cast(diagnostic).psiElement + val parameterOwner = parameter.parent.parent + if (parameterOwner is KtFunctionLiteral || + (parameterOwner is KtNamedFunction && parameterOwner.name == null)) return null + return RemoveUnusedFunctionParameterFix(parameter) } } } diff --git a/idea/testData/quickfix/renameToUnderscore/functionExpressionParameterNoRemoveParameter.kt b/idea/testData/quickfix/renameToUnderscore/functionExpressionParameterNoRemoveParameter.kt new file mode 100644 index 00000000000..1ede27f0275 --- /dev/null +++ b/idea/testData/quickfix/renameToUnderscore/functionExpressionParameterNoRemoveParameter.kt @@ -0,0 +1,13 @@ +// "Remove parameter 'x'" "false" +// ACTION: Add 'block =' to argument +// ACTION: Convert parameter to receiver +// ACTION: Rename to _ +// ACTION: Specify return type explicitly + +fun foo(block: (String, Int) -> Unit) { + block("", 1) +} + +fun bar() { + foo(fun(x: String, y: Int) = Unit) +} diff --git a/idea/testData/quickfix/renameToUnderscore/lambdaParameterNoRemoveParameter.kt b/idea/testData/quickfix/renameToUnderscore/lambdaParameterNoRemoveParameter.kt new file mode 100644 index 00000000000..d61be95a8b0 --- /dev/null +++ b/idea/testData/quickfix/renameToUnderscore/lambdaParameterNoRemoveParameter.kt @@ -0,0 +1,14 @@ +// "Remove parameter 'x'" "false" +// ACTION: Move lambda argument into parentheses +// ACTION: Remove explicit lambda parameter types (may break code) +// ACTION: Rename to _ + +fun foo(block: (String, Int) -> Unit) { + block("", 1) +} + +fun bar() { + foo { x: String, y: Int -> + y.hashCode() + } +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index 9902af6f332..2171755b4b1 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -7439,6 +7439,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } + @TestMetadata("functionExpressionParameterNoRemoveParameter.kt") + public void testFunctionExpressionParameterNoRemoveParameter() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/renameToUnderscore/functionExpressionParameterNoRemoveParameter.kt"); + doTest(fileName); + } + @TestMetadata("lambdaDestructuring.kt") public void testLambdaDestructuring() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/renameToUnderscore/lambdaDestructuring.kt"); @@ -7451,6 +7457,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } + @TestMetadata("lambdaParameterNoRemoveParameter.kt") + public void testLambdaParameterNoRemoveParameter() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/renameToUnderscore/lambdaParameterNoRemoveParameter.kt"); + doTest(fileName); + } + @TestMetadata("noActionForCommonVal.kt") public void testNoActionForCommonVal() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/renameToUnderscore/noActionForCommonVal.kt");