Bug 301583 Reconciler chokes on changes of transient features
This has never happened before...but it's happening now. java.lang.RuntimeException: java.lang.IllegalArgumentException: The datatype 'IEclipseContext' is not a valid classifier at org.eclipse.e4.workbench.ui.internal.ResourceHandler.save(ResourceHandler.java:140) at org.eclipse.e4.ui.workbench.swt.internal.E4Application.saveModel(E4Application.java:116) at org.eclipse.e4.ui.workbench.swt.internal.E4Application.start(E4Application.java:107) at org.eclipse.pde.internal.junit.runtime.UITestApplication.start(UITestApplication.java:47) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:367) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37) at java.lang.reflect.Method.invoke(Method.java:600) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:611) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:566) at org.eclipse.equinox.launcher.Main.run(Main.java:1363) at org.eclipse.equinox.launcher.Main.main(Main.java:1339) Caused by: java.lang.IllegalArgumentException: The datatype 'IEclipseContext' is not a valid classifier at org.eclipse.e4.ui.model.application.impl.ApplicationFactoryImpl.createFromString(ApplicationFactoryImpl.java:117) at org.eclipse.emf.ecore.util.EcoreUtil.createFromString(EcoreUtil.java:3259) at org.eclipse.emf.ecore.change.impl.FeatureChangeImpl.getValue(FeatureChangeImpl.java:432) at org.eclipse.emf.ecore.change.util.BasicChangeRecorder.eliminateEmptyChanges(BasicChangeRecorder.java:152) at org.eclipse.emf.ecore.change.util.BasicChangeRecorder.consolidateChanges(BasicChangeRecorder.java:132) at org.eclipse.emf.ecore.change.util.ChangeRecorder.consolidateChanges(ChangeRecorder.java:224) at org.eclipse.emf.ecore.change.util.BasicChangeRecorder.endRecording(BasicChangeRecorder.java:106) at org.eclipse.e4.workbench.ui.internal.XMLModelReconciler.calculateDeltas(XMLModelReconciler.java:717) at org.eclipse.e4.workbench.ui.internal.XMLModelReconciler.serialize(XMLModelReconciler.java:723) at org.eclipse.e4.workbench.ui.internal.ResourceHandler.save(ResourceHandler.java:128) ... 16 more
bundles/org.eclipse.e4.ui.workbench/src/org/eclipse/e4/workbench/ui/internal/XMLModelReconciler.java
if (!handlersChanged) {
				return reference.eContainer();
			}
		}
		if (reference instanceof MKeyBinding) {
			EMap<EObject, EList<FeatureChange>> objectChanges = changeDescription
					.getObjectChanges();
			boolean bindingsChanged = false;
			for (Entry<EObject, EList<FeatureChange>> entry : objectChanges.entrySet()) {
				EObject key = entry.getKey();
				if (key instanceof MBindingContainer) {
					for (FeatureChange change : entry.getValue()) {
						if (change.getFeatureName().equals(BINDINGCONTAINER_BINDINGS_ATTNAME)) {
							List<?> commands = (List<?>) change.getValue();
							for (Object command : commands) {
								if (command == reference) {
									return key;
								}
							}
							bindingsChanged = true;
							break;
						}
					}
				}
			}
			if (!bindingsChanged) {
				return reference.eContainer();
			}
		}
		if (reference instanceof MUIElement) {