Merge tag "merger_01102006" from HEAD (3.1.1)
diff --git a/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/util/FileSystemUtil.java b/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/util/FileSystemUtil.java
index 2cb0c0e..a378c94 100644
--- a/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/util/FileSystemUtil.java
+++ b/org.eclipse.jdt.apt.core/src/org/eclipse/jdt/apt/core/internal/util/FileSystemUtil.java
@@ -51,24 +51,22 @@
         }
     }    
   
-    public static void makeDerivedParentFolders (IContainer container) throws CoreException {
+    public static synchronized void makeDerivedParentFolders (IContainer container) throws CoreException {
     	// synchronize the "does it exist - if not, create it" sequence.
-    	synchronized(container.getProject()) {
-			if ((container instanceof IFolder) && !container.exists()) {
-				makeDerivedParentFolders(container.getParent());
-		    	try {
-		    		((IFolder)container).create(true, true, null);
-		    	}
-		    	catch (CoreException e) {
-		    		// Ignore race condition where another thread created the folder at the
-		    		// same time, causing checkDoesNotExist() to throw within create(). 
-		    		if (!container.exists()) {
-		    			throw e;
-		    		}
-		    	}
-				container.setDerived(true);
-			}
-    	}
+		if ((container instanceof IFolder) && !container.exists()) {
+			makeDerivedParentFolders(container.getParent());
+	    	try {
+	    		((IFolder)container).create(true, true, null);
+	    	}
+	    	catch (CoreException e) {
+	    		// Ignore race condition where another thread created the folder at the
+	    		// same time, causing checkDoesNotExist() to throw within create(). 
+	    		if (!container.exists()) {
+	    			throw e;
+	    		}
+	    	}
+			container.setDerived(true);
+		}
     }
     
     /**