diff --git a/python/src/com/jetbrains/python/refactoring/changeSignature/PyChangeInfo.java b/python/src/com/jetbrains/python/refactoring/changeSignature/PyChangeInfo.java index f0ee2630255a..f1d534827521 100644 --- a/python/src/com/jetbrains/python/refactoring/changeSignature/PyChangeInfo.java +++ b/python/src/com/jetbrains/python/refactoring/changeSignature/PyChangeInfo.java @@ -37,6 +37,7 @@ public class PyChangeInfo implements ChangeInfo { if (oldParameters.length != newParameterInfo.length) { myIsParameterSetOrOrderChanged = true; + myIsParametersNameChanged = true; } else { myIsParameterSetOrOrderChanged = false; diff --git a/python/src/com/jetbrains/python/refactoring/changeSignature/PyChangeSignatureUsageProcessor.java b/python/src/com/jetbrains/python/refactoring/changeSignature/PyChangeSignatureUsageProcessor.java index 45f259b7a35f..2ac49cbe9421 100644 --- a/python/src/com/jetbrains/python/refactoring/changeSignature/PyChangeSignatureUsageProcessor.java +++ b/python/src/com/jetbrains/python/refactoring/changeSignature/PyChangeSignatureUsageProcessor.java @@ -285,9 +285,11 @@ public class PyChangeSignatureUsageProcessor implements ChangeSignatureUsageProc for (int i = 0; i != parameters.length; ++i) { PyParameterInfo paramInfo = parameters[i]; final PyParameter[] oldParameters = function.getParameterList().getParameters(); - final UsageInfo[] usages = RenameUtil.findUsages(oldParameters[paramInfo.getOldIndex()], paramInfo.getName(), true, false, null); - for (UsageInfo info : usages) { - RenameUtil.rename(info, paramInfo.getName()); + if (paramInfo.getOldIndex() >= 0) { + final UsageInfo[] usages = RenameUtil.findUsages(oldParameters[paramInfo.getOldIndex()], paramInfo.getName(), true, false, null); + for (UsageInfo info : usages) { + RenameUtil.rename(info, paramInfo.getName()); + } } } } diff --git a/python/testData/refactoring/changeSignature/moveRenameParam.after.py b/python/testData/refactoring/changeSignature/moveRenameParam.after.py new file mode 100644 index 000000000000..eb4e9824d9c9 --- /dev/null +++ b/python/testData/refactoring/changeSignature/moveRenameParam.after.py @@ -0,0 +1,2 @@ +def foo(b, a2=2): + a2 += 1 diff --git a/python/testData/refactoring/changeSignature/moveRenameParam.before.py b/python/testData/refactoring/changeSignature/moveRenameParam.before.py new file mode 100644 index 000000000000..906da3e3c8d2 --- /dev/null +++ b/python/testData/refactoring/changeSignature/moveRenameParam.before.py @@ -0,0 +1,2 @@ +def bar(a=2): + a += 1 diff --git a/python/testSrc/com/jetbrains/python/refactoring/changeSignature/PyChangeSignatureTest.java b/python/testSrc/com/jetbrains/python/refactoring/changeSignature/PyChangeSignatureTest.java index 10b9288a8a27..2126d0762100 100644 --- a/python/testSrc/com/jetbrains/python/refactoring/changeSignature/PyChangeSignatureTest.java +++ b/python/testSrc/com/jetbrains/python/refactoring/changeSignature/PyChangeSignatureTest.java @@ -122,6 +122,11 @@ public class PyChangeSignatureTest extends PyTestCase { new PyParameterInfo(3, "**extra_info", null, false))); } + public void testMoveRenameParam() { + doChangeSignatureTest("foo", Arrays.asList(new PyParameterInfo(-1, "b", "1", false), + new PyParameterInfo(0, "a2", "2", true))); + } + public void testKeywordOnlyMove() { doChangeSignatureTest("f", Arrays.asList(new PyParameterInfo(2, "param2", null, false), new PyParameterInfo(0, "*", null, false),