From b0384b7f6706dc482b54b09906a0029f7ac73c75 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Thu, 23 Apr 2015 15:22:14 +0300 Subject: [PATCH] fixed PY-15437 Exception when converting method to function --- .../quickfix/PyMakeFunctionFromMethodQuickFix.java | 6 +++--- .../PyMakeFunctionFromMethodQuickFixTest/localClass.py | 4 ++++ .../localClass_after.py | 6 ++++++ .../quickFixes/PyMakeFunctionFromMethodQuickFixTest.java | 4 ++++ 4 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 python/testData/quickFixes/PyMakeFunctionFromMethodQuickFixTest/localClass.py create mode 100644 python/testData/quickFixes/PyMakeFunctionFromMethodQuickFixTest/localClass_after.py diff --git a/python/src/com/jetbrains/python/inspections/quickfix/PyMakeFunctionFromMethodQuickFix.java b/python/src/com/jetbrains/python/inspections/quickfix/PyMakeFunctionFromMethodQuickFix.java index 1b1a8e114f25..1024151f34a9 100644 --- a/python/src/com/jetbrains/python/inspections/quickfix/PyMakeFunctionFromMethodQuickFix.java +++ b/python/src/com/jetbrains/python/inspections/quickfix/PyMakeFunctionFromMethodQuickFix.java @@ -67,17 +67,17 @@ public class PyMakeFunctionFromMethodQuickFix implements LocalQuickFix { PsiElement copy = problemFunction.copy(); problemFunction.delete(); - final PsiFile file = containingClass.getContainingFile(); + final PsiElement parent = containingClass.getParent(); PyClass aClass = PsiTreeUtil.getTopmostParentOfType(containingClass, PyClass.class); if (aClass == null) aClass = containingClass; - copy = file.addBefore(copy, aClass); + copy = parent.addBefore(copy, aClass); for (UsageInfo usage : usages) { final PsiElement usageElement = usage.getElement(); if (usageElement instanceof PyReferenceExpression) { final PsiFile usageFile = usageElement.getContainingFile(); - updateUsage(copy, (PyReferenceExpression)usageElement, usageFile, !usageFile.equals(file)); + updateUsage(copy, (PyReferenceExpression)usageElement, usageFile, !usageFile.equals(parent)); } } } diff --git a/python/testData/quickFixes/PyMakeFunctionFromMethodQuickFixTest/localClass.py b/python/testData/quickFixes/PyMakeFunctionFromMethodQuickFixTest/localClass.py new file mode 100644 index 000000000000..71cbd6a70674 --- /dev/null +++ b/python/testData/quickFixes/PyMakeFunctionFromMethodQuickFixTest/localClass.py @@ -0,0 +1,4 @@ +def make_server(config): + class Handler(object): + def method_name2(self, x): + x.send_error(404, 'File not found') \ No newline at end of file diff --git a/python/testData/quickFixes/PyMakeFunctionFromMethodQuickFixTest/localClass_after.py b/python/testData/quickFixes/PyMakeFunctionFromMethodQuickFixTest/localClass_after.py new file mode 100644 index 000000000000..e452ae756a6a --- /dev/null +++ b/python/testData/quickFixes/PyMakeFunctionFromMethodQuickFixTest/localClass_after.py @@ -0,0 +1,6 @@ +def make_server(config): + def method_name2(x): + x.send_error(404, 'File not found') + + class Handler(object): + pass \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/quickFixes/PyMakeFunctionFromMethodQuickFixTest.java b/python/testSrc/com/jetbrains/python/quickFixes/PyMakeFunctionFromMethodQuickFixTest.java index 61d803942be0..f17fcc925613 100644 --- a/python/testSrc/com/jetbrains/python/quickFixes/PyMakeFunctionFromMethodQuickFixTest.java +++ b/python/testSrc/com/jetbrains/python/quickFixes/PyMakeFunctionFromMethodQuickFixTest.java @@ -75,4 +75,8 @@ public class PyMakeFunctionFromMethodQuickFixTest extends PyQuickFixTestCase { public void testUsageSelf() { doQuickFixTest(PyMethodMayBeStaticInspection.class, PyBundle.message("QFIX.NAME.make.function")); } + + public void testLocalClass() { + doQuickFixTest(PyMethodMayBeStaticInspection.class, PyBundle.message("QFIX.NAME.make.function")); + } }