Bug 558250 - ConcurrentModification with DynamicMenuContributions ...

Moved modification after for loop. Fixed ArrayList => List in signatures

Change-Id: I57a72f639ae265533beedd60cd29411e4f30b888
Signed-off-by: Jonas Helming <jhelming@eclipsesource.com>
diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerRenderer.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerRenderer.java
index d21547e..a433e6a 100644
--- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerRenderer.java
+++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerRenderer.java
@@ -597,7 +597,7 @@
 	}
 
 	private void removeMenuContributions(final MMenu menuModel,
-			final ArrayList<MMenuElement> menuContributionsToRemove) {
+			final List<MMenuElement> menuContributionsToRemove) {
 		for (MMenuElement item : menuContributionsToRemove) {
 			menuModel.getChildren().remove(item);
 
@@ -1144,7 +1144,7 @@
 	 * @param menuModel
 	 * @param dump
 	 */
-	public void removeDynamicMenuContributions(MenuManager menuManager, MMenu menuModel, ArrayList<MMenuElement> dump) {
+	public void removeDynamicMenuContributions(MenuManager menuManager, MMenu menuModel, List<MMenuElement> dump) {
 		removeMenuContributions(menuModel, dump);
 		for (MMenuElement mMenuElement : dump) {
 			IContributionItem ici = getContribution(mMenuElement);
@@ -1171,6 +1171,7 @@
 	 */
 	@SuppressWarnings("unchecked")
 	public void removeDynamicMenuContributions(MenuManager menuManager, MMenu menuModel) {
+		List<MMenuElement> toBeRemoved = new ArrayList<>();
 		for (Entry<MMenuElement, IContributionItem> entry : modelToContribution.entrySet()) {
 			MMenuElement menuElement = entry.getKey();
 			if (menuElement instanceof MDynamicMenuContribution) {
@@ -1191,12 +1192,13 @@
 								.getTransientData().get(MenuManagerShowProcessor.DYNAMIC_ELEMENT_STORAGE_KEY);
 
 						if (childElements != null) {
-							removeDynamicMenuContributions(menuManager, menuModel, childElements);
+							toBeRemoved.addAll(childElements);
 						}
 					}
 				}
 			}
 		}
+		removeDynamicMenuContributions(menuManager, menuModel, toBeRemoved);
 	}
 
 	private void unlinkMenu(MMenu menu) {