From a1b56a79098ac3f2b612745ff86581ffc45594d0 Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Tue, 4 Nov 2014 17:38:55 +0300 Subject: [PATCH] PY-11127 Consider case where only class name is used in raise statment --- .../override/PyOverrideImplementUtil.java | 12 +++++++----- ...iddenMethodRaisesNotImplementedErrorNoInstance.py | 8 ++++++++ ...ethodRaisesNotImplementedErrorNoInstance_after.py | 9 +++++++++ .../testSrc/com/jetbrains/python/PyOverrideTest.java | 4 ++++ 4 files changed, 28 insertions(+), 5 deletions(-) create mode 100644 python/testData/override/overriddenMethodRaisesNotImplementedErrorNoInstance.py create mode 100644 python/testData/override/overriddenMethodRaisesNotImplementedErrorNoInstance_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 7cb765424029..2c8a79865d32 100644 --- a/python/src/com/jetbrains/python/codeInsight/override/PyOverrideImplementUtil.java +++ b/python/src/com/jetbrains/python/codeInsight/override/PyOverrideImplementUtil.java @@ -28,7 +28,6 @@ import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.ScrollType; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogWrapper; -import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiDocumentManager; @@ -272,13 +271,16 @@ public class PyOverrideImplementUtil { final PyRaiseStatement raiseStatement = (PyRaiseStatement)statement; final PyExpression[] expressions = raiseStatement.getExpressions(); if (expressions.length > 0) { - final PyExpression expression = expressions[0]; - if (expression instanceof PyCallExpression) { - final PyExpression callee = ((PyCallExpression)expression).getCallee(); - if (callee instanceof PyReferenceExpression && Comparing.equal(callee.getName(), "NotImplementedError")) { + final PyExpression firstExpression = expressions[0]; + if (firstExpression instanceof PyCallExpression) { + final PyExpression callee = ((PyCallExpression)firstExpression).getCallee(); + if (callee != null && callee.getText().equals(PyNames.NOT_IMPLEMENTED_ERROR)) { return true; } } + else if (firstExpression.getText().equals(PyNames.NOT_IMPLEMENTED_ERROR)) { + return true; + } } } return false; diff --git a/python/testData/override/overriddenMethodRaisesNotImplementedErrorNoInstance.py b/python/testData/override/overriddenMethodRaisesNotImplementedErrorNoInstance.py new file mode 100644 index 000000000000..a911b0078b6d --- /dev/null +++ b/python/testData/override/overriddenMethodRaisesNotImplementedErrorNoInstance.py @@ -0,0 +1,8 @@ +class A: + def m(self): + """Abstract method.""" + raise NotImplementedError + + +class B(A): + pass diff --git a/python/testData/override/overriddenMethodRaisesNotImplementedErrorNoInstance_after.py b/python/testData/override/overriddenMethodRaisesNotImplementedErrorNoInstance_after.py new file mode 100644 index 000000000000..84f8ec5c452f --- /dev/null +++ b/python/testData/override/overriddenMethodRaisesNotImplementedErrorNoInstance_after.py @@ -0,0 +1,9 @@ +class A: + def m(self): + """Abstract method.""" + raise NotImplementedError + + +class B(A): + def m(self): + pass diff --git a/python/testSrc/com/jetbrains/python/PyOverrideTest.java b/python/testSrc/com/jetbrains/python/PyOverrideTest.java index 24164d5207e9..1c468ab7a972 100644 --- a/python/testSrc/com/jetbrains/python/PyOverrideTest.java +++ b/python/testSrc/com/jetbrains/python/PyOverrideTest.java @@ -126,6 +126,10 @@ public class PyOverrideTest extends PyTestCase { doTest(); } + // PY-11127 + public void testOverriddenMethodRaisesNotImplementedErrorNoInstance() { + doTest(); + } public void testPy3k() { doTest3k();