PY-11127 Consider case where only class name is used in raise statment

This commit is contained in:
Mikhail Golubev
2014-11-04 17:49:27 +03:00
parent d20f571294
commit a1b56a7909
4 changed files with 28 additions and 5 deletions
@@ -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;
@@ -0,0 +1,8 @@
class A:
def m(self):
"""Abstract method."""
raise NotImplementedError
class B(A):
pass
@@ -0,0 +1,9 @@
class A:
def m(self):
"""Abstract method."""
raise NotImplementedError
class B(A):
def m(self):
pass
@@ -126,6 +126,10 @@ public class PyOverrideTest extends PyTestCase {
doTest();
}
// PY-11127
public void testOverriddenMethodRaisesNotImplementedErrorNoInstance() {
doTest();
}
public void testPy3k() {
doTest3k();