Bug 264899 Replace context name with computable debug string
Contexts currently are required to have a name, but this string is only used for debugging purposes. We should instead store this "debug string" in the context itself, allowing clients to use a computed value to add additional debug information. We can make this name optional by supplying a default value, which simplifies life for clients that don't care about the name (much as toString() is optional and a default is provided for those who don't care to implement it).
bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/workbench/ui/internal/Workbench.java
.createExecutableExtension("class"); 
					String apiClassname = serviceElement.getAttribute("api"); 
					mainContext.set(apiClassname, factory);
				}
			} catch (CoreException e) {
				
				e.printStackTrace();
			}
		}
		mainContext.set(IWorkbench.class.getName(), this);
		mainContext.set(IExceptionHandler.class.getName(), exceptionHandler);
		mainContext.set(ResourceUtility.class.getName(), resourceUtility);
		mainContext.set(IExtensionRegistry.class.getName(), registry);
		mainContext.set(IServiceConstants.SELECTION, new ActiveChildOutputValue(IServiceConstants.SELECTION));
		mainContext.set(IServiceConstants.INPUT, new ComputedValue() {
			public Object compute(IEclipseContext context, Object[] arguments) {
							Class adapterType = null;
							if (arguments.length > 0 && arguments[0] instanceof Class) {
								adapterType = (Class) arguments[0];
							}
							Object newInput = null;
							Object newValue = mainContext.get(IServiceConstants.SELECTION);
							if (newValue instanceof IStructuredSelection) {
								newValue = ((IStructuredSelection) newValue)
										.getFirstElement();
							}
							if (adapterType == null || adapterType.isInstance(newValue)) {
								newInput = newValue;
							} else if (newValue != null && adapterType != null) {
								Object adapted = Platform.getAdapterManager().loadAdapter(newValue,