code: public void remove(Object listener) {
  		checkListenerType(listener);
  		synchronized (this) {
  			if (listeners == EMPTY_OBJECT_ARRAY)
  				return;
  
  			int listenersLength = listeners.length;
  			int index = 0;
  			for (; index < listenersLength; index++) {
  				if (listeners[index] == listener) {
  					break;
  				}
  			}
  			if (index < listenersLength) {
  				if (listenersLength == 1) {
  					listeners = EMPTY_OBJECT_ARRAY;
  				}
  				else {
  					Object[] tmp = new Object[listenersLength - 1];
  					System.arraycopy(listeners, 0, tmp, 0, index);
  					if (index < tmp.length) {
  						System.arraycopy(listeners, index + 1, tmp, index, tmp.length - index);
  					}
  					listeners = tmp;
  				}
  			}
  		}
  	}
docs: Removes <code>listener</code> from the list of registered listeners.
  
  @param listener The listener to be removed.
  
  @throws IllegalArgumentException if {@code listener} is null or not assignable to the class
  of listener that is maintained by this instance.