From 7f7b9d8a9f0194c609a902167d90b7bf9f3639c7 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Mon, 5 Sep 2011 16:47:09 +0200 Subject: [PATCH] SIOOBE (PY-4455) --- .../python/refactoring/PyRefactoringUtil.java | 3 +++ .../introduceVariable/incorrectSelection.py | 1 + .../refactoring/PyIntroduceVariableTest.java | 14 ++++++++++++++ 3 files changed, 18 insertions(+) create mode 100644 python/testData/refactoring/introduceVariable/incorrectSelection.py diff --git a/python/src/com/jetbrains/python/refactoring/PyRefactoringUtil.java b/python/src/com/jetbrains/python/refactoring/PyRefactoringUtil.java index 222d4975399c..d392eb8adb91 100644 --- a/python/src/com/jetbrains/python/refactoring/PyRefactoringUtil.java +++ b/python/src/com/jetbrains/python/refactoring/PyRefactoringUtil.java @@ -83,6 +83,9 @@ public class PyRefactoringUtil { } final String parentText = parent.getText(); final int startOffset = element1.getTextOffset() - parent.getTextOffset() - 1; + if (startOffset < 0) { + return null; + } final int endOffset = element2.getTextOffset() + element2.getTextLength() - parent.getTextOffset(); final String prefix = parentText.substring(0, startOffset); diff --git a/python/testData/refactoring/introduceVariable/incorrectSelection.py b/python/testData/refactoring/introduceVariable/incorrectSelection.py new file mode 100644 index 000000000000..2d00015f734b --- /dev/null +++ b/python/testData/refactoring/introduceVariable/incorrectSelection.py @@ -0,0 +1 @@ +a = b + func() diff --git a/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceVariableTest.java b/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceVariableTest.java index c97c7b6682aa..c866b98a6cfb 100644 --- a/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceVariableTest.java +++ b/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceVariableTest.java @@ -1,5 +1,6 @@ package com.jetbrains.python.refactoring; +import com.intellij.refactoring.util.CommonRefactoringUtil; import com.intellij.testFramework.TestDataPath; import com.jetbrains.python.psi.PyCallExpression; import com.jetbrains.python.psi.PyExpression; @@ -42,6 +43,19 @@ public class PyIntroduceVariableTest extends PyIntroduceTestCase { public void testSuggestStringConstantValue() { // PY-1276 doTestSuggestions(PyExpression.class, "foo_bar"); } + + public void testIncorrectSelection() { // PY-4455 + boolean thrownExpectedException = false; + try { + doTest(); + } + catch (CommonRefactoringUtil.RefactoringErrorHintException e) { + if (e.getMessage().equals("Cannot perform refactoring using selected element(s)")) { + thrownExpectedException = true; + } + } + assertTrue(thrownExpectedException); + } @Override protected String getTestDataPath() {