Change Signature/Rename: Fix renaming of extension function parameter

This commit is contained in:
Alexey Sedunov
2015-06-10 15:46:59 +03:00
parent a0aba04338
commit d2c33c13a6
11 changed files with 76 additions and 2 deletions
@@ -204,7 +204,7 @@ public class JetFunctionDefinitionUsage<T extends PsiElement> extends JetUsageIn
processParameterListWithStructuralChanges(changeInfo, element, parameterList, psiFactory);
}
else if (parameterList != null) {
int paramIndex = 0;
int paramIndex = originalFunctionDescriptor.getExtensionReceiverParameter() != null ? 1 : 0;
for (JetParameter parameter : parameterList.getParameters()) {
JetParameterInfo parameterInfo = changeInfo.getNewParameters()[paramIndex];
@@ -51,7 +51,8 @@ public class RenameKotlinParameterProcessor : RenameKotlinPsiProcessor() {
val changeSignatureConfiguration = object : JetChangeSignatureConfiguration {
override fun configure(originalDescriptor: JetMethodDescriptor, bindingContext: BindingContext): JetMethodDescriptor {
return originalDescriptor.modify { it.renameParameter(paramIndex, newName) }
val paramInfoIndex = if (functionDescriptor.getExtensionReceiverParameter() != null) paramIndex + 1 else paramIndex
return originalDescriptor.modify { it.renameParameter(paramInfoIndex, newName) }
}
override fun performSilently(affectedFunctions: Collection<PsiElement>) = true
@@ -0,0 +1,3 @@
fun Int.foo(b: Int): Int {
return this + b
}
@@ -0,0 +1,3 @@
fun Int.<caret>foo(a: Int): Int {
return this + a
}
@@ -0,0 +1,4 @@
class JavaSub extends testing.Middle {
void foo(int receiver, int aa, String b) {
}
}
@@ -0,0 +1,21 @@
package testing
trait Trait {
open fun Int.foo(aa: Int, b: String) {
}
}
open class Super {
open fun Int.foo(aa: Int, b: String) {
}
}
open class Middle : Super(), Trait {
override fun Int.foo(/*rename*/aa: Int, b: String) {
}
}
class Sub : Middle() {
override fun Int.foo(aa: Int, b: String) {
}
}
@@ -0,0 +1,4 @@
class JavaSub extends testing.Middle {
void foo(int receiver, int a, String b) {
}
}
@@ -0,0 +1,21 @@
package testing
trait Trait {
open fun Int.foo(a: Int, b: String) {
}
}
open class Super {
open fun Int.foo(a: Int, b: String) {
}
}
open class Middle : Super(), Trait {
override fun Int.foo(/*rename*/a: Int, b: String) {
}
}
class Sub : Middle() {
override fun Int.foo(a: Int, b: String) {
}
}
@@ -0,0 +1,5 @@
{
"type": "MARKED_ELEMENT",
"newName": "aa",
"mainFile": "main.kt"
}
@@ -918,6 +918,12 @@ public class JetChangeSignatureTest extends KotlinCodeInsightTestCase {
doTest(changeInfo);
}
public void testRenameExtensionParameter() throws Exception {
JetChangeInfo changeInfo = getChangeInfo();
changeInfo.getNewParameters()[1].setName("b");
doTest(changeInfo);
}
@NotNull
@Override
protected String getTestDataPath() {
@@ -83,6 +83,12 @@ public class RenameTestGenerated extends AbstractRenameTest {
doTest(fileName);
}
@TestMetadata("automaticRenamerParameterInExtension/parameter.test")
public void testAutomaticRenamerParameterInExtension_Parameter() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/rename/automaticRenamerParameterInExtension/parameter.test");
doTest(fileName);
}
@TestMetadata("defaultObject/defaultObject.test")
public void testDefaultObject_DefaultObject() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/rename/defaultObject/defaultObject.test");