? property.diff Index: ElementImpl.java =================================================================== RCS file: /cvs/java/src/org/netbeans/modules/java/model/ElementImpl.java,v retrieving revision 1.12 diff -c -b -B -r1.12 ElementImpl.java *** ElementImpl.java 2001/03/30 21:18:14 1.12 --- ElementImpl.java 2001/04/25 11:05:23 *************** *** 41,50 **** */ private transient Element element; ! /** Property change support. The helper object is used for managing Listeners and ! * for firing events. */ ! private transient PropertyChangeSupport support; /** Vetoable change support. * PENDING: Need to create special VetoableChangeSupport, as the standard one --- 41,50 ---- */ private transient Element element; ! /** ! * Collection of registered PropertyChangeListeners. */ ! private transient Collection propListeners; /** Vetoable change support. * PENDING: Need to create special VetoableChangeSupport, as the standard one *************** *** 190,205 **** if (DEBUG_EVENTS) { System.err.println("[" + this + "] attaching listener " + l); } ! if (support == null) { synchronized (this) { // new test under synchronized block ! if (support == null) { ! support = new PropertyChangeSupport (element); initializeListenerSupport(); } } } - support.addPropertyChangeListener (l); } /** --- 190,207 ---- if (DEBUG_EVENTS) { System.err.println("[" + this + "] attaching listener " + l); } ! if (propListeners == null) { synchronized (this) { // new test under synchronized block ! if (propListeners == null) { ! propListeners = new LinkedList(); initializeListenerSupport(); } } + } + synchronized (propListeners) { + propListeners.add(l); } } /** *************** *** 215,224 **** if (DEBUG_EVENTS) { System.err.println("[" + this + "] removing listener " + l); } ! if (support != null) { ! support.removePropertyChangeListener (l); } } /** Adds property vetoable listener */ public void addVetoableChangeListener (VetoableChangeListener l) { --- 217,228 ---- if (DEBUG_EVENTS) { System.err.println("[" + this + "] removing listener " + l); } ! if (propListeners != null) { ! synchronized (propListeners) { ! propListeners.remove(l); } } + } /** Adds property vetoable listener */ public void addVetoableChangeListener (VetoableChangeListener l) { *************** *** 313,320 **** sb.append(describeEvent(evt)); System.err.println(sb.toString()); } ! if (support != null) ! support.firePropertyChange(evt); } /** --- 317,333 ---- sb.append(describeEvent(evt)); System.err.println(sb.toString()); } ! if (propListeners == null) ! return; ! ! Vector listeners; ! synchronized (propListeners) { ! listeners = new Vector(propListeners); ! } ! for (int i = 0; i < listeners.size(); i++) { ! PropertyChangeListener l = (PropertyChangeListener)listeners.elementAt(i); ! l.propertyChange(evt); ! } } /** *************** *** 594,605 **** * then optimize whether they should ever generate PropertyChangeEvent. */ protected boolean hasListeners(String propName) { ! return vetoSupport.hasListeners(propName) || ! support.hasListeners(propName); } - - final PropertyChangeSupport getPropertySupport() { - return this.support; } /** --- 607,619 ---- * then optimize whether they should ever generate PropertyChangeEvent. */ protected boolean hasListeners(String propName) { ! if (vetoSupport.hasListeners(propName)) ! return true; ! if (propListeners == null) ! return false; ! synchronized (propListeners) { ! return !propListeners.isEmpty(); } } /**