From 1c8d1c937bae5963ebad9ce69c5cbf2f04abe1e6 Mon Sep 17 00:00:00 2001 From: Andrey Vlasovskikh Date: Mon, 23 Apr 2012 19:39:08 +0400 Subject: [PATCH] Don't suggest defined unread and unmodified variables in extract method (PY-6391) --- .../codeInsight/codeFragment/PyCodeFragmentBuilder.java | 6 +++--- .../extractmethod/DefinedBeforeAccessedAfter.after.py | 9 +++++++++ .../extractmethod/DefinedBeforeAccessedAfter.before.py | 5 +++++ .../python/refactoring/PyExtractMethodTest.java | 5 +++++ 4 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 python/testData/refactoring/extractmethod/DefinedBeforeAccessedAfter.after.py create mode 100644 python/testData/refactoring/extractmethod/DefinedBeforeAccessedAfter.before.py 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"); + } }