diff --git a/python/src/com/jetbrains/python/codeInsight/codeFragment/PyCodeFragmentBuilder.java b/python/src/com/jetbrains/python/codeInsight/codeFragment/PyCodeFragmentBuilder.java index d88ee891b864..442722dc9ba9 100644 --- a/python/src/com/jetbrains/python/codeInsight/codeFragment/PyCodeFragmentBuilder.java +++ b/python/src/com/jetbrains/python/codeInsight/codeFragment/PyCodeFragmentBuilder.java @@ -139,9 +139,6 @@ public class PyCodeFragmentBuilder extends PyRecursiveElementVisitor { } // If declaration is before we look for modifications inside if (pos == Position.BEFORE) { - if (!isTopLevel(element)) { - inElements.add(name); - } final List list = modifiedInsideMap.get(name); boolean modificationSeen = false; if (list != null) { @@ -154,6 +151,9 @@ public class PyCodeFragmentBuilder extends PyRecursiveElementVisitor { } } if (modificationSeen) { + if (!isTopLevel(element)) { + inElements.add(name); + } break; } } diff --git a/python/testData/refactoring/extractmethod/DefinedBeforeAccessedAfter.after.py b/python/testData/refactoring/extractmethod/DefinedBeforeAccessedAfter.after.py new file mode 100644 index 000000000000..ab8f3a43bd85 --- /dev/null +++ b/python/testData/refactoring/extractmethod/DefinedBeforeAccessedAfter.after.py @@ -0,0 +1,9 @@ +def bar(): + if 11 > 4: + print('ok') + + +def main(indices): + foo = True + bar() + return foo diff --git a/python/testData/refactoring/extractmethod/DefinedBeforeAccessedAfter.before.py b/python/testData/refactoring/extractmethod/DefinedBeforeAccessedAfter.before.py new file mode 100644 index 000000000000..22ab44262526 --- /dev/null +++ b/python/testData/refactoring/extractmethod/DefinedBeforeAccessedAfter.before.py @@ -0,0 +1,5 @@ +def main(indices): + foo = True + if 11 > 4: + print('ok') + return foo diff --git a/python/testSrc/com/jetbrains/python/refactoring/PyExtractMethodTest.java b/python/testSrc/com/jetbrains/python/refactoring/PyExtractMethodTest.java index b8f8a3031260..680868d7687b 100644 --- a/python/testSrc/com/jetbrains/python/refactoring/PyExtractMethodTest.java +++ b/python/testSrc/com/jetbrains/python/refactoring/PyExtractMethodTest.java @@ -162,4 +162,9 @@ public class PyExtractMethodTest extends LightMarkedTestCase { public void testLocalVarDefinedBeforeModifiedInside() { doTest("bar"); } + + // PY-6391 + public void testDefinedBeforeAccessedAfter() { + doTest("bar"); + } }