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
private static final String XMIID_ATTNAME = "xmiId"; 
	private static final String REFERENCE_ELEMENT_NAME = "reference"; 
	private static final String ORIGINALREFERENCE_ELEMENT_NAME = "originalReference"; 
	/**
	 * The name of the root element that describes the model deltas in XML form (value is
	 * <code>changes</code>).
	 */
	private static final String CHANGES_ATTNAME = "changes"; 
	/**
	 * An attribute for describing the type of the object in question (value is <code>type</code>).
	 */
	private static final String TYPE_ATTNAME = "type"; 
	private static final String UNSET_ATTNAME = "unset"; 
	private static final String UNSET_ATTVALUE_TRUE = "true"; 
	private ChangeRecorder changeRecorder;
	private ChangeDescription changeDescription;
	private EObject rootObject;
	public void recordChanges(Object object) {
		Assert.isNotNull(object);
		rootObject = (EObject) object;
		changeRecorder = new ChangeRecorder(rootObject);
		changeDescription = null;
	}
	static List<Object> getReferences(Object object) {
		Iterator<EObject> it = ((EObject) object).eAllContents();
		List<Object> references = new LinkedList<Object>();
		while (it.hasNext()) {