diff --git a/python/src/com/jetbrains/python/refactoring/extractmethod/PyExtractMethodUtil.java b/python/src/com/jetbrains/python/refactoring/extractmethod/PyExtractMethodUtil.java index a24aeaf6a779..d61686268e12 100644 --- a/python/src/com/jetbrains/python/refactoring/extractmethod/PyExtractMethodUtil.java +++ b/python/src/com/jetbrains/python/refactoring/extractmethod/PyExtractMethodUtil.java @@ -202,8 +202,11 @@ public class PyExtractMethodUtil { @NotNull final PyFunction generatedMethod, @NotNull final PyDuplicatesFinder finder, @NotNull final Editor editor) { - final ScopeOwner owner = ScopeUtil.getScopeOwner(callElement); + ScopeOwner owner = ScopeUtil.getScopeOwner(callElement); if (owner instanceof PsiFile) return; + if (owner instanceof PyFunction && ((PyFunction)owner).getContainingClass() != null) { + owner = ((PyFunction)owner).getContainingClass(); + } final List> duplicates = finder.findDuplicates(owner, generatedMethod); if (duplicates.size() > 0) { diff --git a/python/testData/refactoring/extractmethod/DuplicateInClass.after.py b/python/testData/refactoring/extractmethod/DuplicateInClass.after.py new file mode 100644 index 000000000000..c3a348fbfc4f --- /dev/null +++ b/python/testData/refactoring/extractmethod/DuplicateInClass.after.py @@ -0,0 +1,11 @@ + +class A: + def foo(self): + print 1 + + def baz(self): + self.foo() + self.foo() + + def bar(self): + self.foo() \ No newline at end of file diff --git a/python/testData/refactoring/extractmethod/DuplicateInClass.before.py b/python/testData/refactoring/extractmethod/DuplicateInClass.before.py new file mode 100644 index 000000000000..1862bf0840b1 --- /dev/null +++ b/python/testData/refactoring/extractmethod/DuplicateInClass.before.py @@ -0,0 +1,8 @@ + +class A: + def baz(self): + print 1 + print 1 + + def bar(self): + print 1 \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/refactoring/PyExtractMethodTest.java b/python/testSrc/com/jetbrains/python/refactoring/PyExtractMethodTest.java index 0290902bdf3a..9daa2fd2821a 100644 --- a/python/testSrc/com/jetbrains/python/refactoring/PyExtractMethodTest.java +++ b/python/testSrc/com/jetbrains/python/refactoring/PyExtractMethodTest.java @@ -258,4 +258,8 @@ public class PyExtractMethodTest extends LightMarkedTestCase { public void testDuplicateMultiLine() { doTest("foo"); } + + public void testDuplicateInClass() { + doTest("foo"); + } }