Consider class inheriting abc.ABC as abstract (PY-30789)

This commit is contained in:
Semyon Proshev
2018-07-17 20:27:51 +03:00
parent 15d6339fba
commit b8f5298ee3
4 changed files with 32 additions and 0 deletions
@@ -60,6 +60,11 @@ public class PyAbstractClassInspection extends PyInspection {
if (metaClass != null && PyNames.ABC_META_CLASS.equals(metaClass.getName())) {
return true;
}
for (PyClassLikeType superClassType : pyClass.getSuperClassTypes(myTypeEvalContext)) {
if (superClassType != null && "abc.ABC".equals(superClassType.getClassQName())) {
return true;
}
}
for (PyFunction method : pyClass.getMethods()) {
if (PyKnownDecoratorUtil.hasAbstractDecorator(method, myTypeEvalContext)) {
return true;
@@ -0,0 +1,9 @@
import abc
class A1(abc.ABC):
@abc.abstractmethod
def m1(self):
pass
class A2(A1, abc.ABC):
pass
@@ -0,0 +1,13 @@
class ABCMeta:
pass
class ABC(metaclass=ABCMeta):
"""Helper class that provides a standard way to create an ABC using
inheritance.
"""
pass
def abstractmethod(foo):
pass
@@ -34,6 +34,11 @@ public class PyAbstractClassInspectionTest extends PyInspectionTestCase {
doTest();
}
// PY-30789
public void testHiddenForAbstractSubclassWithABCSuperclass() {
runWithLanguageLevel(LanguageLevel.PYTHON34, this::doMultiFileTest);
}
// PY-16776
public void testNotImplementedOverriddenInParent() {
doTest();