diff --git a/python/src/com/jetbrains/python/refactoring/introduce/constant/ConstantIntroduceHandler.java b/python/src/com/jetbrains/python/refactoring/introduce/constant/ConstantIntroduceHandler.java index e155cf025fa3..d3e981daa7d9 100644 --- a/python/src/com/jetbrains/python/refactoring/introduce/constant/ConstantIntroduceHandler.java +++ b/python/src/com/jetbrains/python/refactoring/introduce/constant/ConstantIntroduceHandler.java @@ -3,8 +3,7 @@ package com.jetbrains.python.refactoring.introduce.constant; import com.intellij.psi.PsiElement; import com.intellij.util.containers.HashSet; import com.jetbrains.python.PyBundle; -import com.jetbrains.python.psi.PyExpression; -import com.jetbrains.python.psi.PyFile; +import com.jetbrains.python.psi.*; import com.jetbrains.python.refactoring.introduce.IntroduceHandler; import org.jetbrains.annotations.NotNull; @@ -28,7 +27,15 @@ public class ConstantIntroduceHandler extends IntroduceHandler { PsiElement anchor; anchor = expression.getContainingFile(); assert anchor instanceof PyFile; - return anchor.addBefore(declaration, ((PyFile)anchor).getStatements().get(0)); + final List statements = ((PyFile)anchor).getStatements(); + int targetIndex = 0; + while(targetIndex < statements.size() && statements.get(targetIndex) instanceof PyImportStatementBase) { + targetIndex++; + } + if (targetIndex == statements.size()) { + return anchor.add(declaration); + } + return anchor.addBefore(declaration, statements.get(targetIndex)); } public Collection getSuggestedNames(@NotNull final PyExpression expression) { diff --git a/python/testData/refactoring/introduceConstant/insertAfterImport.after.py b/python/testData/refactoring/introduceConstant/insertAfterImport.after.py new file mode 100644 index 000000000000..ac5f934398b2 --- /dev/null +++ b/python/testData/refactoring/introduceConstant/insertAfterImport.after.py @@ -0,0 +1,7 @@ +import urllib +import urllib2 + +a = 42 + +def foo(): + return a \ No newline at end of file diff --git a/python/testData/refactoring/introduceConstant/insertAfterImport.py b/python/testData/refactoring/introduceConstant/insertAfterImport.py new file mode 100644 index 000000000000..bb10e38a5f0c --- /dev/null +++ b/python/testData/refactoring/introduceConstant/insertAfterImport.py @@ -0,0 +1,5 @@ +import urllib +import urllib2 + +def foo(): + return 42 \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceConstantTest.java b/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceConstantTest.java index e147408c757e..5fdac50e796e 100644 --- a/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceConstantTest.java +++ b/python/testSrc/com/jetbrains/python/refactoring/PyIntroduceConstantTest.java @@ -22,6 +22,10 @@ public class PyIntroduceConstantTest extends PyLightFixtureTestCase { } } + public void testInsertAfterImport() { // PY-2149 + doTest(); + } + private void doTest() { myFixture.configureByFile("/refactoring/introduceConstant/" + getTestName(true) + ".py"); ConstantIntroduceHandler handler = new ConstantIntroduceHandler();