diff --git a/python/python-psi-impl/src/com/jetbrains/python/refactoring/extractmethod/PyExtractMethodUtil.java b/python/python-psi-impl/src/com/jetbrains/python/refactoring/extractmethod/PyExtractMethodUtil.java index eb30fe12c209..d26fc2a4e903 100644 --- a/python/python-psi-impl/src/com/jetbrains/python/refactoring/extractmethod/PyExtractMethodUtil.java +++ b/python/python-psi-impl/src/com/jetbrains/python/refactoring/extractmethod/PyExtractMethodUtil.java @@ -736,9 +736,11 @@ public final class PyExtractMethodUtil { myFunction = s -> { ScopeOwner owner = parent; while (owner != null) { - final Scope scope = ControlFlowCache.getScope(owner); - if (scope.containsDeclaration(s)) { - return false; + if (!(owner instanceof PyClass)) { + final Scope scope = ControlFlowCache.getScope(owner); + if (scope.containsDeclaration(s)) { + return false; + } } owner = ScopeUtil.getScopeOwner(owner); } diff --git a/python/testData/refactoring/extractmethod/InnerFunctionWithSameNameAsOuterMethod.after.py b/python/testData/refactoring/extractmethod/InnerFunctionWithSameNameAsOuterMethod.after.py new file mode 100644 index 000000000000..417b4f068212 --- /dev/null +++ b/python/testData/refactoring/extractmethod/InnerFunctionWithSameNameAsOuterMethod.after.py @@ -0,0 +1,9 @@ +class A: + def foo(self): ... + + def bar(self): + def baz(): + foo() + + def foo(): + print('baz') \ No newline at end of file diff --git a/python/testData/refactoring/extractmethod/InnerFunctionWithSameNameAsOuterMethod.before.py b/python/testData/refactoring/extractmethod/InnerFunctionWithSameNameAsOuterMethod.before.py new file mode 100644 index 000000000000..d739adad2ca2 --- /dev/null +++ b/python/testData/refactoring/extractmethod/InnerFunctionWithSameNameAsOuterMethod.before.py @@ -0,0 +1,6 @@ +class A: + def foo(self): ... + + def bar(self): + def baz(): + print('baz') \ 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 835fe4013957..6f42f6f9a6da 100644 --- a/python/testSrc/com/jetbrains/python/refactoring/PyExtractMethodTest.java +++ b/python/testSrc/com/jetbrains/python/refactoring/PyExtractMethodTest.java @@ -391,4 +391,9 @@ public class PyExtractMethodTest extends LightMarkedTestCase { public void testMethodNameCanShadowModuleFunction() { doTest("_require_instance"); } + + // PY-61591 + public void testInnerFunctionWithSameNameAsOuterMethod() { + doTest("foo"); + } }