diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CElementLabelProvider.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CElementLabelProvider.java index db555899cb7..b25d6af8340 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CElementLabelProvider.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/CElementLabelProvider.java @@ -14,6 +14,7 @@ package org.eclipse.cdt.ui; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.widgets.Display; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.eclipse.cdt.core.model.ICElement; @@ -82,7 +83,7 @@ public class CElementLabelProvider extends LabelProvider { public final static int SHOW_DEFAULT= new Integer(SHOW_PARAMETERS | SHOW_OVERLAY_ICONS).intValue(); - private WorkbenchLabelProvider fWorkbenchLabelProvider; + private volatile WorkbenchLabelProvider fWorkbenchLabelProvider; protected CElementImageProvider fImageLabelProvider; private CUILabelProvider fCElementLabelProvider; @@ -95,7 +96,19 @@ public class CElementLabelProvider extends LabelProvider { } public CElementLabelProvider(int flags) { - fWorkbenchLabelProvider= new WorkbenchLabelProvider(); + // WorkbenchLabelProvider may only be initialized on the UI thread + // http://bugs.eclipse.org/247274 + if (Display.getCurrent() != null) { + fWorkbenchLabelProvider= new WorkbenchLabelProvider(); + } else { + // Delay initialization + CUIPlugin.getStandardDisplay().asyncExec(new Runnable() { + public void run() { + if (fCElementLabelProvider != null) { + fWorkbenchLabelProvider= new WorkbenchLabelProvider(); + } + }}); + } fImageLabelProvider= new CElementImageProvider(); fFlags = flags; @@ -107,7 +120,10 @@ public class CElementLabelProvider extends LabelProvider { if (element instanceof ICElement) { return fCElementLabelProvider.getText(element); } - return fWorkbenchLabelProvider.getText(element); + if (fWorkbenchLabelProvider != null) { + return fWorkbenchLabelProvider.getText(element); + } + return super.getText(element); } @Override