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