Backport Bug 520269 to WTP 3.6.3
Signed-off-by: John Collier <John.J.Collier@ibm.com>
diff --git a/plugins/org.eclipse.wst.common.modulecore/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.common.modulecore/META-INF/MANIFEST.MF
index e7896d6..446df7a 100644
--- a/plugins/org.eclipse.wst.common.modulecore/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.common.modulecore/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
Bundle-Name: %Bundle-Name.0
Bundle-Vendor: %provider
Bundle-SymbolicName: org.eclipse.wst.common.modulecore; singleton:=true
-Bundle-Version: 1.2.401.qualifier
+Bundle-Version: 1.2.402.qualifier
Bundle-Activator: org.eclipse.wst.common.componentcore.internal.ModulecorePlugin
Bundle-Localization: plugin
Export-Package: org.eclipse.wst.common.componentcore,
diff --git a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentImplManager.java b/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentImplManager.java
index 58f80d4..e85e904 100644
--- a/plugins/org.eclipse.wst.common.modulecore/modulecore-src/org/eclipse/wst/common/componentcore/internal/util/ComponentImplManager.java
+++ b/plugins/org.eclipse.wst.common.modulecore/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;
@@ -203,7 +205,22 @@
return createComponent(project, true);
}
- public synchronized IVirtualComponent createComponent(IProject project, boolean checkSettings) {
+ public IVirtualComponent createComponent(IProject project, boolean checkSettings) {
+ // acquire the lock that StructureEdit will need already, to prevent others from locking that before calling createComponent() - see bug 508685 and bug 511793
+ ILock lock = EMFWorkbenchEditContextFactory.getProjectLockObject(project);
+ try{
+ if(null != lock){
+ lock.acquire();
+ }
+ return createComponentSynchronously(project, checkSettings);
+ } finally{
+ if(null != lock){
+ lock.release();
+ }
+ }
+ }
+
+ private synchronized IVirtualComponent createComponentSynchronously(IProject project, boolean checkSettings) {
try {
IVirtualComponent component = ComponentCacheManager.instance().getComponent(project);
if(component != null) {
diff --git a/plugins/org.eclipse.wst.common.modulecore/pom.xml b/plugins/org.eclipse.wst.common.modulecore/pom.xml
index b6291f8..a0dccc7 100644
--- a/plugins/org.eclipse.wst.common.modulecore/pom.xml
+++ b/plugins/org.eclipse.wst.common.modulecore/pom.xml
@@ -22,6 +22,6 @@
<groupId>org.eclipse.webtools.common</groupId>
<artifactId>org.eclipse.wst.common.modulecore</artifactId>
- <version>1.2.401-SNAPSHOT</version>
+ <version>1.2.402-SNAPSHOT</version>
<packaging>eclipse-plugin</packaging>
</project>