[nobug] JS Threading issues with 2 simultaneous creations of emf contexts.
diff --git a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EMFWorkbenchEditContextFactory.java b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EMFWorkbenchEditContextFactory.java
index 7131dae..33b554e 100644
--- a/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EMFWorkbenchEditContextFactory.java
+++ b/plugins/org.eclipse.wst.common.emfworkbench.integration/src/org/eclipse/wst/common/internal/emfworkbench/edit/EMFWorkbenchEditContextFactory.java
@@ -16,10 +16,16 @@
  */
 package org.eclipse.wst.common.internal.emfworkbench.edit;
 
+import java.util.Hashtable;
+import java.util.Map;
+
+import org.eclipse.core.internal.jobs.LockManager;
 import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.jobs.ILock;
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.jem.internal.util.emf.workbench.EMFWorkbenchContextFactory;
 import org.eclipse.jem.util.emf.workbench.EMFWorkbenchContextBase;
+import org.eclipse.jem.util.emf.workbench.IEMFContextContributor;
 import org.eclipse.jem.util.emf.workbench.ResourceSetWorkbenchSynchronizer;
 import org.eclipse.wst.common.internal.emfworkbench.EMFWorkbenchContext;
 import org.eclipse.wst.common.internal.emfworkbench.integration.ResourceSetWorkbenchEditSynchronizer;
@@ -31,6 +37,8 @@
  * Window>Preferences>Java>Code Generation>Code and Comments
  */
 public class EMFWorkbenchEditContextFactory extends EMFWorkbenchContextFactory {
+	
+	
 	/**
 	 *  
 	 */
@@ -45,4 +53,50 @@
 	public ResourceSetWorkbenchSynchronizer createSynchronizer(ResourceSet aResourceSet, IProject aProject) {
 		return new ResourceSetWorkbenchEditSynchronizer(aResourceSet, aProject);
 	}
+	
+	protected static LockManager lockManager = new LockManager();
+	protected static Map projectLocks = new Hashtable();
+
+	protected static ILock getProjectLockObject(IProject aProject){
+		if(null == aProject){
+			return null;
+		}
+		Integer hashCode = new Integer(aProject.hashCode());
+		synchronized (projectLocks) {
+			ILock lock = (ILock)projectLocks.get(hashCode);
+			if(lock == null){
+				lock = lockManager.newLock();
+				projectLocks.put(hashCode, lock);
+			}
+			return lock;
+		}
+	}
+	
+	public EMFWorkbenchContextBase createEMFContext(IProject aProject, IEMFContextContributor contributor) {
+		ILock lock = getProjectLockObject(aProject);
+		try{
+			if(null != lock){
+				lock.acquire();
+			}
+			return super.createEMFContext(aProject, contributor);
+		} finally{
+			if(null != lock){
+				lock.release();
+			}
+		}
+	}
+	
+	protected EMFWorkbenchContextBase getCachedEMFContext(IProject aProject) {
+		ILock lock = getProjectLockObject(aProject);
+		try{
+			if(null != lock){
+				lock.acquire();
+			}
+			return super.getCachedEMFContext(aProject);
+		} finally{
+			if(null != lock){
+				lock.release();
+			}
+		}
+	}
 }