From 7233c2b714e886ccbc725593e5ba5973abe19aab Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 17 Aug 2010 19:02:07 +0400 Subject: [PATCH] generate 'return' before super method call in Override Methods if appropriate (PY-1537) --- .../codeInsight/override/PyOverrideImplementUtil.java | 4 ++++ python/testData/override/returnValue.py | 6 ++++++ python/testData/override/returnValue_after.py | 9 +++++++++ python/testSrc/com/jetbrains/python/PyOverrideTest.java | 4 ++++ 4 files changed, 23 insertions(+) create mode 100644 python/testData/override/returnValue.py create mode 100644 python/testData/override/returnValue_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 fea844e4f95e..66d548b78192 100644 --- a/python/src/com/jetbrains/python/codeInsight/override/PyOverrideImplementUtil.java +++ b/python/src/com/jetbrains/python/codeInsight/override/PyOverrideImplementUtil.java @@ -24,6 +24,7 @@ import com.jetbrains.python.PyNames; import com.jetbrains.python.psi.*; import com.jetbrains.python.psi.impl.PyFunctionBuilder; import com.jetbrains.python.psi.impl.PyPsiUtils; +import com.jetbrains.python.psi.types.PyNoneType; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -163,6 +164,9 @@ public class PyOverrideImplementUtil { }, ArrayUtil.EMPTY_STRING_ARRAY); int startIndex = 0; + if (baseFunction.getReturnType() != PyNoneType.INSTANCE) { + statementBody.append("return "); + } if (baseClass.isNewStyleClass()) { statementBody.append(PyNames.SUPER); statementBody.append("("); diff --git a/python/testData/override/returnValue.py b/python/testData/override/returnValue.py new file mode 100644 index 000000000000..43e9bba977ee --- /dev/null +++ b/python/testData/override/returnValue.py @@ -0,0 +1,6 @@ +class A: + def doStuff(self, foo=True): return True + +class B(A): + def otherMethod(self, foo, bar): + print foo, bar diff --git a/python/testData/override/returnValue_after.py b/python/testData/override/returnValue_after.py new file mode 100644 index 000000000000..2a0dcb2b65cd --- /dev/null +++ b/python/testData/override/returnValue_after.py @@ -0,0 +1,9 @@ +class A: + def doStuff(self, foo=True): return True + +class B(A): + def doStuff(self, foo=True): + return A.doStuff(self, foo) + + def otherMethod(self, foo, bar): + print foo, bar diff --git a/python/testSrc/com/jetbrains/python/PyOverrideTest.java b/python/testSrc/com/jetbrains/python/PyOverrideTest.java index 713d64db4cdc..5a671f70b4b8 100644 --- a/python/testSrc/com/jetbrains/python/PyOverrideTest.java +++ b/python/testSrc/com/jetbrains/python/PyOverrideTest.java @@ -38,6 +38,10 @@ public class PyOverrideTest extends PyLightFixtureTestCase { doTest(); } + public void testReturnValue() { // PY-1537 + doTest(); + } + public void testPy3k() { PythonLanguageLevelPusher.setForcedLanguageLevel(myFixture.getProject(), LanguageLevel.PYTHON31); try {