diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionLiteralSignatureFix.java b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionLiteralSignatureFix.java index 520e0a0ba39..1eebbeb6573 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionLiteralSignatureFix.java +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/ChangeFunctionLiteralSignatureFix.java @@ -69,7 +69,7 @@ public class ChangeFunctionLiteralSignatureFix extends ChangeFunctionSignatureFi @Override public Unit invoke(JetMutableMethodDescriptor descriptor) { JetNameValidator validator = new SimpleCollectingValidator(); - descriptor.clearParameters(); + descriptor.clearNonReceiverParameters(); for (JetType type : parameterTypes) { String name = JetNameSuggester.suggestNames(type, validator, "param")[0]; descriptor.addParameter(new JetParameterInfo(-1, name, type, null, "", null, null)); diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveFunctionParametersFix.java b/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveFunctionParametersFix.java index ca7b068e499..c168b720170 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveFunctionParametersFix.java +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/RemoveFunctionParametersFix.java @@ -28,13 +28,12 @@ import org.jetbrains.kotlin.idea.JetBundle; import org.jetbrains.kotlin.idea.caches.resolve.ResolvePackage; import org.jetbrains.kotlin.idea.refactoring.changeSignature.ChangeSignaturePackage; import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetChangeSignatureConfiguration; -import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetMutableMethodDescriptor; import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetMethodDescriptor; +import org.jetbrains.kotlin.idea.refactoring.changeSignature.JetMutableMethodDescriptor; import org.jetbrains.kotlin.psi.JetFile; import org.jetbrains.kotlin.resolve.BindingContext; import java.util.Collection; -import java.util.List; import static org.jetbrains.kotlin.idea.refactoring.changeSignature.ChangeSignaturePackage.runChangeSignature; @@ -68,8 +67,8 @@ public class RemoveFunctionParametersFix extends ChangeFunctionSignatureFix { new ExtensionFunction0() { @Override public Unit invoke(JetMutableMethodDescriptor descriptor) { - List parameters = functionDescriptor.getValueParameters(); - descriptor.removeParameter(parameters.indexOf(parameterToRemove)); + int index = functionDescriptor.getValueParameters().indexOf(parameterToRemove); + descriptor.removeParameter(descriptor.getReceiver() != null ? index + 1 : index); return null; } } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetMutableMethodDescriptor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetMutableMethodDescriptor.kt index 8ecd2c86ae1..d489c882943 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetMutableMethodDescriptor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/JetMutableMethodDescriptor.kt @@ -39,6 +39,12 @@ public class JetMutableMethodDescriptor(val original: JetMethodDescriptor): JetM public fun clearParameters() { parameters.clear() + receiver = null + } + + public fun clearNonReceiverParameters() { + parameters.clear() + receiver?.let { parameters.add(it) } } override fun getVisibility(): Visibility? { diff --git a/idea/testData/quickfix/changeSignature/afterFixExtensionLambdaSignature.kt b/idea/testData/quickfix/changeSignature/afterFixExtensionLambdaSignature.kt new file mode 100644 index 00000000000..9ac2b9ba304 --- /dev/null +++ b/idea/testData/quickfix/changeSignature/afterFixExtensionLambdaSignature.kt @@ -0,0 +1,9 @@ +// "Change the signature of function literal" "true" + +fun foo(f: Int.(Int, Int) -> Int) { + +} + +fun test() { + foo {(i: Int, i1: Int) -> 0 } +} \ No newline at end of file diff --git a/idea/testData/quickfix/changeSignature/afterRemoveUnusedExtensionParameter.kt b/idea/testData/quickfix/changeSignature/afterRemoveUnusedExtensionParameter.kt new file mode 100644 index 00000000000..444b7982ec6 --- /dev/null +++ b/idea/testData/quickfix/changeSignature/afterRemoveUnusedExtensionParameter.kt @@ -0,0 +1,9 @@ +// "Remove parameter 'x'" "true" + +fun Int.f() { + +} + +fun test() { + 1.f() +} \ No newline at end of file diff --git a/idea/testData/quickfix/changeSignature/beforeFixExtensionLambdaSignature.kt b/idea/testData/quickfix/changeSignature/beforeFixExtensionLambdaSignature.kt new file mode 100644 index 00000000000..320ac11b555 --- /dev/null +++ b/idea/testData/quickfix/changeSignature/beforeFixExtensionLambdaSignature.kt @@ -0,0 +1,9 @@ +// "Change the signature of function literal" "true" + +fun foo(f: Int.(Int, Int) -> Int) { + +} + +fun test() { + foo { (a: Int) -> 0 } +} \ No newline at end of file diff --git a/idea/testData/quickfix/changeSignature/beforeRemoveUnusedExtensionParameter.kt b/idea/testData/quickfix/changeSignature/beforeRemoveUnusedExtensionParameter.kt new file mode 100644 index 00000000000..38e2225facf --- /dev/null +++ b/idea/testData/quickfix/changeSignature/beforeRemoveUnusedExtensionParameter.kt @@ -0,0 +1,9 @@ +// "Remove parameter 'x'" "true" + +fun Int.f(x: Int) { + +} + +fun test() { + 1.f(2) +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index af84077dad4..0851566cc26 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -541,6 +541,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } + @TestMetadata("beforeFixExtensionLambdaSignature.kt") + public void testFixExtensionLambdaSignature() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/changeSignature/beforeFixExtensionLambdaSignature.kt"); + doTest(fileName); + } + @TestMetadata("beforeLinearHierarchy.kt") public void testLinearHierarchy() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/changeSignature/beforeLinearHierarchy.kt"); @@ -601,6 +607,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } + @TestMetadata("beforeRemoveUnusedExtensionParameter.kt") + public void testRemoveUnusedExtensionParameter() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/changeSignature/beforeRemoveUnusedExtensionParameter.kt"); + doTest(fileName); + } + @TestMetadata("beforeRemoveUnusedParameter.kt") public void testRemoveUnusedParameter() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/quickfix/changeSignature/beforeRemoveUnusedParameter.kt");