Skip to content

Commit c80c866

Browse files
committed
Change Signature: Rename parameter in overriding functions
#KT-4045 Fixed
1 parent ddccc0e commit c80c866

File tree

4 files changed

+35
-22
lines changed

4 files changed

+35
-22
lines changed

idea/src/org/jetbrains/jet/plugin/refactoring/changeSignature/JetParameterInfo.java

Lines changed: 9 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,12 @@
2121
import com.intellij.refactoring.changeSignature.ParameterInfo;
2222
import org.jetbrains.annotations.NotNull;
2323
import org.jetbrains.annotations.Nullable;
24+
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
2425
import org.jetbrains.jet.lang.psi.JetExpression;
2526
import org.jetbrains.jet.lang.psi.JetFunction;
2627
import org.jetbrains.jet.lang.psi.JetParameter;
27-
import org.jetbrains.jet.lang.resolve.BindingContext;
28-
import org.jetbrains.jet.lang.resolve.name.Name;
29-
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
3028
import org.jetbrains.jet.lang.types.JetType;
3129
import org.jetbrains.jet.lexer.JetTokens;
32-
import org.jetbrains.jet.plugin.caches.resolve.ResolvePackage;
3330
import org.jetbrains.jet.renderer.DescriptorRenderer;
3431

3532
import java.util.List;
@@ -76,30 +73,20 @@ public String getName() {
7673
}
7774

7875
public String getInheritedName(boolean isInherited, @Nullable PsiElement inheritedFunction, @NotNull JetMethodDescriptor baseFunction) {
79-
if (!(inheritedFunction instanceof JetFunction))
80-
return name;
76+
if (!(isInherited && inheritedFunction instanceof JetFunction)) return name;
77+
78+
FunctionDescriptor baseFunctionDescriptor = baseFunction.getDescriptor();
79+
assert baseFunctionDescriptor != null : "No descriptor for " + baseFunction.getMethod().getText();
8180

8281
JetFunction inheritedJetFunction = (JetFunction) inheritedFunction;
8382
List<JetParameter> inheritedParameters = inheritedJetFunction.getValueParameters();
8483

85-
if (!isInherited || oldIndex < 0 || oldIndex >= baseFunction.getParametersCount() || oldIndex >= inheritedParameters.size())
86-
return name;
87-
88-
JetParameterInfo oldParam = baseFunction.getParameters().get(oldIndex);
89-
JetParameter inheritedParam = inheritedParameters.get(oldIndex);
90-
String inheritedParamName = inheritedParam.getName();
84+
if (oldIndex < 0 || oldIndex >= baseFunction.getParametersCount() || oldIndex >= inheritedParameters.size()) return name;
9185

92-
if (oldParam.getName().equals(inheritedParamName)) {
93-
BindingContext bindingContext = ResolvePackage.analyze(inheritedJetFunction);
94-
JetScope parametersScope = JetChangeSignatureUsageProcessor.getFunctionBodyScope(inheritedJetFunction, bindingContext);
86+
String inheritedParamName = inheritedParameters.get(oldIndex).getName();
87+
String oldParamName = baseFunctionDescriptor.getValueParameters().get(oldIndex).getName().asString();
9588

96-
if (parametersScope != null && parametersScope.getLocalVariable(Name.identifier(name)) == null)
97-
return name;
98-
else
99-
return inheritedParamName;
100-
}
101-
else
102-
return inheritedParamName;
89+
return oldParamName.equals(inheritedParamName) ? name : inheritedParamName;
10390
}
10491

10592
@Override
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
trait Foo {
2+
fun bar(n: Int)
3+
}
4+
5+
class Baz: Foo {
6+
override fun bar(n: Int) {
7+
8+
}
9+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
trait Foo {
2+
fun <caret>bar(s: String)
3+
}
4+
5+
class Baz: Foo {
6+
override fun bar(s: String) {
7+
8+
}
9+
}

idea/tests/org/jetbrains/jet/plugin/refactoring/changeSignature/JetChangeSignatureTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,14 @@ public void testEnumEntriesWithoutSuperCalls() throws Exception {
295295
doTest(changeInfo);
296296
}
297297

298+
public void testParameterChangeInOverrides() throws Exception {
299+
JetChangeInfo changeInfo = getChangeInfo();
300+
JetParameterInfo parameterInfo = changeInfo.getNewParameters()[0];
301+
parameterInfo.setName("n");
302+
parameterInfo.setTypeText("Int");
303+
doTest(changeInfo);
304+
}
305+
298306
@NotNull
299307
@Override
300308
protected String getTestDataPath() {

0 commit comments

Comments
 (0)