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) {