From abace23bc3d5a8fe859554b5b1e693b5e9ec503d Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Tue, 9 Jul 2013 11:35:57 +0400 Subject: [PATCH] fixed PY-10233 "Method may be static" should ignore method that have overrides --- .../python/inspections/PyMethodMayBeStaticInspection.java | 3 +++ .../PyMethodMayBeStaticInspection/overwrittenMethod.py | 2 +- .../PyMethodMayBeStaticInspection/superMethod.py | 7 +++++++ .../inspections/PyMethodMayBeStaticInspectionTest.java | 5 +++++ 4 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 python/testData/inspections/PyMethodMayBeStaticInspection/superMethod.py diff --git a/python/src/com/jetbrains/python/inspections/PyMethodMayBeStaticInspection.java b/python/src/com/jetbrains/python/inspections/PyMethodMayBeStaticInspection.java index 7e467a5394a8..d488216235d2 100644 --- a/python/src/com/jetbrains/python/inspections/PyMethodMayBeStaticInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyMethodMayBeStaticInspection.java @@ -10,6 +10,7 @@ import com.jetbrains.python.PyNames; import com.jetbrains.python.inspections.quickfix.PyMakeFunctionFromMethodQuickFix; import com.jetbrains.python.inspections.quickfix.PyMakeMethodStaticQuickFix; import com.jetbrains.python.psi.*; +import com.jetbrains.python.psi.search.PyOverridingMethodsSearch; import com.jetbrains.python.psi.search.PySuperMethodsSearch; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; @@ -50,6 +51,8 @@ public class PyMethodMayBeStaticInspection extends PyInspection { if (containingClass == null) return; final Collection supers = PySuperMethodsSearch.search(node).findAll(); if (!supers.isEmpty()) return; + final Collection overrides = PyOverridingMethodsSearch.search(node, true).findAll(); + if (!overrides.isEmpty()) return; final PyDecoratorList decoratorList = node.getDecoratorList(); if (decoratorList != null) { for (PyDecorator decorator : decoratorList.getDecorators()) { diff --git a/python/testData/inspections/PyMethodMayBeStaticInspection/overwrittenMethod.py b/python/testData/inspections/PyMethodMayBeStaticInspection/overwrittenMethod.py index 4a7badf376e7..534de6ffb0be 100644 --- a/python/testData/inspections/PyMethodMayBeStaticInspection/overwrittenMethod.py +++ b/python/testData/inspections/PyMethodMayBeStaticInspection/overwrittenMethod.py @@ -1,5 +1,5 @@ class A: - def f(self, a): + def f(self, a): print "A" class B(A): diff --git a/python/testData/inspections/PyMethodMayBeStaticInspection/superMethod.py b/python/testData/inspections/PyMethodMayBeStaticInspection/superMethod.py new file mode 100644 index 000000000000..6df1a27e05d2 --- /dev/null +++ b/python/testData/inspections/PyMethodMayBeStaticInspection/superMethod.py @@ -0,0 +1,7 @@ +class A: + def f(self, a): + print "A" + +class B(A): + def f(self, a): + print self.b \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/inspections/PyMethodMayBeStaticInspectionTest.java b/python/testSrc/com/jetbrains/python/inspections/PyMethodMayBeStaticInspectionTest.java index ede506a18cc9..a3e39dd9dddb 100644 --- a/python/testSrc/com/jetbrains/python/inspections/PyMethodMayBeStaticInspectionTest.java +++ b/python/testSrc/com/jetbrains/python/inspections/PyMethodMayBeStaticInspectionTest.java @@ -46,10 +46,15 @@ public class PyMethodMayBeStaticInspectionTest extends PyTestCase { public void testNotImplemented() { doTest(); } + public void testOverwrittenMethod() { doTest(); } + public void testSuperMethod() { + doTest(); + } + private void doTest() { myFixture.configureByFile("inspections/PyMethodMayBeStaticInspection/" + getTestName(true) + ".py"); myFixture.enableInspections(PyMethodMayBeStaticInspection.class);