From c091cfdf37e466808f5d64b0975778bc7fb84976 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Mon, 15 Sep 2014 17:12:29 +0400 Subject: [PATCH] fixed PY-13884 "Override Methods" loses @staticmethod decorator from parent --- .../codeInsight/override/PyOverrideImplementUtil.java | 7 +++++-- python/testData/override/staticMethod.py | 7 +++++++ python/testData/override/staticMethod_after.py | 9 +++++++++ python/testSrc/com/jetbrains/python/PyOverrideTest.java | 4 ++++ 4 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 python/testData/override/staticMethod.py create mode 100644 python/testData/override/staticMethod_after.py diff --git a/python/src/com/jetbrains/python/codeInsight/override/PyOverrideImplementUtil.java b/python/src/com/jetbrains/python/codeInsight/override/PyOverrideImplementUtil.java index e11f3e01e916..5a6caf0a8941 100644 --- a/python/src/com/jetbrains/python/codeInsight/override/PyOverrideImplementUtil.java +++ b/python/src/com/jetbrains/python/codeInsight/override/PyOverrideImplementUtil.java @@ -183,8 +183,11 @@ public class PyOverrideImplementUtil { private static PyFunctionBuilder buildOverriddenFunction(PyClass pyClass, PyFunction baseFunction, boolean implement) { PyFunctionBuilder pyFunctionBuilder = new PyFunctionBuilder(baseFunction.getName()); final PyDecoratorList decorators = baseFunction.getDecoratorList(); - if (decorators != null && decorators.findDecorator(PyNames.CLASSMETHOD) != null) { - pyFunctionBuilder.decorate(PyNames.CLASSMETHOD); + if (decorators != null) { + if (decorators.findDecorator(PyNames.CLASSMETHOD) != null) + pyFunctionBuilder.decorate(PyNames.CLASSMETHOD); + else if (decorators.findDecorator(PyNames.STATICMETHOD) != null) + pyFunctionBuilder.decorate(PyNames.STATICMETHOD); } PyAnnotation anno = baseFunction.getAnnotation(); if (anno != null) { diff --git a/python/testData/override/staticMethod.py b/python/testData/override/staticMethod.py new file mode 100644 index 000000000000..818c544a9ca6 --- /dev/null +++ b/python/testData/override/staticMethod.py @@ -0,0 +1,7 @@ +class A: + @staticmethod + def foo(cls): + cls.k = 3 + +class B(A): + pass diff --git a/python/testData/override/staticMethod_after.py b/python/testData/override/staticMethod_after.py new file mode 100644 index 000000000000..000c0ca534cf --- /dev/null +++ b/python/testData/override/staticMethod_after.py @@ -0,0 +1,9 @@ +class A: + @staticmethod + def foo(cls): + cls.k = 3 + +class B(A): + @staticmethod + def foo(cls): + A.foo(cls) diff --git a/python/testSrc/com/jetbrains/python/PyOverrideTest.java b/python/testSrc/com/jetbrains/python/PyOverrideTest.java index d378f253f628..d80dc06182e7 100644 --- a/python/testSrc/com/jetbrains/python/PyOverrideTest.java +++ b/python/testSrc/com/jetbrains/python/PyOverrideTest.java @@ -64,6 +64,10 @@ public class PyOverrideTest extends PyTestCase { doTest(); } + public void testStaticMethod() { + doTest(); + } + public void testNewStyle() { doTest(); }