### Eclipse Workspace Patch 1.0 #P org.eclipse.wst.common.modulecore diff --git modulecore-src/org/eclipse/wst/common/componentcore/ComponentCore.java modulecore-src/org/eclipse/wst/common/componentcore/ComponentCore.java index 36e4a5c..5734c84 100644 --- modulecore-src/org/eclipse/wst/common/componentcore/ComponentCore.java +++ modulecore-src/org/eclipse/wst/common/componentcore/ComponentCore.java @@ -16,6 +16,7 @@ import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.jobs.ILock; import org.eclipse.wst.common.componentcore.internal.ComponentResource; import org.eclipse.wst.common.componentcore.internal.ModulecorePlugin; import org.eclipse.wst.common.componentcore.internal.StructureEdit; @@ -29,6 +30,7 @@ import org.eclipse.wst.common.componentcore.resources.IVirtualFolder; import org.eclipse.wst.common.componentcore.resources.IVirtualReference; import org.eclipse.wst.common.componentcore.resources.IVirtualResource; +import org.eclipse.wst.common.internal.emfworkbench.edit.EMFWorkbenchEditContextFactory; /** * Provides a handle creation factory for the Virtual Path API. Clients may use @@ -81,7 +83,20 @@ if (aProject == null || !aProject.isAccessible()){ return null; } - return ComponentImplManager.instance().createComponent(aProject, checkForComponentFile); + IVirtualComponent retVal = null; + // acquire the lock that StructureEdit will need already, to prevent others from locking that before calling createComponent() - see bug 508685 + ILock lock = EMFWorkbenchEditContextFactory.getProjectLockObject(aProject); + try{ + if(null != lock){ + lock.acquire(); + } + retVal = ComponentImplManager.instance().createComponent(aProject, checkForComponentFile); + } finally{ + if(null != lock){ + lock.release(); + } + } + return retVal; } /**