Index: projects/projectapi/nbproject/project.xml =================================================================== RCS file: /cvs/projects/projectapi/nbproject/project.xml,v retrieving revision 1.17 diff -u -r1.17 project.xml --- projects/projectapi/nbproject/project.xml 17 Mar 2007 12:26:27 -0000 1.17 +++ projects/projectapi/nbproject/project.xml 19 Mar 2007 21:17:31 -0000 @@ -61,7 +61,7 @@ - 7.1 + 7.8 Index: projects/projectapi/src/org/netbeans/spi/project/support/LookupProviderSupport.java =================================================================== RCS file: /cvs/projects/projectapi/src/org/netbeans/spi/project/support/LookupProviderSupport.java,v retrieving revision 1.6 diff -u -r1.6 LookupProviderSupport.java --- projects/projectapi/src/org/netbeans/spi/project/support/LookupProviderSupport.java 1 Mar 2007 13:33:47 -0000 1.6 +++ projects/projectapi/src/org/netbeans/spi/project/support/LookupProviderSupport.java 19 Mar 2007 21:17:31 -0000 @@ -36,6 +36,7 @@ import org.openide.filesystems.Repository; import org.openide.loaders.DataFolder; import org.openide.loaders.FolderLookup; +import org.openide.util.ChangeSupport; import org.openide.util.Lookup; import org.openide.util.LookupEvent; import org.openide.util.LookupListener; @@ -199,7 +200,7 @@ } private static class SourcesImpl implements Sources, ChangeListener, LookupListener { - private List listeners = new ArrayList(); + private final ChangeSupport changeSupport = new ChangeSupport(this); private Lookup.Result delegates; private Collection currentDelegates = new ArrayList(); @@ -223,7 +224,7 @@ } srcs.addLookupListener(this); delegates = srcs; - fireChange(); + changeSupport.fireChange(); } public SourceGroup[] getSourceGroups(String type) { @@ -238,26 +239,16 @@ return result.toArray(new SourceGroup[result.size()]); } - public synchronized void addChangeListener(ChangeListener listener) { - listeners.add(listener); + public void addChangeListener(ChangeListener listener) { + changeSupport.addChangeListener(listener); } - public synchronized void removeChangeListener(ChangeListener listener) { - listeners.remove(listener); + public void removeChangeListener(ChangeListener listener) { + changeSupport.removeChangeListener(listener); } public void stateChanged(ChangeEvent e) { - fireChange(); - } - - private void fireChange() { - ArrayList list = new ArrayList(); - synchronized (this) { - list.addAll(listeners); - } - for (ChangeListener listener : list) { - listener.stateChanged(new ChangeEvent(this)); - } + changeSupport.fireChange(); } public void resultChanged(LookupEvent ev) { @@ -271,7 +262,7 @@ ns.addChangeListener(this); currentDelegates.add(ns); } - fireChange(); + changeSupport.fireChange(); } } Index: projects/projectapi/test/unit/src/org/netbeans/spi/project/support/LookupProviderSupportTest.java =================================================================== RCS file: /cvs/projects/projectapi/test/unit/src/org/netbeans/spi/project/support/LookupProviderSupportTest.java,v retrieving revision 1.3 diff -u -r1.3 LookupProviderSupportTest.java --- projects/projectapi/test/unit/src/org/netbeans/spi/project/support/LookupProviderSupportTest.java 19 Oct 2006 15:43:15 -0000 1.3 +++ projects/projectapi/test/unit/src/org/netbeans/spi/project/support/LookupProviderSupportTest.java 19 Mar 2007 21:17:31 -0000 @@ -232,25 +232,15 @@ private static class SourcesImpl implements Sources { public HashMap grpMap = new HashMap(); - private List listeners = new ArrayList(); - public SourceGroup[] getSourceGroups(String type) { return grpMap.get(type); } public void addChangeListener(ChangeListener listener) { - listeners.add(listener); } public void removeChangeListener(ChangeListener listener) { - listeners.remove(listener); - } - - public void fireChange() { - for (ChangeListener listener : listeners) { - listener.stateChanged(new ChangeEvent(this)); - } } } Index: projects/projectui/nbproject/project.xml =================================================================== RCS file: /cvs/projects/projectui/nbproject/project.xml,v retrieving revision 1.32 diff -u -r1.32 project.xml --- projects/projectui/nbproject/project.xml 14 Nov 2006 23:41:40 -0000 1.32 +++ projects/projectui/nbproject/project.xml 19 Mar 2007 21:17:31 -0000 @@ -180,7 +180,7 @@ - 7.4 + 7.8 Index: projects/projectui/src/org/netbeans/modules/project/ui/NewFileWizard.java =================================================================== RCS file: /cvs/projects/projectui/src/org/netbeans/modules/project/ui/NewFileWizard.java,v retrieving revision 1.17 diff -u -r1.17 NewFileWizard.java --- projects/projectui/src/org/netbeans/modules/project/ui/NewFileWizard.java 30 Jun 2006 21:27:19 -0000 1.17 +++ projects/projectui/src/org/netbeans/modules/project/ui/NewFileWizard.java 19 Mar 2007 21:17:31 -0000 @@ -144,7 +144,7 @@ // /** The template chooser panel (initially null). */ // private WizardDescriptor.Panel templateChooser = null; // /** Change listeners. */ -// private final List/**/ listeners = new ArrayList(); +// private final ChangeSupport changeSupport = new ChangeSupport(this); // /** Currently used wizard. */ // private TemplateWizard wiz = null; // @@ -223,19 +223,11 @@ // } // // public void addChangeListener(ChangeListener l) { -// listeners.add(l); +// changeSupport.addChangeListener(l); // } // // public void removeChangeListener(ChangeListener l) { -// listeners.remove(l); -// } -// -// private void fireChange() { -// ChangeEvent e = new ChangeEvent(this); -// Iterator it = listeners.iterator(); -// while (it.hasNext()) { -// ((ChangeListener)it.next()).stateChanged(e); -// } +// changeSupport.removeChangeListener(l); // } // // public void setDelegate(InstantiatingIterator nue) { @@ -252,11 +244,11 @@ // nue.addChangeListener(this); // } // delegate = nue; -// fireChange(); +// changeSupport.fireChange(); // } // // public void stateChanged(ChangeEvent e) { -// fireChange(); +// changeSupport.fireChange(); // } // // private static InstantiatingIterator findTemplateWizardIterator(FileObject template, Project p) { Index: projects/projectui/src/org/netbeans/modules/project/ui/PhysicalView.java =================================================================== RCS file: /cvs/projects/projectui/src/org/netbeans/modules/project/ui/PhysicalView.java,v retrieving revision 1.18 diff -u -r1.18 PhysicalView.java --- projects/projectui/src/org/netbeans/modules/project/ui/PhysicalView.java 28 Dec 2006 13:55:22 -0000 1.18 +++ projects/projectui/src/org/netbeans/modules/project/ui/PhysicalView.java 19 Mar 2007 21:17:31 -0000 @@ -28,7 +28,6 @@ import javax.swing.Action; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import javax.swing.event.EventListenerList; import org.netbeans.api.project.Project; import org.netbeans.api.project.ProjectUtils; import org.netbeans.api.project.ProjectInformation; @@ -48,6 +47,7 @@ import org.openide.nodes.Node; import org.openide.nodes.NodeNotFoundException; import org.openide.nodes.NodeOp; +import org.openide.util.ChangeSupport; import org.openide.util.NbBundle; import org.openide.util.Lookup; import org.openide.util.WeakListeners; @@ -118,7 +118,7 @@ static final class VisibilityQueryDataFilter implements ChangeListener, ChangeableDataFilter { - EventListenerList ell = new EventListenerList(); + private final ChangeSupport changeSupport = new ChangeSupport( this ); public VisibilityQueryDataFilter() { VisibilityQuery.getDefault().addChangeListener( this ); @@ -130,24 +130,15 @@ } public void stateChanged( ChangeEvent e) { - Object[] listeners = ell.getListenerList(); - ChangeEvent event = null; - for (int i = listeners.length-2; i>=0; i-=2) { - if (listeners[i] == ChangeListener.class) { - if ( event == null) { - event = new ChangeEvent( this ); - } - ((ChangeListener)listeners[i+1]).stateChanged( event ); - } - } + changeSupport.fireChange(); } public void addChangeListener( ChangeListener listener ) { - ell.add( ChangeListener.class, listener ); + changeSupport.addChangeListener( listener ); } public void removeChangeListener( ChangeListener listener ) { - ell.remove( ChangeListener.class, listener ); + changeSupport.removeChangeListener( listener ); } } Index: projects/projectui/src/org/netbeans/modules/project/ui/SimpleTargetChooserPanel.java =================================================================== RCS file: /cvs/projects/projectui/src/org/netbeans/modules/project/ui/SimpleTargetChooserPanel.java,v retrieving revision 1.20 diff -u -r1.20 SimpleTargetChooserPanel.java --- projects/projectui/src/org/netbeans/modules/project/ui/SimpleTargetChooserPanel.java 13 Jul 2006 08:04:01 -0000 1.20 +++ projects/projectui/src/org/netbeans/modules/project/ui/SimpleTargetChooserPanel.java 19 Mar 2007 21:17:31 -0000 @@ -22,7 +22,6 @@ import java.awt.Component; import java.io.IOException; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; @@ -32,6 +31,7 @@ import org.openide.WizardDescriptor; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileUtil; +import org.openide.util.ChangeSupport; import org.openide.util.HelpCtx; import org.openide.util.NbBundle; @@ -41,7 +41,7 @@ */ final class SimpleTargetChooserPanel implements WizardDescriptor.Panel, ChangeListener { - private final List listeners = new ArrayList(); + private final ChangeSupport changeSupport = new ChangeSupport(this); private SimpleTargetChooserPanelGUI gui; private Project project; @@ -99,23 +99,12 @@ return errorMessage == null; } - public synchronized void addChangeListener(ChangeListener l) { - listeners.add(l); + public void addChangeListener(ChangeListener l) { + changeSupport.addChangeListener(l); } - public synchronized void removeChangeListener(ChangeListener l) { - listeners.remove(l); - } - - private void fireChange() { - ChangeEvent e = new ChangeEvent(this); - List templist; - synchronized (this) { - templist = new ArrayList (listeners); - } - for (ChangeListener l: templist) { - l.stateChanged(e); - } + public void removeChangeListener(ChangeListener l) { + changeSupport.removeChangeListener(l); } public void readSettings( Object settings ) { @@ -172,7 +161,7 @@ } public void stateChanged(ChangeEvent e) { - fireChange(); + changeSupport.fireChange(); } private FileObject getTargetFolderFromGUI () { Index: projects/projectui/src/org/netbeans/modules/project/ui/SimpleTargetChooserPanelGUI.java =================================================================== RCS file: /cvs/projects/projectui/src/org/netbeans/modules/project/ui/SimpleTargetChooserPanelGUI.java,v retrieving revision 1.31 diff -u -r1.31 SimpleTargetChooserPanelGUI.java --- projects/projectui/src/org/netbeans/modules/project/ui/SimpleTargetChooserPanelGUI.java 25 Jan 2007 08:49:43 -0000 1.31 +++ projects/projectui/src/org/netbeans/modules/project/ui/SimpleTargetChooserPanelGUI.java 19 Mar 2007 21:17:32 -0000 @@ -24,7 +24,6 @@ import java.io.File; import java.text.MessageFormat; import java.util.ArrayList; -import java.util.Iterator; import java.util.List; import javax.swing.DefaultComboBoxModel; import javax.swing.JLabel; @@ -37,12 +36,12 @@ import org.netbeans.api.project.ProjectUtils; import org.netbeans.api.project.SourceGroup; import org.netbeans.api.project.Sources; -import org.netbeans.spi.project.support.GenericSources; import org.openide.awt.Mnemonics; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileUtil; import org.openide.loaders.DataObject; import org.openide.loaders.DataObjectNotFoundException; +import org.openide.util.ChangeSupport; import org.openide.util.NbBundle; /** @@ -61,7 +60,7 @@ private Project project; private String expectedExtension; - private final List listeners = new ArrayList(); + private final ChangeSupport changeSupport = new ChangeSupport(this); private SourceGroup[] folders; private boolean isFolder; @@ -185,25 +184,14 @@ return PREF_DIM; } - public synchronized void addChangeListener(ChangeListener l) { - listeners.add(l); + public void addChangeListener(ChangeListener l) { + changeSupport.addChangeListener(l); } - public synchronized void removeChangeListener(ChangeListener l) { - listeners.remove(l); + public void removeChangeListener(ChangeListener l) { + changeSupport.removeChangeListener(l); } - private void fireChange() { - ChangeEvent e = new ChangeEvent(this); - List templist; - synchronized (this) { - templist = new ArrayList (listeners); - } - for (ChangeListener l: templist) { - l.stateChanged(e); - } - } - /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is @@ -399,7 +387,7 @@ fileTextField.setText( createdFileName.replace( '/', File.separatorChar ) ); // NOI18N - fireChange(); + changeSupport.fireChange(); } Index: projects/projectui/src/org/netbeans/modules/project/ui/TemplateChooserPanel.java =================================================================== RCS file: /cvs/projects/projectui/src/org/netbeans/modules/project/ui/TemplateChooserPanel.java,v retrieving revision 1.13 diff -u -r1.13 TemplateChooserPanel.java --- projects/projectui/src/org/netbeans/modules/project/ui/TemplateChooserPanel.java 23 Dec 2006 16:02:46 -0000 1.13 +++ projects/projectui/src/org/netbeans/modules/project/ui/TemplateChooserPanel.java 19 Mar 2007 21:17:32 -0000 @@ -20,8 +20,6 @@ package org.netbeans.modules.project.ui; import java.awt.Component; -import java.util.ArrayList; -import java.util.List; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import org.netbeans.api.project.Project; @@ -32,6 +30,7 @@ import org.openide.loaders.DataObject; import org.openide.loaders.DataObjectNotFoundException; import org.openide.loaders.TemplateWizard; +import org.openide.util.ChangeSupport; import org.openide.util.HelpCtx; import org.openide.util.NbBundle; @@ -45,7 +44,7 @@ private static String lastCategory = null; private static String lastTemplate = null; - private final List listeners = new ArrayList(); + private final ChangeSupport changeSupport = new ChangeSupport(this); private TemplateChooserPanelGUI gui; private Project project; @@ -73,23 +72,12 @@ return gui != null && gui.getTemplate() != null; } - public synchronized void addChangeListener(ChangeListener l) { - listeners.add(l); + public void addChangeListener(ChangeListener l) { + changeSupport.addChangeListener(l); } - public synchronized void removeChangeListener(ChangeListener l) { - listeners.remove(l); - } - - private void fireChange() { - ChangeEvent e = new ChangeEvent(this); - List templist; - synchronized (this) { - templist = new ArrayList (listeners); - } - for (ChangeListener l: templist) { - l.stateChanged(e); - } + public void removeChangeListener(ChangeListener l) { + changeSupport.removeChangeListener(l); } public void readSettings(Object settings) { @@ -148,7 +136,7 @@ setDelegate(null); } */ - fireChange(); + changeSupport.fireChange(); } Index: projects/projectui/src/org/netbeans/modules/project/ui/TemplateChooserPanelGUI.java =================================================================== RCS file: /cvs/projects/projectui/src/org/netbeans/modules/project/ui/TemplateChooserPanelGUI.java,v retrieving revision 1.42 diff -u -r1.42 TemplateChooserPanelGUI.java --- projects/projectui/src/org/netbeans/modules/project/ui/TemplateChooserPanelGUI.java 25 Jan 2007 08:49:46 -0000 1.42 +++ projects/projectui/src/org/netbeans/modules/project/ui/TemplateChooserPanelGUI.java 19 Mar 2007 21:17:32 -0000 @@ -32,7 +32,6 @@ import javax.swing.JLabel; import javax.swing.JList; import javax.swing.ListCellRenderer; -import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.plaf.UIResource; import org.netbeans.api.project.Project; @@ -47,6 +46,7 @@ import org.openide.nodes.FilterNode; import org.openide.nodes.Node; import org.openide.util.AsyncGUIJob; +import org.openide.util.ChangeSupport; import org.openide.util.NbBundle; import org.openide.util.Utilities; @@ -64,7 +64,7 @@ private static final java.awt.Dimension PREF_DIM = new java.awt.Dimension (500, 340); // private final String[] recommendedTypes = null; - private final List listeners = new ArrayList(); + private final ChangeSupport changeSupport = new ChangeSupport(this); //Templates folder root private FileObject templatesFolder; @@ -125,23 +125,16 @@ } - public synchronized void addChangeListener(ChangeListener l) { - listeners.add(l); + public void addChangeListener(ChangeListener l) { + changeSupport.addChangeListener(l); } - public synchronized void removeChangeListener(ChangeListener l) { - listeners.remove(l); + public void removeChangeListener(ChangeListener l) { + changeSupport.removeChangeListener(l); } private void fireChange() { - ChangeEvent e = new ChangeEvent(this); - List templist; - synchronized (this) { - templist = new ArrayList (listeners); - } - for (ChangeListener l: templist) { - l.stateChanged(e); - } + changeSupport.fireChange(); } Index: projects/projectui/src/org/netbeans/modules/project/ui/TemplatesPanel.java =================================================================== RCS file: /cvs/projects/projectui/src/org/netbeans/modules/project/ui/TemplatesPanel.java,v retrieving revision 1.23 diff -u -r1.23 TemplatesPanel.java --- projects/projectui/src/org/netbeans/modules/project/ui/TemplatesPanel.java 25 Jan 2007 08:49:44 -0000 1.23 +++ projects/projectui/src/org/netbeans/modules/project/ui/TemplatesPanel.java 19 Mar 2007 21:17:32 -0000 @@ -44,7 +44,7 @@ */ public class TemplatesPanel implements WizardDescriptor.Panel { - private ArrayList listeners; + private final ChangeSupport changeSupport = new ChangeSupport(this); private TemplatesPanelGUI panel; private WarmupJob warmUp; private boolean warmUpActive; @@ -128,18 +128,12 @@ } } - public synchronized void addChangeListener(ChangeListener l) { - if (this.listeners == null) { - this.listeners = new ArrayList (); - } - this.listeners.add (l); + public void addChangeListener(ChangeListener l) { + changeSupport.addChangeListener(l); } - public synchronized void removeChangeListener(ChangeListener l) { - if (this.listeners == null) { - return; - } - this.listeners.remove (l); + public void removeChangeListener(ChangeListener l) { + changeSupport.removeChangeListener(l); } public boolean isValid() { @@ -303,17 +297,7 @@ } public void fireChange() { - Iterator it = null; - synchronized (this) { - if (listeners == null) { - return; - } - it = ((ArrayList)listeners.clone()).iterator(); - } - ChangeEvent event = new ChangeEvent (this); - while (it.hasNext ()) { - ((ChangeListener)it.next()).stateChanged(event); - } + changeSupport.fireChange(); } } Index: projects/projectuiapi/nbproject/project.xml =================================================================== RCS file: /cvs/projects/projectuiapi/nbproject/project.xml,v retrieving revision 1.18 diff -u -r1.18 project.xml --- projects/projectuiapi/nbproject/project.xml 9 Nov 2006 16:54:06 -0000 1.18 +++ projects/projectuiapi/nbproject/project.xml 19 Mar 2007 21:17:32 -0000 @@ -101,7 +101,7 @@ - 6.10 + 7.8 Index: projects/projectuiapi/src/org/netbeans/modules/project/uiapi/DefaultProjectRenamePanel.java =================================================================== RCS file: /cvs/projects/projectuiapi/src/org/netbeans/modules/project/uiapi/DefaultProjectRenamePanel.java,v retrieving revision 1.10 diff -u -r1.10 DefaultProjectRenamePanel.java --- projects/projectuiapi/src/org/netbeans/modules/project/uiapi/DefaultProjectRenamePanel.java 11 Jan 2007 13:05:23 -0000 1.10 +++ projects/projectuiapi/src/org/netbeans/modules/project/uiapi/DefaultProjectRenamePanel.java 19 Mar 2007 21:17:32 -0000 @@ -21,7 +21,6 @@ import java.awt.CardLayout; import java.io.File; import java.util.ArrayList; -import java.util.List; import javax.swing.UIManager; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; @@ -33,6 +32,7 @@ import org.netbeans.api.project.ProjectUtils; import org.netbeans.modules.project.uiapi.DefaultProjectOperationsImplementation.InvalidablePanel; import org.openide.filesystems.FileUtil; +import org.openide.util.ChangeSupport; /** * @author Jan Lahoda @@ -40,7 +40,7 @@ public class DefaultProjectRenamePanel extends javax.swing.JPanel implements DocumentListener, InvalidablePanel { private Project project; - private List listeners; + private final ChangeSupport changeSupport = new ChangeSupport(this); private ProgressHandle handle; /** @@ -54,8 +54,6 @@ name = ProjectUtils.getInformation(project).getDisplayName(); } - this.listeners = new ArrayList(); - initComponents(); projectName.setText(name); @@ -68,12 +66,12 @@ } } - public synchronized void addChangeListener(ChangeListener l) { - listeners.add(l); + public void addChangeListener(ChangeListener l) { + changeSupport.addChangeListener(l); } - public synchronized void removeChangeListener(ChangeListener l) { - listeners.remove(l); + public void removeChangeListener(ChangeListener l) { + changeSupport.removeChangeListener(l); } /** This method is called from within the constructor to @@ -279,16 +277,7 @@ errorMessage.setText(newError); if (changed) { - ChangeListener[] listenersCopy; - - synchronized (this) { - listenersCopy = listeners.toArray(new ChangeListener[0]); - } - ChangeEvent evt = new ChangeEvent(this); - - for (ChangeListener l : listenersCopy) { - l.stateChanged(evt); - } + changeSupport.fireChange(); } } Index: projects/projectuiapi/src/org/netbeans/modules/project/uiapi/ProjectCopyPanel.java =================================================================== RCS file: /cvs/projects/projectuiapi/src/org/netbeans/modules/project/uiapi/ProjectCopyPanel.java,v retrieving revision 1.13 diff -u -r1.13 ProjectCopyPanel.java --- projects/projectuiapi/src/org/netbeans/modules/project/uiapi/ProjectCopyPanel.java 9 Feb 2007 12:32:16 -0000 1.13 +++ projects/projectuiapi/src/org/netbeans/modules/project/uiapi/ProjectCopyPanel.java 19 Mar 2007 21:17:32 -0000 @@ -20,11 +20,8 @@ import java.awt.CardLayout; import java.io.File; -import java.util.ArrayList; -import java.util.List; import javax.swing.JFileChooser; import javax.swing.UIManager; -import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.event.DocumentListener; import javax.swing.event.DocumentEvent; @@ -35,6 +32,7 @@ import org.netbeans.api.project.ProjectUtils; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileUtil; +import org.openide.util.ChangeSupport; import org.openide.util.NbBundle; /** @@ -46,7 +44,7 @@ private boolean isMove; private boolean invalid; - private List listeners; + private final ChangeSupport changeSupport = new ChangeSupport(this); private ProgressHandle handle; /** @@ -55,7 +53,6 @@ public ProjectCopyPanel(ProgressHandle handle, Project project, boolean isMove) { this.project = project; this.isMove = isMove; - this.listeners = new ArrayList(); this.handle = handle; @@ -74,12 +71,12 @@ } } - public synchronized void addChangeListener(ChangeListener l) { - listeners.add(l); + public void addChangeListener(ChangeListener l) { + changeSupport.addChangeListener(l); } - public synchronized void removeChangeListener(ChangeListener l) { - listeners.remove(l); + public void removeChangeListener(ChangeListener l) { + changeSupport.removeChangeListener(l); } /** This method is called from within the constructor to @@ -399,16 +396,7 @@ errorMessage.setText(newError); if (changed) { - ChangeListener[] listenersCopy; - - synchronized (this) { - listenersCopy = listeners.toArray(new ChangeListener[0]); - } - ChangeEvent evt = new ChangeEvent(this); - - for (ChangeListener l : listenersCopy) { - l.stateChanged(evt); - } + changeSupport.fireChange(); } } Index: projects/queries/nbproject/project.xml =================================================================== RCS file: /cvs/projects/queries/nbproject/project.xml,v retrieving revision 1.11 diff -u -r1.11 project.xml --- projects/queries/nbproject/project.xml 14 Mar 2007 14:34:06 -0000 1.11 +++ projects/queries/nbproject/project.xml 19 Mar 2007 21:17:32 -0000 @@ -36,7 +36,7 @@ - 6.10 + 7.8 Index: projects/queries/src/org/netbeans/api/queries/VisibilityQuery.java =================================================================== RCS file: /cvs/projects/queries/src/org/netbeans/api/queries/VisibilityQuery.java,v retrieving revision 1.6 diff -u -r1.6 VisibilityQuery.java --- projects/queries/src/org/netbeans/api/queries/VisibilityQuery.java 30 Jun 2006 21:27:33 -0000 1.6 +++ projects/queries/src/org/netbeans/api/queries/VisibilityQuery.java 19 Mar 2007 21:17:32 -0000 @@ -19,16 +19,14 @@ package org.netbeans.api.queries; -import java.util.ArrayList; -import java.util.Collections; import java.util.HashSet; import java.util.LinkedHashSet; -import java.util.List; import java.util.Set; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import org.netbeans.spi.queries.VisibilityQueryImplementation; import org.openide.filesystems.FileObject; +import org.openide.util.ChangeSupport; import org.openide.util.Lookup; import org.openide.util.LookupEvent; import org.openide.util.LookupListener; @@ -48,7 +46,7 @@ private final ResultListener resultListener = new ResultListener(); private final VqiChangedListener vqiListener = new VqiChangedListener (); - private final List listeners = Collections.synchronizedList(new ArrayList()); + private final ChangeSupport changeSupport = new ChangeSupport(this); private Lookup.Result vqiResult = null; private Set cachedVqiInstances = null; @@ -88,7 +86,7 @@ * @param l a listener to add */ public void addChangeListener(ChangeListener l) { - listeners.add(l); + changeSupport.addChangeListener(l); } /** @@ -96,21 +94,7 @@ * @param l a listener to remove */ public void removeChangeListener(ChangeListener l) { - listeners.remove(l); - } - - private void fireChange() { - ChangeListener[] _listeners; - synchronized (listeners) { - if (listeners.isEmpty()) { - return; - } - _listeners = listeners.toArray(new ChangeListener[listeners.size()]); - } - ChangeEvent ev = new ChangeEvent(this); - for (ChangeListener l : _listeners) { - l.stateChanged(ev); - } + changeSupport.removeChangeListener(l); } private synchronized Set getVqiInstances() { @@ -145,13 +129,13 @@ private class ResultListener implements LookupListener { public void resultChanged(LookupEvent ev) { setupChangeListeners(cachedVqiInstances, new LinkedHashSet(vqiResult.allInstances())); - fireChange(); + changeSupport.fireChange(); } } private class VqiChangedListener implements ChangeListener { public void stateChanged(ChangeEvent e) { - fireChange(); + changeSupport.fireChange(); } }