@Override
    public void visitPyClass(@NotNull PyClass pyClass) {
      if (isAbstract(pyClass) || PyProtocolsKt.isProtocol(pyClass, myTypeEvalContext)) {
        return;
      }

      /* Do not report problem if class contains only methods that raise NotImplementedError without any abc.* decorators
         but keep ability to implement them via quickfix (see PY-38680) */
      final List<PyFunction> toImplement = ContainerUtil
        .filter(PyPsiRefactoringUtil.getAllSuperAbstractMethods(pyClass, myTypeEvalContext),
                function -> PyKnownDecoratorUtil.hasAbstractDecorator(function, myTypeEvalContext));

      final ASTNode nameNode = pyClass.getNameNode();
      if (!toImplement.isEmpty() && nameNode != null) {
        final SmartList<LocalQuickFix> quickFixes = new SmartList<>();

        LocalQuickFix qf = PythonUiService.getInstance().createPyImplementMethodsQuickFix(pyClass, toImplement);
        if (qf != null) {
          quickFixes.add(qf);
        }
        quickFixes.add(new SetABCMetaAsMetaclassQuickFix());

        if (LanguageLevel.forElement(pyClass).isPy3K()) {
          quickFixes.add(new AddABCToSuperclassesQuickFix());
        }

        registerProblem(nameNode.getPsi(),
                        PyPsiBundle.message("INSP.abstract.class.class.must.implement.all.abstract.methods", pyClass.getName()),
                        quickFixes.toArray(LocalQuickFix.EMPTY_ARRAY));
      }
    }
@Override
    public void visitPyClass(@NotNull PyClass pyClass)