Revert "Bug 354538 - Window menus and toolbars leaked after having been closed"

This reverts commit 816f3435bbadbbb83fc129292a6de2a291b3c877.

This caused a severe regression: https://bugs.eclipse.org/518036

Change-Id: I4ed90f63b52b51dc3ba7144ad65b4dfed1527ef3
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 2309720..4d9375e 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
@@ -18,7 +18,6 @@
  *     Lars Vogel <Lars.Vogel@vogella.com> - Bug 391430, 472654, 460886
  *     Daniel Kruegler <daniel.kruegler@gmail.com> - Bug 473779
  *     Simon Scholz <simon.scholz@vogella.com> - Bug 506306
- *     Axel Richard <axel.richard@oebo.fr> - Bug 354538
  *******************************************************************************/
 package org.eclipse.e4.ui.workbench.renderers.swt;
 
@@ -885,9 +884,6 @@
 
 	public void clearModelToManager(MMenu model, MenuManager manager) {
 		for (MMenuElement element : model.getChildren()) {
-			if (element instanceof MMenu) {
-				clearModelToManager((MMenu) element, getManager((MMenu) element));
-			}
 			IContributionItem ici = getContribution(element);
 			clearModelToContribution(element, ici);
 		}
@@ -918,12 +914,6 @@
 	}
 
 	public void clearModelToContribution(MMenuElement model, IContributionItem item) {
-		if (model instanceof MMenu) {
-			for (MMenuElement element : ((MMenu) model).getChildren()) {
-				IContributionItem ici = getContribution(element);
-				clearModelToContribution(element, ici);
-			}
-		}
 		modelToContribution.remove(model);
 		contributionToModel.remove(item);
 		if (Policy.DEBUG_RENDERER) {
diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/ToolBarManagerRenderer.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/ToolBarManagerRenderer.java
index b471aca..9950900 100644
--- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/ToolBarManagerRenderer.java
+++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/ToolBarManagerRenderer.java
@@ -15,7 +15,6 @@
  *     Sopot Cela <scela@redhat.com> - Bug 472761
  *     Patrik Suzzi <psuzzi@gmail.com> - Bug 473184
  *     Simon Scholz <simon.scholz@vogella.com> - Bug 506306
- *     Axel Richard <axel.richard@oebo.fr> - Bug 354538
  *******************************************************************************/
 package org.eclipse.e4.ui.workbench.renderers.swt;
 
@@ -837,13 +836,6 @@
 	 * @param manager
 	 */
 	public void clearModelToManager(MToolBar model, ToolBarManager manager) {
-		for (MToolBarElement element : model.getChildren()) {
-			if (element instanceof MToolBar) {
-				clearModelToManager((MToolBar) element, getManager((MToolBar) element));
-			}
-			IContributionItem ici = getContribution(element);
-			clearModelToContribution(element, ici);
-		}
 		modelToManager.remove(model);
 		managerToModel.remove(manager);
 		if (Policy.DEBUG_RENDERER) {
@@ -887,12 +879,6 @@
 	 * @param item
 	 */
 	public void clearModelToContribution(MToolBarElement model, IContributionItem item) {
-		if (model instanceof MToolBar) {
-			for (MToolBarElement element : ((MToolBar) model).getChildren()) {
-				IContributionItem ici = getContribution(element);
-				clearModelToContribution(element, ici);
-			}
-		}
 		modelToContribution.remove(model);
 		contributionToModel.remove(item);
 		if (Policy.DEBUG_RENDERER) {
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java
index 462cf84..b296a9f 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java
@@ -15,7 +15,6 @@
  *     Lars Vogel <Lars.Vogel@vogella.com> - Bug 431446, 433979, 440810, 441184, 472654, 486632
  *     Denis Zygann <d.zygann@web.de> - Bug 457390
  *     Andrey Loskutov <loskutov@gmx.de> - Bug 372799
- *     Axel Richard <axel.richard@obeo.fr> - Bug 354538
  *******************************************************************************/
 
 package org.eclipse.ui.internal;
@@ -33,7 +32,6 @@
 import java.util.Map.Entry;
 import java.util.Set;
 import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
 import javax.inject.Inject;
 import org.eclipse.core.commands.IHandler;
 import org.eclipse.core.expressions.Expression;
@@ -251,10 +249,6 @@
 
 	private ActionBarAdvisor actionBarAdvisor;
 
-	private MenuManagerRenderer renderer;
-
-	private MMenu mainMenu;
-
 	private PageListenerList pageListeners = new PageListenerList();
 
 	private PerspectiveListenerList perspectiveListeners = new PerspectiveListenerList();
@@ -687,10 +681,10 @@
 
 			Shell shell = (Shell) model.getWidget();
 			if (model.getMainMenu() == null) {
-				mainMenu = modelService.createModelElement(MMenu.class);
+				final MMenu mainMenu = modelService.createModelElement(MMenu.class);
 				mainMenu.setElementId(ActionSet.MAIN_MENU);
 
-				renderer = (MenuManagerRenderer) rendererFactory
+				final MenuManagerRenderer renderer = (MenuManagerRenderer) rendererFactory
 						.getRenderer(mainMenu, null);
 				renderer.linkModelToManager(mainMenu, menuManager);
 				fill(renderer, mainMenu, menuManager);
@@ -791,15 +785,6 @@
 		}
 	}
 
-	@PreDestroy
-	void preDestroy() {
-		if (mainMenu != null) {
-			renderer.clearModelToManager(mainMenu, menuManager);
-			mainMenu = null;
-		}
-		renderer = null;
-	}
-
 	private void configureShell(Shell shell, IEclipseContext context) {
 		String title = getWindowConfigurer().basicGetTitle();
 		if (title != null) {
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/CompatibilityView.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/CompatibilityView.java
index d6ae0b1..464492e 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/CompatibilityView.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/CompatibilityView.java
@@ -264,28 +264,23 @@
 				ToolBarManager tbm = (ToolBarManager) actionBars.getToolBarManager();
 				ToolBarManagerRenderer tbmr = (ToolBarManagerRenderer) apr;
 				tbmr.clearModelToManager(toolbar, tbm);
-				clearOpaqueToolBarItems(tbmr, toolbar);
+				// remove opaque mappings
+				for (Iterator<MToolBarElement> it = toolbar.getChildren().iterator(); it.hasNext();) {
+					MToolBarElement element = it.next();
+					if (OpaqueElementUtil.isOpaqueToolItem(element)) {
+						IContributionItem item = tbmr.getContribution(element);
+						if (item != null) {
+							tbmr.clearModelToContribution(element, item);
+						}
+						// clear the reference
+						OpaqueElementUtil.clearOpaqueItem(element);
+						// remove the opaque item
+						it.remove();
+					}
+				}
 			}
 		}
 
 		super.disposeSite(site);
 	}
-
-	private void clearOpaqueToolBarItems(ToolBarManagerRenderer tbmr, MToolBar toolbar) {
-		// remove opaque mappings
-		for (Iterator<MToolBarElement> it = toolbar.getChildren().iterator(); it.hasNext();) {
-			MToolBarElement element = it.next();
-			IContributionItem contribution = tbmr.getContribution(element);
-			if (contribution != null) {
-				tbmr.clearModelToContribution(element, contribution);
-			}
-			if (OpaqueElementUtil.isOpaqueToolItem(element)) {
-				// clear the reference
-				OpaqueElementUtil.clearOpaqueItem(element);
-				// remove the opaque item
-				it.remove();
-			}
-		}
-	}
-
 }