### 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.661 diff -u -r1.661 JavaCore.java --- model/org/eclipse/jdt/core/JavaCore.java 18 Apr 2011 10:09:25 -0000 1.661 +++ model/org/eclipse/jdt/core/JavaCore.java 19 Apr 2011 08:30:43 -0000 @@ -3530,8 +3530,6 @@ // initialize all containers and variables JavaModelManager manager = JavaModelManager.getJavaModelManager(); - ExternalFoldersManager externalFoldersManager = JavaModelManager.getExternalManager(); - externalFoldersManager.createExternalFoldersProject(monitor); SubProgressMonitor subMonitor = null; try { if (monitor != null) { @@ -3569,6 +3567,7 @@ monitor.subTask(Messages.javamodel_resetting_source_attachment_properties); final IJavaProject[] projects = manager.getJavaModel().getJavaProjects(); HashSet visitedPaths = new HashSet(); + ExternalFoldersManager externalFoldersManager = JavaModelManager.getExternalManager(); for (int i = 0, length = projects.length; i < length; i++) { JavaProject javaProject = (JavaProject) projects[i]; IClasspathEntry[] classpath; @@ -3597,7 +3596,13 @@ } } } - externalFoldersManager.createPendingFolders(monitor); + try { + externalFoldersManager.createPendingFolders(monitor); + } + catch(JavaModelException jme) { + // Creation of external folder project failed. Log it and continue; + Util.log(jme, "Error while processing external folders"); //$NON-NLS-1$ + } // 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.22 diff -u -r1.22 ExternalFoldersManager.java --- model/org/eclipse/jdt/internal/core/ExternalFoldersManager.java 18 Apr 2011 09:57:07 -0000 1.22 +++ model/org/eclipse/jdt/internal/core/ExternalFoldersManager.java 19 Apr 2011 08:30:43 -0000 @@ -141,6 +141,12 @@ public IFolder createLinkFolder(IPath externalFolderPath, boolean refreshIfExistAlready, IProgressMonitor monitor) throws CoreException { IProject externalFoldersProject = createExternalFoldersProject(monitor); // run outside synchronized as this can create a resource + return createLinkFolder(externalFolderPath, refreshIfExistAlready, externalFoldersProject, monitor); + } + + private IFolder createLinkFolder(IPath externalFolderPath, boolean refreshIfExistAlready, + IProject externalFoldersProject, IProgressMonitor monitor) throws CoreException { + IFolder result = addFolder(externalFolderPath, externalFoldersProject, false); if (!result.exists()) result.createLink(externalFolderPath, IResource.ALLOW_MISSING_LOCAL, monitor); @@ -150,14 +156,22 @@ } public void createPendingFolders(IProgressMonitor monitor) throws JavaModelException{ - if (this.pendingFolders == null) return; + if (this.pendingFolders == null || this.pendingFolders.isEmpty()) return; + + IProject externalFoldersProject = null; + try { + externalFoldersProject = createExternalFoldersProject(monitor); + } + catch(CoreException e) { + throw new JavaModelException(e); + } Iterator iterator = this.pendingFolders.iterator(); while (iterator.hasNext()) { Object folderPath = iterator.next(); try { - createLinkFolder((IPath) folderPath, false, monitor); + createLinkFolder((IPath) folderPath, false, externalFoldersProject, monitor); } catch (CoreException e) { - throw new JavaModelException(e); + continue; } } this.pendingFolders.clear();