Quick-Fixes: Fix signature configuration for extension functions

#KT-7019 Fixed
This commit is contained in:
Alexey Sedunov
2015-03-23 11:40:16 +03:00
parent 93f00db871
commit 0eda6c88b9
8 changed files with 58 additions and 5 deletions
@@ -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));
@@ -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<JetMutableMethodDescriptor, Unit>() {
@Override
public Unit invoke(JetMutableMethodDescriptor descriptor) {
List<ValueParameterDescriptor> parameters = functionDescriptor.getValueParameters();
descriptor.removeParameter(parameters.indexOf(parameterToRemove));
int index = functionDescriptor.getValueParameters().indexOf(parameterToRemove);
descriptor.removeParameter(descriptor.getReceiver() != null ? index + 1 : index);
return null;
}
}
@@ -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? {
@@ -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 }
}
@@ -0,0 +1,9 @@
// "Remove parameter 'x'" "true"
fun Int.f() {
}
fun test() {
1.f()
}
@@ -0,0 +1,9 @@
// "Change the signature of function literal" "true"
fun foo(f: Int.(Int, Int) -> Int) {
}
fun test() {
foo { <caret>(a: Int) -> 0 }
}
@@ -0,0 +1,9 @@
// "Remove parameter 'x'" "true"
fun Int.f(<caret>x: Int) {
}
fun test() {
1.f(2)
}
@@ -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");