From 9ccbc0852a821286941b02e65c1b4cfdd8847d56 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Tue, 9 Apr 2013 21:10:09 +0400 Subject: [PATCH] fixed PY-9408 Method can be static: handle properties and classmethods friendlier --- .../PyMethodMayBeStaticInspection.java | 6 +++++- .../classMethod.py | 7 +++++++ .../PyMethodMayBeStaticInspection/property.py | 19 +++++++++++++++++++ .../PyMethodMayBeStaticInspectionTest.java | 8 ++++++++ 4 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 python/testData/inspections/PyMethodMayBeStaticInspection/classMethod.py create mode 100644 python/testData/inspections/PyMethodMayBeStaticInspection/property.py diff --git a/python/src/com/jetbrains/python/inspections/PyMethodMayBeStaticInspection.java b/python/src/com/jetbrains/python/inspections/PyMethodMayBeStaticInspection.java index 7c70d00f04eb..d5807ef2ce7a 100644 --- a/python/src/com/jetbrains/python/inspections/PyMethodMayBeStaticInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyMethodMayBeStaticInspection.java @@ -49,8 +49,12 @@ public class PyMethodMayBeStaticInspection extends PyInspection { final PyDecoratorList decoratorList = node.getDecoratorList(); if (decoratorList != null) { for (PyDecorator decorator : decoratorList.getDecorators()) { - if (PyNames.STATICMETHOD.equals(decorator.getName())) + final String decoratorName = decorator.getName(); + if (PyNames.STATICMETHOD.equals(decoratorName) || PyNames.CLASSMETHOD.equals(decoratorName)) { return; + } + final Property property = containingClass.findPropertyByCallable(node); + if (property != null) return; } } diff --git a/python/testData/inspections/PyMethodMayBeStaticInspection/classMethod.py b/python/testData/inspections/PyMethodMayBeStaticInspection/classMethod.py new file mode 100644 index 000000000000..fa66ec41d440 --- /dev/null +++ b/python/testData/inspections/PyMethodMayBeStaticInspection/classMethod.py @@ -0,0 +1,7 @@ +__author__ = 'ktisha' + +class A(): + + @classmethod + def my_method(cls): + print 1 diff --git a/python/testData/inspections/PyMethodMayBeStaticInspection/property.py b/python/testData/inspections/PyMethodMayBeStaticInspection/property.py new file mode 100644 index 000000000000..285ce3f5051e --- /dev/null +++ b/python/testData/inspections/PyMethodMayBeStaticInspection/property.py @@ -0,0 +1,19 @@ +__author__ = 'ktisha' + +class C(object): + def __init__(self): + self._x = None + + @property + def x(self): + """I'm the 'x' property.""" + return "property" + + @x.setter + def x(self, value): + print "setter" + + @x.deleter + def x(self): + print "deleter" + diff --git a/python/testSrc/com/jetbrains/python/inspections/PyMethodMayBeStaticInspectionTest.java b/python/testSrc/com/jetbrains/python/inspections/PyMethodMayBeStaticInspectionTest.java index e91a3102d401..4c9c16ed8cf9 100644 --- a/python/testSrc/com/jetbrains/python/inspections/PyMethodMayBeStaticInspectionTest.java +++ b/python/testSrc/com/jetbrains/python/inspections/PyMethodMayBeStaticInspectionTest.java @@ -31,6 +31,14 @@ public class PyMethodMayBeStaticInspectionTest extends PyTestCase { doTest(); } + public void testClassMethod() { + doTest(); + } + + public void testProperty() { + doTest(); + } + private void doTest() { myFixture.configureByFile("inspections/PyMethodMayBeStaticInspection/" + getTestName(true) + ".py"); myFixture.enableInspections(PyMethodMayBeStaticInspection.class);