code: @Override
      public final synchronized void addPropertyChangeListener(
              String propertyName,
              PropertyChangeListener listener) {
          if (listener == null) {
              return;
          }
          if (changeSupport == null) {
              changeSupport = createPropertyChangeSupport(this);
          }
          changeSupport.addPropertyChangeListener(propertyName, listener);
      }
docs: Adds a PropertyChangeListener to the listener list for a specific property. The specified
  property may be user-defined.<p>
  
  Note that if this Model is inheriting a bound property, then no event will be fired in
  response to a change in the inherited property.<p>
  
  If listener is {@code null}, no exception is thrown and no action is performed.
  
  @param propertyName one of the property names listed above
  @param listener the PropertyChangeListener to be added
  
  @see #removePropertyChangeListener(String, PropertyChangeListener)
  @see #addPropertyChangeListener(String, PropertyChangeListener)
  @see #getPropertyChangeListeners(String)