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 com.intellij.refactoring.changeSignature.ParameterInfo;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
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.JetExpression;
|
||||||
import org.jetbrains.jet.lang.psi.JetFunction;
|
import org.jetbrains.jet.lang.psi.JetFunction;
|
||||||
import org.jetbrains.jet.lang.psi.JetParameter;
|
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.lang.types.JetType;
|
||||||
import org.jetbrains.jet.lexer.JetTokens;
|
import org.jetbrains.jet.lexer.JetTokens;
|
||||||
import org.jetbrains.jet.plugin.caches.resolve.ResolvePackage;
|
|
||||||
import org.jetbrains.jet.renderer.DescriptorRenderer;
|
import org.jetbrains.jet.renderer.DescriptorRenderer;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -76,30 +73,20 @@ public class JetParameterInfo implements ParameterInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String getInheritedName(boolean isInherited, @Nullable PsiElement inheritedFunction, @NotNull JetMethodDescriptor baseFunction) {
|
public String getInheritedName(boolean isInherited, @Nullable PsiElement inheritedFunction, @NotNull JetMethodDescriptor baseFunction) {
|
||||||
if (!(inheritedFunction instanceof JetFunction))
|
if (!(isInherited && inheritedFunction instanceof JetFunction)) return name;
|
||||||
return name;
|
|
||||||
|
FunctionDescriptor baseFunctionDescriptor = baseFunction.getDescriptor();
|
||||||
|
assert baseFunctionDescriptor != null : "No descriptor for " + baseFunction.getMethod().getText();
|
||||||
|
|
||||||
JetFunction inheritedJetFunction = (JetFunction) inheritedFunction;
|
JetFunction inheritedJetFunction = (JetFunction) inheritedFunction;
|
||||||
List<JetParameter> inheritedParameters = inheritedJetFunction.getValueParameters();
|
List<JetParameter> inheritedParameters = inheritedJetFunction.getValueParameters();
|
||||||
|
|
||||||
if (!isInherited || oldIndex < 0 || oldIndex >= baseFunction.getParametersCount() || oldIndex >= inheritedParameters.size())
|
if (oldIndex < 0 || oldIndex >= baseFunction.getParametersCount() || oldIndex >= inheritedParameters.size()) return name;
|
||||||
return name;
|
|
||||||
|
|
||||||
JetParameterInfo oldParam = baseFunction.getParameters().get(oldIndex);
|
String inheritedParamName = inheritedParameters.get(oldIndex).getName();
|
||||||
JetParameter inheritedParam = inheritedParameters.get(oldIndex);
|
String oldParamName = baseFunctionDescriptor.getValueParameters().get(oldIndex).getName().asString();
|
||||||
String inheritedParamName = inheritedParam.getName();
|
|
||||||
|
|
||||||
if (oldParam.getName().equals(inheritedParamName)) {
|
return oldParamName.equals(inheritedParamName) ? name : 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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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);
|
doTest(changeInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testParameterChangeInOverrides() throws Exception {
|
||||||
|
JetChangeInfo changeInfo = getChangeInfo();
|
||||||
|
JetParameterInfo parameterInfo = changeInfo.getNewParameters()[0];
|
||||||
|
parameterInfo.setName("n");
|
||||||
|
parameterInfo.setTypeText("Int");
|
||||||
|
doTest(changeInfo);
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
protected String getTestDataPath() {
|
protected String getTestDataPath() {
|
||||||
|
|||||||
Reference in New Issue
Block a user