fixed PY-8096 Change Signature: produces invalid code on adding new parameters for function calls with keyword arguments

This commit is contained in:
Ekaterina Tuzova
2012-11-28 14:07:15 +04:00
parent d789caade2
commit 94ec43969a
3 changed files with 9 additions and 2 deletions
@@ -160,11 +160,11 @@ public class PyChangeSignatureDialog extends ChangeSignatureDialogBase<PyParamet
return PyBundle.message("ANN.regular.param.after.keyword");
}
final String defaultValue = parameter.getDefaultValue();
if (defaultValue != null && !StringUtil.isEmptyOrSpaces(defaultValue)) {
if (defaultValue != null && !StringUtil.isEmptyOrSpaces(defaultValue) && parameter.getDefaultInSignature()) {
hadDefaultValue = true;
}
else {
if (hadDefaultValue && parameter.getDefaultInSignature() && !hadSingleStar && (!languageLevel.isPy3K() || !hadPositionalContainer)) {
if (hadDefaultValue && !hadSingleStar && (!languageLevel.isPy3K() || !hadPositionalContainer)) {
return PyBundle.message("ANN.non.default.param.after.default");
}
}
@@ -0,0 +1,2 @@
def foo(b=1):
pass
@@ -96,6 +96,11 @@ public class PyChangeSignatureTest extends PyTestCase {
doValidationTest(null, Arrays.asList(new PyParameterInfo(-1, "a", "2", false), new PyParameterInfo(1, "b", "2", false)), null);
}
public void testNonDefaultAfterDefault1() {
doValidationTest(null, Arrays.asList(new PyParameterInfo(1, "b", "1", true), new PyParameterInfo(-1, "a", "2", false)),
PyBundle.message("ANN.non.default.param.after.default"));
}
public void doChangeSignatureTest(@Nullable String newName, @Nullable List<PyParameterInfo> parameters) {
myFixture.configureByFile("refactoring/changeSignature/" + getTestName(true) + ".before.py");
changeSignature(newName, parameters);