Bug 278212 [Compatibility] stack overflow when using Open Declaration
diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/workbench/ui/renderers/swt/StackModelFactory.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/workbench/ui/renderers/swt/StackModelFactory.java
index bb724c0..8ef9fb9 100644
--- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/workbench/ui/renderers/swt/StackModelFactory.java
+++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/workbench/ui/renderers/swt/StackModelFactory.java
@@ -16,6 +16,7 @@
 import org.eclipse.e4.core.services.context.IEclipseContext;
 import org.eclipse.e4.core.services.context.spi.IContextConstants;
 import org.eclipse.e4.ui.model.application.ApplicationPackage;
+import org.eclipse.e4.ui.model.application.MContribution;
 import org.eclipse.e4.ui.model.application.MItemPart;
 import org.eclipse.e4.ui.model.application.MMenu;
 import org.eclipse.e4.ui.model.application.MPart;
@@ -325,7 +326,16 @@
 						// that logic expects this
 						Control ctrl = item.getControl();
 						if (ctrl == null) {
-							renderer.createGui(selPart);
+							if (selPart instanceof MContribution) {
+								// if the MContribution has an object, that
+								// means
+								// we're in the middle of creating it
+								if (((MContribution) selPart).getObject() == null) {
+									renderer.createGui(selPart);
+								}
+							} else {
+								renderer.createGui(selPart);
+							}
 						}
 
 						ctf.setSelection(item);