diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/changeSignature/JetParameterInfo.java b/idea/src/org/jetbrains/jet/plugin/refactoring/changeSignature/JetParameterInfo.java index 7a4b426a49b..31b0a170a1a 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/changeSignature/JetParameterInfo.java +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/changeSignature/JetParameterInfo.java @@ -21,15 +21,12 @@ import com.intellij.psi.PsiElement; import com.intellij.refactoring.changeSignature.ParameterInfo; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; import org.jetbrains.jet.lang.psi.JetExpression; import org.jetbrains.jet.lang.psi.JetFunction; import org.jetbrains.jet.lang.psi.JetParameter; -import org.jetbrains.jet.lang.resolve.BindingContext; -import org.jetbrains.jet.lang.resolve.name.Name; -import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lexer.JetTokens; -import org.jetbrains.jet.plugin.caches.resolve.ResolvePackage; import org.jetbrains.jet.renderer.DescriptorRenderer; import java.util.List; @@ -76,30 +73,20 @@ public class JetParameterInfo implements ParameterInfo { } public String getInheritedName(boolean isInherited, @Nullable PsiElement inheritedFunction, @NotNull JetMethodDescriptor baseFunction) { - if (!(inheritedFunction instanceof JetFunction)) - return name; + if (!(isInherited && inheritedFunction instanceof JetFunction)) return name; + + FunctionDescriptor baseFunctionDescriptor = baseFunction.getDescriptor(); + assert baseFunctionDescriptor != null : "No descriptor for " + baseFunction.getMethod().getText(); JetFunction inheritedJetFunction = (JetFunction) inheritedFunction; List inheritedParameters = inheritedJetFunction.getValueParameters(); - if (!isInherited || oldIndex < 0 || oldIndex >= baseFunction.getParametersCount() || oldIndex >= inheritedParameters.size()) - return name; + if (oldIndex < 0 || oldIndex >= baseFunction.getParametersCount() || oldIndex >= inheritedParameters.size()) return name; - JetParameterInfo oldParam = baseFunction.getParameters().get(oldIndex); - JetParameter inheritedParam = inheritedParameters.get(oldIndex); - String inheritedParamName = inheritedParam.getName(); + String inheritedParamName = inheritedParameters.get(oldIndex).getName(); + String oldParamName = baseFunctionDescriptor.getValueParameters().get(oldIndex).getName().asString(); - if (oldParam.getName().equals(inheritedParamName)) { - BindingContext bindingContext = ResolvePackage.analyze(inheritedJetFunction); - JetScope parametersScope = JetChangeSignatureUsageProcessor.getFunctionBodyScope(inheritedJetFunction, bindingContext); - - if (parametersScope != null && parametersScope.getLocalVariable(Name.identifier(name)) == null) - return name; - else - return inheritedParamName; - } - else - return inheritedParamName; + return oldParamName.equals(inheritedParamName) ? name : inheritedParamName; } @Override diff --git a/idea/testData/refactoring/changeSignature/ParameterChangeInOverridesAfter.kt b/idea/testData/refactoring/changeSignature/ParameterChangeInOverridesAfter.kt new file mode 100644 index 00000000000..2c0d1b085a2 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/ParameterChangeInOverridesAfter.kt @@ -0,0 +1,9 @@ +trait Foo { + fun bar(n: Int) +} + +class Baz: Foo { + override fun bar(n: Int) { + + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/changeSignature/ParameterChangeInOverridesBefore.kt b/idea/testData/refactoring/changeSignature/ParameterChangeInOverridesBefore.kt new file mode 100644 index 00000000000..385b8d80d17 --- /dev/null +++ b/idea/testData/refactoring/changeSignature/ParameterChangeInOverridesBefore.kt @@ -0,0 +1,9 @@ +trait Foo { + fun bar(s: String) +} + +class Baz: Foo { + override fun bar(s: String) { + + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/refactoring/changeSignature/JetChangeSignatureTest.java b/idea/tests/org/jetbrains/jet/plugin/refactoring/changeSignature/JetChangeSignatureTest.java index 3fce6c1ec66..28014799cfc 100644 --- a/idea/tests/org/jetbrains/jet/plugin/refactoring/changeSignature/JetChangeSignatureTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/refactoring/changeSignature/JetChangeSignatureTest.java @@ -295,6 +295,14 @@ public class JetChangeSignatureTest extends KotlinCodeInsightTestCase { doTest(changeInfo); } + public void testParameterChangeInOverrides() throws Exception { + JetChangeInfo changeInfo = getChangeInfo(); + JetParameterInfo parameterInfo = changeInfo.getNewParameters()[0]; + parameterInfo.setName("n"); + parameterInfo.setTypeText("Int"); + doTest(changeInfo); + } + @NotNull @Override protected String getTestDataPath() {