code: public boolean add(Object listener) {
  		if (listener == null) {
  			return false;
  		}
  		checkListenerType(listener);
  		synchronized (this) {
  			if (listeners == EMPTY_OBJECT_ARRAY) {
  				listeners = new Object[] { listener };
  			}
  			else {
  				int listenersLength = listeners.length;
  				for (int i = 0; i < listenersLength; i++) {
  					if (listeners[i] == listener) {
  						return false;
  					}
  				}
  				Object[] tmp = new Object[listenersLength + 1];
  				tmp[listenersLength] = listener;
  				System.arraycopy(listeners, 0, tmp, 0, listenersLength);
  				listeners = tmp;
  			}
  		}
  		return true;
  	}
docs: Adds <code>listener</code> to the list of registered listeners. If
  listener is already registered this method will do nothing.
  
  @param listener The event listener to be registered.
  
  @return true if the listener was registered, false if {@code listener} was null or it is
  already registered with this list helper.
  
  @throws IllegalArgumentException if {@code listener} is not assignable to the class of
  listener that this instance manages.