MUST only be used only with method from child
    classes of L{{Recorder}}.

def recorded(function, custom_id=None, reentrant=True):
    '''MUST only be used only with method from child
    classes of L{{Recorder}}.'''
    canonical = reflect.class_canonical_name(3)
    annotate.injectClassCallback("recorded", 4,
                                 "_register_recorded_call",
                                 function, custom_id=custom_id,
                                 class_canonical_name=canonical)

    def wrapper(self, *args, **kwargs):
        recorder = IRecorder(self)
        return recorder.call(function, args, kwargs, reentrant=reentrant)

    return wrapper