another case of meaningless introduce (PY-4456)

This commit is contained in:
Dmitry Jemerov
2011-09-05 20:40:57 +02:00
parent 7f7b9d8a9f
commit 72b1cef3e1
3 changed files with 14 additions and 7 deletions
@@ -75,10 +75,10 @@ public class PyRefactoringUtil {
// Check if selection breaks AST node in binary expression
if (parent instanceof PyBinaryExpression) {
final String selection = file.getText().substring(element1.getTextOffset(), element2.getTextOffset() + element2.getTextLength());
final PyExpression expression =
PyElementGenerator.getInstance(project).createFromText(LanguageLevel.getDefault(), PyAssignmentStatement.class, "z=" + selection)
.getAssignedValue();
if (PsiUtilBase.hasErrorElementChild(expression)) {
final PyElementGenerator generator = PyElementGenerator.getInstance(project);
final LanguageLevel langLevel = LanguageLevel.forElement(element1);
final PyExpression expression = generator.createFromText(langLevel, PyAssignmentStatement.class, "z=" + selection).getAssignedValue();
if (PsiUtilBase.hasErrorElementChild(expression) || !(expression instanceof PyBinaryExpression)) {
return null;
}
final String parentText = parent.getText();
@@ -91,13 +91,11 @@ public class PyRefactoringUtil {
final String prefix = parentText.substring(0, startOffset);
final String suffix = parentText.substring(endOffset, parentText.length());
final TextRange textRange = TextRange.from(startOffset, endOffset - startOffset);
final PsiElement fakeExpression =
PyElementGenerator.getInstance(project).createFromText(LanguageLevel.getDefault(), parent.getClass(), prefix + "python" + suffix);
final PsiElement fakeExpression = generator.createFromText(langLevel, parent.getClass(), prefix + "python" + suffix);
if (PsiUtilBase.hasErrorElementChild(fakeExpression)) {
return null;
}
assert expression != null;
expression.putUserData(PyPsiUtils.SELECTION_BREAKS_AST_NODE, Pair.create(parent, textRange));
return expression;
}
@@ -0,0 +1 @@
a = b <selection>+ func()</selection>
@@ -45,6 +45,14 @@ public class PyIntroduceVariableTest extends PyIntroduceTestCase {
}
public void testIncorrectSelection() { // PY-4455
doTestCannotPerform();
}
public void testOneSidedSelection() { // PY-4456
doTestCannotPerform();
}
private void doTestCannotPerform() {
boolean thrownExpectedException = false;
try {
doTest();