code: public PropertyChangeListener[] getPropertyChangeListeners() {
  		List returnList = new ArrayList();
  
  		// Add all the PropertyChangeListeners
  		if (listeners != null) {
  			returnList.addAll(Arrays.asList(listeners.getListeners(PropertyChangeListener.class)));
  		}
  
  		// Add all the PropertyChangeListenerProxys
  		if (children != null) {
  			Iterator iterator = children.keySet().iterator();
  			while (iterator.hasNext()) {
  				String key = (String) iterator.next();
  				PropertyChangeSupport child = (PropertyChangeSupport) children.get(key);
  				PropertyChangeListener[] childListeners = child.getPropertyChangeListeners();
  				for (int index = childListeners.length - 1; index >= 0; index--) {
  					returnList.add(new PropertyChangeListenerProxy(key, childListeners[index]));
  				}
  			}
  		}
  		return (PropertyChangeListener[]) returnList.toArray(new PropertyChangeListener[returnList.size()]);
  	}
docs: Returns an array of all the listeners that were added to the
  SwingPropertyChangeSupport object with addPropertyChangeListener().
  <p>
  If some listeners have been added with a named property, then the
  returned array will be a mixture of PropertyChangeListeners and
  <code>PropertyChangeListenerProxy</code>s. If the calling method is
  interested in distinguishing the listeners then it must test each element
  to see if it's a <code>PropertyChangeListenerProxy</code> perform the
  cast and examine the parameter.
  
  <pre>
  PropertyChangeListener[] listeners = support.getPropertyChangeListeners();
  for (int i = 0; i &lt; listeners.length; i++) {
  if (listeners[i] instanceof PropertyChangeListenerProxy) {
  PropertyChangeListenerProxy proxy = (PropertyChangeListenerProxy) listeners[i];
  if (proxy.getPropertyName().equals(&quot;foo&quot;)) {
  // proxy is a PropertyChangeListener which was associated
  // with the property named &quot;foo&quot;
  }
  }
  }
  </pre>
  
  @see java.beans.PropertyChangeListenerProxy
  @see java.beans.PropertyChangeSupport#getPropertyChangeListeners
  @return all of the <code>PropertyChangeListener</code> s added or an
  empty array if no listeners have been added
  @since 1.4