fixed PY-12717 Improper replacement of the print x, y statement for Py3+

This commit is contained in:
Ekaterina Tuzova
2014-04-28 17:04:39 +04:00
parent 33aeb0b2af
commit 7a8f56ca41
2 changed files with 10 additions and 7 deletions
@@ -23,9 +23,7 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.Function;
import com.jetbrains.python.PyBundle;
import com.jetbrains.python.psi.LanguageLevel;
import com.jetbrains.python.psi.PyElementGenerator;
import com.jetbrains.python.psi.PyExpression;
import com.jetbrains.python.psi.*;
import org.jetbrains.annotations.NotNull;
/**
@@ -51,9 +49,9 @@ public class CompatibilityPrintCallQuickFix implements LocalQuickFix {
}
private static void replacePrint(PsiElement expression, PyElementGenerator elementGenerator) {
StringBuilder stringBuilder = new StringBuilder("print(");
PyExpression[] target = PsiTreeUtil.getChildrenOfType(expression, PyExpression.class);
final StringBuilder stringBuilder = new StringBuilder("print(");
final PyFile file = (PyFile)expression.getContainingFile();
final PyExpression[] target = PsiTreeUtil.getChildrenOfType(expression, PyExpression.class);
if (target != null) {
stringBuilder.append(StringUtil.join(target, new Function<PyExpression, String>() {
@Override
@@ -62,9 +60,12 @@ public class CompatibilityPrintCallQuickFix implements LocalQuickFix {
}
}, ", "));
}
stringBuilder.append(")");
expression.replace(elementGenerator.createFromText(LanguageLevel.forElement(expression), PyExpression.class,
stringBuilder.toString()));
final PyFromImportStatement statement = elementGenerator.createFromText(LanguageLevel.forElement(expression), PyFromImportStatement.class,
"from __future__ import print_function");
file.addBefore(statement, file.getStatements().get(0));
}
}
@@ -1 +1,3 @@
from __future__ import print_function
print("foo")