diff --git a/python/src/com/jetbrains/python/inspections/PyAbstractClassInspection.java b/python/src/com/jetbrains/python/inspections/PyAbstractClassInspection.java index b7778d29d767..edb8d3226993 100644 --- a/python/src/com/jetbrains/python/inspections/PyAbstractClassInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyAbstractClassInspection.java @@ -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; diff --git a/python/testData/inspections/PyAbstractClassInspection/HiddenForAbstractSubclassWithABCSuperclass/a.py b/python/testData/inspections/PyAbstractClassInspection/HiddenForAbstractSubclassWithABCSuperclass/a.py new file mode 100644 index 000000000000..25d6bcec4ead --- /dev/null +++ b/python/testData/inspections/PyAbstractClassInspection/HiddenForAbstractSubclassWithABCSuperclass/a.py @@ -0,0 +1,9 @@ +import abc + +class A1(abc.ABC): + @abc.abstractmethod + def m1(self): + pass + +class A2(A1, abc.ABC): + pass \ No newline at end of file diff --git a/python/testData/inspections/PyAbstractClassInspection/HiddenForAbstractSubclassWithABCSuperclass/abc.py b/python/testData/inspections/PyAbstractClassInspection/HiddenForAbstractSubclassWithABCSuperclass/abc.py new file mode 100644 index 000000000000..b906e6f5591a --- /dev/null +++ b/python/testData/inspections/PyAbstractClassInspection/HiddenForAbstractSubclassWithABCSuperclass/abc.py @@ -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 \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/inspections/PyAbstractClassInspectionTest.java b/python/testSrc/com/jetbrains/python/inspections/PyAbstractClassInspectionTest.java index 46aad9a4b54f..360788cac59d 100644 --- a/python/testSrc/com/jetbrains/python/inspections/PyAbstractClassInspectionTest.java +++ b/python/testSrc/com/jetbrains/python/inspections/PyAbstractClassInspectionTest.java @@ -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();