def METHOD_NAME(cls):
    """
    Making this a wrapper ensures this code runs during class creation.
    We also ensure that frozen-ness of classes is inherited.
    """
    nonlocal frozen, on_setattr
    had_on_setattr = on_setattr not in (None, setters.NO_OP)
    # By default, mutable classes convert & validate on setattr.
    if frozen is False and on_setattr is None:
        on_setattr = _ng_default_on_setattr
    # However, if we subclass a frozen class, we inherit the immutability
    # and disable on_setattr.
    for base_cls in cls.__bases__:
        if base_cls.__setattr__ is _frozen_setattrs:
            if had_on_setattr:
                raise ValueError(
                    "Frozen classes can't use on_setattr "
                    "(frozen-ness was inherited)."
                )
            on_setattr = setters.NO_OP
            break
    if auto_attribs is not None:
        return do_it(cls, auto_attribs)
    try:
        return do_it(cls, True)
    except UnannotatedAttributeError:
        return do_it(cls, False)