18
18
import java .util .Collection ;
19
19
import java .util .Collections ;
20
20
import java .util .Enumeration ;
21
- import java .util .HashSet ;
22
- import java .util .Iterator ;
23
21
import java .util .List ;
24
22
import java .util .Map .Entry ;
25
23
import java .util .Set ;
26
24
import java .util .concurrent .ConcurrentHashMap ;
27
25
import java .util .concurrent .ConcurrentMap ;
26
+ import java .util .concurrent .CopyOnWriteArrayList ;
28
27
import java .util .concurrent .atomic .AtomicInteger ;
29
28
30
29
import org .eclipse .search .ui .ISearchResult ;
@@ -53,7 +52,7 @@ public abstract class AbstractTextSearchResult implements ISearchResult {
53
52
*/
54
53
protected AbstractTextSearchResult () {
55
54
fElementsToMatches = new ConcurrentHashMap <>();
56
- fListeners = new ArrayList <>();
55
+ fListeners = new CopyOnWriteArrayList <>();
57
56
matchCount = new AtomicInteger (0 );
58
57
fMatchFilters = null ; // filtering disabled by default
59
58
}
@@ -233,16 +232,12 @@ private boolean didRemoveMatch(Match match) {
233
232
234
233
@ Override
235
234
public void addListener (ISearchResultListener l ) {
236
- synchronized (fListeners ) {
237
- fListeners .add (l );
238
- }
235
+ fListeners .add (l );
239
236
}
240
237
241
238
@ Override
242
239
public void removeListener (ISearchResultListener l ) {
243
- synchronized (fListeners ) {
244
- fListeners .remove (l );
245
- }
240
+ fListeners .remove (l );
246
241
}
247
242
248
243
/**
@@ -254,13 +249,8 @@ public void removeListener(ISearchResultListener l) {
254
249
* @see ISearchResultListener
255
250
*/
256
251
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 );
264
254
}
265
255
}
266
256
@@ -276,7 +266,7 @@ private void updateFilterStateForAllMatches() {
276
266
}
277
267
}
278
268
}
279
- Match [] allChanges = changed .toArray (new Match [changed . size ()] );
269
+ Match [] allChanges = changed .toArray (Match []:: new );
280
270
fireChange (new FilterUpdateEvent (this , allChanges , getActiveMatchFilters ()));
281
271
}
282
272
0 commit comments