<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_annotation(cls, fn):
 """Find the _schema_annotation attribute for the given function. This will descend through decorators until it finds something that has the attribute. If it doesn't find it anywhere, it will return None. :param func fn: Find the attribute on this function. :returns: an instance of :class:`~doctor.resource.ResourceSchemaAnnotation` or None. """

        while fn is not None:
            if hasattr(fn, '_schema_annotation'):
                return fn._schema_annotation
            fn = getattr(fn, 'im_func', fn)
            closure = getattr(fn, '__closure__', None)
            fn = closure[0].cell_contents if closure is not None else None
        return None