code: public void unregister(Object object) {
      if (object == null) {
        throw new NullPointerException("Object to unregister must not be null.");
      }
      enforcer.enforce(this);
  
      Map<Class<?>, EventProducer> producersInListener = handlerFinder.findAllProducers(object);
      for (Map.Entry<Class<?>, EventProducer> entry : producersInListener.entrySet()) {
        final Class<?> key = entry.getKey();
        EventProducer producer = getProducerForEventType(key);
        EventProducer value = entry.getValue();
  
        if (value == null || !value.equals(producer)) {
          throw new IllegalArgumentException(
              "Missing event producer for an annotated method. Is " + object.getClass()
                  + " registered?");
        }
        producersByType.remove(key).invalidate();
      }
  
      Map<Class<?>, Set<EventHandler>> handlersInListener = handlerFinder.findAllSubscribers(object);
      for (Map.Entry<Class<?>, Set<EventHandler>> entry : handlersInListener.entrySet()) {
        Set<EventHandler> currentHandlers = getHandlersForEventType(entry.getKey());
        Collection<EventHandler> eventMethodsInListener = entry.getValue();
  
        if (currentHandlers == null || !currentHandlers.containsAll(eventMethodsInListener)) {
          throw new IllegalArgumentException(
              "Missing event handler for an annotated method. Is " + object.getClass()
                  + " registered?");
        }
  
        for (EventHandler handler : currentHandlers) {
          if (eventMethodsInListener.contains(handler)) {
            handler.invalidate();
          }
        }
        currentHandlers.removeAll(eventMethodsInListener);
      }
    }
docs: Unregisters all producer and handler methods on a registered {@code object}.
  
  @param object object whose producer and handler methods should be unregistered.
  @throws IllegalArgumentException if the object was not previously registered.
  @throws NullPointerException if the object is null.