Bug 359887 Removing IIdentifierListener corrupts changed event list
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/Identifier.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/Identifier.java
index 69d2c00..239f0db 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/Identifier.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/activities/Identifier.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2011 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,12 +11,10 @@
 
 package org.eclipse.ui.internal.activities;
 
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Set;
-
+import org.eclipse.core.runtime.ListenerList;
 import org.eclipse.ui.activities.IIdentifier;
 import org.eclipse.ui.activities.IIdentifierListener;
 import org.eclipse.ui.activities.IdentifierEvent;
@@ -40,7 +38,7 @@
 
     private String id;
 
-    private List identifierListeners;
+	private ListenerList identifierListeners;
 
     private transient String string;
 
@@ -58,13 +56,10 @@
 		}
 
         if (identifierListeners == null) {
-			identifierListeners = new ArrayList();
+			identifierListeners = new ListenerList();
 		}
 
-        if (!identifierListeners.contains(identifierListener)) {
-			identifierListeners.add(identifierListener);
-		}
-
+		identifierListeners.add(identifierListener);
         strongReferences.add(this);
     }
 
@@ -107,9 +102,10 @@
 		}
 
         if (identifierListeners != null) {
-			for (int i = 0; i < identifierListeners.size(); i++) {
-				((IIdentifierListener) identifierListeners.get(i))
-                        .identifierChanged(identifierEvent);
+			Object[] listeners = identifierListeners.getListeners();
+			for (int i = 0; i < listeners.length; i++) {
+				Object listener = listeners[i];
+				((IIdentifierListener) listener).identifierChanged(identifierEvent);
 			}
 		}
     }