493295: prevent failure when trying to create a folder that already exists

Change-Id: Ia0ad60fddac839ab5f6e49835953f953770ff717
Signed-off-by: Fred Bricon <fbricon@gmail.com>
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/M2EUtils.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/M2EUtils.java
index f0a01d9..b68edb9 100644
--- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/M2EUtils.java
+++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/M2EUtils.java
@@ -23,6 +23,7 @@
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceStatus;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
@@ -66,10 +67,19 @@
       if(parent != null && !parent.exists()) {
         createFolder((IFolder) parent, false, monitor);
       }
-      folder.create(true, true, null);
+      try {
+        if(!folder.exists()) {
+          folder.create(true, true, monitor);
+        }
+      } catch(CoreException ex) {
+        //Don't fail if the resource already exists, in case of a race condition 
+        if(ex.getStatus().getCode() != IResourceStatus.RESOURCE_EXISTS) {
+          throw ex;
+        }
+      }
     }
 
-    if(folder.isAccessible() && derived) {
+    if(folder.isAccessible() && derived && !folder.isDerived()) {
       folder.setDerived(true, monitor);
     }
   }