@Override
  public void visitPyFunction(@NotNull PyFunction node) {
    ASTNode nameNode = node.getNameNode();
    if (nameNode != null) {
      final String name = node.getName();
      LanguageLevel languageLevel = LanguageLevel.forElement(node);
      if (PyNames.UNDERSCORED_ATTRIBUTES.contains(name) || PyNames.getBuiltinMethods(languageLevel).containsKey(name)) {
        PyClass cls = node.getContainingClass();
        if (PyUtil.isNewMethod(node)) {
          boolean new_style_class = false;
          try {
            if (cls != null) new_style_class = cls.isNewStyleClass(null);
          }
          catch (IndexNotReadyException ignored) {
          }
          if (new_style_class) {
            addHighlightingAnnotation(nameNode, PyHighlighter.PY_PREDEFINED_DEFINITION);
          }
        }
        else {
          addHighlightingAnnotation(nameNode, PyHighlighter.PY_PREDEFINED_DEFINITION);
        }
      }
      else {
        if (ScopeUtil.getScopeOwner(node) instanceof PyFunction) {
          addHighlightingAnnotation(nameNode, PyHighlighter.PY_NESTED_FUNC_DEFINITION);
        }
        else {
          addHighlightingAnnotation(nameNode, PyHighlighter.PY_FUNC_DEFINITION);
        }
      }
    }
  }
@Override
  public void visitPyFunction(@NotNull PyFunction node)