Change Signature: Rename parameter in overriding functions
#KT-4045 Fixed
This commit is contained in:
+9
-22
@@ -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<JetParameter> 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
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
trait Foo {
|
||||
fun bar(n: Int)
|
||||
}
|
||||
|
||||
class Baz: Foo {
|
||||
override fun bar(n: Int) {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
trait Foo {
|
||||
fun <caret>bar(s: String)
|
||||
}
|
||||
|
||||
class Baz: Foo {
|
||||
override fun bar(s: String) {
|
||||
|
||||
}
|
||||
}
|
||||
+8
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user