1818import java .util .Collection ;
1919import java .util .Collections ;
2020import java .util .Enumeration ;
21- import java .util .HashSet ;
22- import java .util .Iterator ;
2321import java .util .List ;
2422import java .util .Map .Entry ;
2523import java .util .Set ;
2624import java .util .concurrent .ConcurrentHashMap ;
2725import java .util .concurrent .ConcurrentMap ;
26+ import java .util .concurrent .CopyOnWriteArrayList ;
2827import java .util .concurrent .atomic .AtomicInteger ;
2928
3029import org .eclipse .search .ui .ISearchResult ;
@@ -53,7 +52,7 @@ public abstract class AbstractTextSearchResult implements ISearchResult {
5352 */
5453 protected AbstractTextSearchResult () {
5554 fElementsToMatches = new ConcurrentHashMap <>();
56- fListeners = new ArrayList <>();
55+ fListeners = new CopyOnWriteArrayList <>();
5756 matchCount = new AtomicInteger (0 );
5857 fMatchFilters = null ; // filtering disabled by default
5958 }
@@ -233,16 +232,12 @@ private boolean didRemoveMatch(Match match) {
233232
234233 @ Override
235234 public void addListener (ISearchResultListener l ) {
236- synchronized (fListeners ) {
237- fListeners .add (l );
238- }
235+ fListeners .add (l );
239236 }
240237
241238 @ Override
242239 public void removeListener (ISearchResultListener l ) {
243- synchronized (fListeners ) {
244- fListeners .remove (l );
245- }
240+ fListeners .remove (l );
246241 }
247242
248243 /**
@@ -254,13 +249,8 @@ public void removeListener(ISearchResultListener l) {
254249 * @see ISearchResultListener
255250 */
256251 protected void fireChange (SearchResultEvent e ) {
257- HashSet <ISearchResultListener > copiedListeners = new HashSet <>();
258- synchronized (fListeners ) {
259- copiedListeners .addAll (fListeners );
260- }
261- Iterator <ISearchResultListener > listeners = copiedListeners .iterator ();
262- while (listeners .hasNext ()) {
263- listeners .next ().searchResultChanged (e );
252+ for (ISearchResultListener listener : fListeners ) {
253+ listener .searchResultChanged (e );
264254 }
265255 }
266256
@@ -276,7 +266,7 @@ private void updateFilterStateForAllMatches() {
276266 }
277267 }
278268 }
279- Match [] allChanges = changed .toArray (new Match [changed . size ()] );
269+ Match [] allChanges = changed .toArray (Match []:: new );
280270 fireChange (new FilterUpdateEvent (this , allChanges , getActiveMatchFilters ()));
281271 }
282272
0 commit comments