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
match = createObject(deltas, reference, references);
		}
		return new EMFModelDeltaSet(eObject, feature, match);
	}
	private static Element getFirstElement(NodeList list) {
		for (int i = 0; i < list.getLength(); i++) {
			Node item = list.item(i);
			if (item instanceof Element) {
				return (Element) item;
			}
		}
		return null;
	}
	private ModelDelta createIndirectReferenceDelta(List<Object> references, EObject eObject,
			EStructuralFeature feature, Element node) {
		NodeList referencedIds = (NodeList) node;
		Element reference = getFirstElement(referencedIds);
		String referenceId = reference.getAttribute(APPLICATIONELEMENT_ID_ATTNAME);
		Object match = findReference(references, referenceId);
		if (match == null) {
			return createDelayedDelta(eObject, feature, reference);
		}
		return new EMFModelDeltaSet(eObject, feature, match);
	}
	private ModelDelta createDelayedDelta(EObject object, EStructuralFeature feature,
			Element element) {
		String referenceId = element.getAttribute(XMIID_ATTNAME);
		return new EMFModelDeltaDelayedSet(object, feature, rootObject, referenceId);
	}