@Override
    public void visitPyFunction(@NotNull PyFunction node) {
      super.visitPyFunction(node);

      final PyDecoratorList decoratorList = node.getDecoratorList();
      if (!LanguageLevel.forElement(node).isPython2() && decoratorList != null) {
        for (PyDecorator decorator : decoratorList.getDecorators()) {
          for (KnownDecorator knownDecorator : PyKnownDecoratorUtil.asKnownDecorators(decorator, myTypeEvalContext)) {
            final KnownDecorator deprecated;
            final KnownDecorator builtin;

            if (knownDecorator == KnownDecorator.ABC_ABSTRACTPROPERTY) {
              deprecated = KnownDecorator.ABC_ABSTRACTPROPERTY;
              builtin = KnownDecorator.PROPERTY;
            }
            else if (knownDecorator == KnownDecorator.ABC_ABSTRACTCLASSMETHOD) {
              deprecated = KnownDecorator.ABC_ABSTRACTCLASSMETHOD;
              builtin = KnownDecorator.CLASSMETHOD;
            }
            else if (knownDecorator == KnownDecorator.ABC_ABSTRACTSTATICMETHOD) {
              deprecated = KnownDecorator.ABC_ABSTRACTSTATICMETHOD;
              builtin = KnownDecorator.STATICMETHOD;
            }
            else {
              continue;
            }

            final KnownDecorator abcAbsMethod = KnownDecorator.ABC_ABSTRACTMETHOD;
            final String message = PyPsiBundle.message("INSP.deprecation.abc.decorator.deprecated.use.alternative",
                                                       deprecated.getQualifiedName(),
                                                       builtin.getQualifiedName(),
                                                       abcAbsMethod.getQualifiedName());

            registerProblem(decorator, message, ProblemHighlightType.LIKE_DEPRECATED);
          }
        }
      }
    }
@Override
    public void visitPyFunction(@NotNull PyFunction node)