fixed PY-12195 Changing signature of decorator removes '@'

This commit is contained in:
Ekaterina Tuzova
2014-05-14 17:19:54 +04:00
parent 19c251b332
commit fc77edbe30
4 changed files with 31 additions and 3 deletions
@@ -110,8 +110,12 @@ public class PyChangeSignatureUsageProcessor implements ChangeSignatureUsageProc
final PyElementGenerator elementGenerator = PyElementGenerator.getInstance(element.getProject());
StringBuilder builder = buildSignature((PyChangeInfo)changeInfo, call);
final PyExpression newCall =
elementGenerator.createExpressionFromText(LanguageLevel.forElement(element), builder.toString());
final PyExpression newCall;
if (call instanceof PyDecorator) {
newCall = elementGenerator.createDecoratorList("@" + builder.toString()).getDecorators()[0];
}
else
newCall = elementGenerator.createExpressionFromText(LanguageLevel.forElement(element), builder.toString());
call.replace(newCall);
return true;
@@ -0,0 +1,10 @@
def decorator(arg1):
print('Wrapped with', arg1, arg2)
def wraps(f):
return f
return wraps
@decorator('arg1')
def do_things():
print('Things done')
@@ -0,0 +1,10 @@
def dec<caret>orator(arg1, arg2):
print('Wrapped with', arg1, arg2)
def wraps(f):
return f
return wraps
@decorator('arg1', 'arg2')
def do_things():
print('Things done')
@@ -31,7 +31,7 @@ import java.util.List;
/**
* User : ktisha
*/
@TestDataPath("$CONTENT_ROOT/../testData/refactoring/changeSignature/")
@TestDataPath("$CONTENT_ROOT/../testData/")
public class PyChangeSignatureTest extends PyTestCase {
public void testChooseSuperMethod() {
@@ -176,6 +176,10 @@ public class PyChangeSignatureTest extends PyTestCase {
PyBundle.message("refactoring.change.signature.dialog.validation.parameter.name"));
}
public void testDecorator() {
doChangeSignatureTest("decorator", Arrays.asList(new PyParameterInfo(0, "arg1", null, false)));
}
public void testNonDefaultAfterDefault() {
doValidationTest(null, Arrays.asList(new PyParameterInfo(-1, "a", "2", false), new PyParameterInfo(1, "b", "2", false)), null);
}