### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core Index: model/org/eclipse/jdt/core/JavaCore.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java,v retrieving revision 1.659 diff -u -r1.659 JavaCore.java --- model/org/eclipse/jdt/core/JavaCore.java 16 Jan 2011 22:43:21 -0000 1.659 +++ model/org/eclipse/jdt/core/JavaCore.java 15 Apr 2011 13:44:11 -0000 @@ -3530,6 +3530,8 @@ // initialize all containers and variables JavaModelManager manager = JavaModelManager.getJavaModelManager(); + ExternalFoldersManager externalFoldersManager = JavaModelManager.getExternalManager(); + externalFoldersManager.createExternalFoldersProject(monitor); SubProgressMonitor subMonitor = null; try { if (monitor != null) { @@ -3565,7 +3567,6 @@ // and recreate links for external folders if needed if (monitor != null) monitor.subTask(Messages.javamodel_resetting_source_attachment_properties); - ExternalFoldersManager externalFoldersManager = JavaModelManager.getExternalManager(); final IJavaProject[] projects = manager.getJavaModel().getJavaProjects(); HashSet visitedPaths = new HashSet(); for (int i = 0, length = projects.length; i < length; i++) { @@ -3591,15 +3592,13 @@ if (!needExternalFolderCreation && entry.getEntryKind() == IClasspathEntry.CPE_LIBRARY) { IPath entryPath = entry.getPath(); if (ExternalFoldersManager.isExternalFolderPath(entryPath) && externalFoldersManager.getFolder(entryPath) == null) { - needExternalFolderCreation = true; + externalFoldersManager.addFolder(entryPath, true); } } } - if (needExternalFolderCreation) - manager.deltaState.addExternalFolderChange(javaProject, null/*act as if all external folders were new*/); } } - + externalFoldersManager.createPendingFolders(monitor); // initialize delta state if (monitor != null) monitor.subTask(Messages.javamodel_initializing_delta_state); Index: model/org/eclipse/jdt/internal/core/ExternalFoldersManager.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ExternalFoldersManager.java,v retrieving revision 1.21 diff -u -r1.21 ExternalFoldersManager.java --- model/org/eclipse/jdt/internal/core/ExternalFoldersManager.java 3 Sep 2010 05:13:44 -0000 1.21 +++ model/org/eclipse/jdt/internal/core/ExternalFoldersManager.java 15 Apr 2011 13:44:11 -0000 @@ -38,6 +38,7 @@ import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jdt.core.IClasspathEntry; import org.eclipse.jdt.core.JavaCore; +import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.internal.core.util.Messages; import org.eclipse.jdt.internal.core.util.Util; @@ -148,6 +149,20 @@ return result; } + public void createPendingFolders(IProgressMonitor monitor) throws JavaModelException{ + if (this.pendingFolders == null) return; + Iterator iterator = this.pendingFolders.iterator(); + while (iterator.hasNext()) { + Object folderPath = iterator.next(); + try { + createLinkFolder((IPath) folderPath, false, monitor); + } catch (CoreException e) { + throw new JavaModelException(e); + } + } + this.pendingFolders.clear(); + } + public void cleanUp(IProgressMonitor monitor) throws CoreException { ArrayList toDelete = getFoldersToCleanUp(monitor); if (toDelete == null) @@ -193,7 +208,7 @@ public IProject getExternalFoldersProject() { return ResourcesPlugin.getWorkspace().getRoot().getProject(EXTERNAL_PROJECT_NAME); } - private IProject createExternalFoldersProject(IProgressMonitor monitor) throws CoreException { + public IProject createExternalFoldersProject(IProgressMonitor monitor) throws CoreException { IProject project = getExternalFoldersProject(); if (!project.isAccessible()) { if (!project.exists()) {