### Eclipse Workspace Patch 1.0 #P org.eclipse.wst.common.modulecore diff --git modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentImplManager.java modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentImplManager.java index 58f80d4..d359288 100644 --- modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentImplManager.java +++ modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentImplManager.java @@ -25,6 +25,7 @@ import org.eclipse.core.runtime.ISafeRunnable; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.SafeRunner; +import org.eclipse.core.runtime.jobs.ILock; import org.eclipse.jem.util.RegistryReader; import org.eclipse.jem.util.emf.workbench.ISynchronizerExtender; import org.eclipse.jem.util.emf.workbench.ProjectResourceSet; @@ -37,6 +38,7 @@ import org.eclipse.wst.common.componentcore.internal.resources.VirtualFolder; import org.eclipse.wst.common.componentcore.resources.IVirtualComponent; import org.eclipse.wst.common.componentcore.resources.IVirtualFolder; +import org.eclipse.wst.common.internal.emfworkbench.edit.EMFWorkbenchEditContextFactory; import org.eclipse.wst.common.project.facet.core.IFacetedProject; import org.eclipse.wst.common.project.facet.core.IProjectFacet; import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion; @@ -211,13 +213,24 @@ } IComponentImplFactory factory = findFactoryForProject(project, descriptors); + // acquire the lock that StructureEdit will need already, to prevent others from locking that before calling createComponent() - see bug 508685 if(null != factory){ - component = factory.createComponent(project); - if(component != null) { - ComponentCacheManager.instance().setComponent(project, component); - registerListener(project); + ILock lock = EMFWorkbenchEditContextFactory.getProjectLockObject(project); + try{ + if(null != lock){ + lock.acquire(); + } + component = factory.createComponent(project); + if(component != null) { + ComponentCacheManager.instance().setComponent(project, component); + registerListener(project); + } + return component; + } finally{ + if(null != lock){ + lock.release(); + } } - return component; } } catch (Exception e) { // Just return a default component