code: public void firePropertyChange(PropertyChangeEvent evt) {
  		Object oldValue = evt.getOldValue();
  		Object newValue = evt.getNewValue();
  		if (ObjectUtils.nullSafeEquals(oldValue, newValue)) {
  			return;
  		}
  
  		String propertyName = evt.getPropertyName();
  		PropertyChangeSupport child = null;
  		if (children != null) {
  			if (children != null && propertyName != null) {
  				child = (PropertyChangeSupport) children.get(propertyName);
  			}
  		}
  
  		if (listeners != null) {
  			Object[] listenerList = listeners.getListenerList();
  			for (int i = 0; i <= listenerList.length - 2; i += 2) {
  				if (listenerList[i] == PropertyChangeListener.class) {
  					((PropertyChangeListener) listenerList[i + 1]).propertyChange(evt);
  				}
  			}
  		}
  
  		if (child != null) {
  			child.firePropertyChange(evt);
  		}
  	}
docs: Fire an existing PropertyChangeEvent to any registered listeners. No
  event is fired if the given event's old and new values are equal and
  non-null.
  
  @param evt The PropertyChangeEvent object.