### Eclipse Workspace Patch 1.0
#P org.eclipse.jdt.core
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.10
diff -u -r1.10 ExternalFoldersManager.java
--- model/org/eclipse/jdt/internal/core/ExternalFoldersManager.java 19 Aug 2008 15:41:13 -0000 1.10
+++ model/org/eclipse/jdt/internal/core/ExternalFoldersManager.java 24 Sep 2008 14:09:27 -0000
@@ -22,6 +22,7 @@
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
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;
@@ -160,36 +161,39 @@
if (!project.isAccessible()) {
try {
if (!project.exists()) {
- IProjectDescription desc = project.getWorkspace().newProjectDescription(project.getName());
- IPath stateLocation = JavaCore.getPlugin().getStateLocation();
- desc.setLocation(stateLocation.append(EXTERNAL_PROJECT_NAME));
- project.create(DEBUG ? null : desc, DEBUG ? IResource.NONE : IResource.HIDDEN, monitor);
+ createExternalFoldersProject(project, monitor);
}
try {
project.open(monitor);
} catch (CoreException e1) {
- // .project or folder on disk have been deleted, recreate them
- IPath stateLocation = DEBUG ? ResourcesPlugin.getWorkspace().getRoot().getLocation() : JavaCore.getPlugin().getStateLocation();
- IPath projectPath = stateLocation.append(EXTERNAL_PROJECT_NAME);
- projectPath.toFile().mkdirs();
- FileOutputStream output = new FileOutputStream(projectPath.append(".project").toOSString()); //$NON-NLS-1$
- try {
- output.write((
- "\n" + //$NON-NLS-1$
- "\n" + //$NON-NLS-1$
- " " + EXTERNAL_PROJECT_NAME + "\n" + //$NON-NLS-1$ //$NON-NLS-2$
- " \n" + //$NON-NLS-1$
- " \n" + //$NON-NLS-1$
- " \n" + //$NON-NLS-1$
- " \n" + //$NON-NLS-1$
- " \n" + //$NON-NLS-1$
- " \n" + //$NON-NLS-1$
- " \n" + //$NON-NLS-1$
- "").getBytes()); //$NON-NLS-1$
- } finally {
- output.close();
- }
- project.open(null);
+ if (e1.getStatus().getCode() == IResourceStatus.FAILED_READ_METADATA) {
+ // workspace was moved (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=241400)
+ project.delete(true, monitor);
+ createExternalFoldersProject(project, monitor);
+ } else {
+ // .project or folder on disk have been deleted, recreate them
+ IPath stateLocation = DEBUG ? ResourcesPlugin.getWorkspace().getRoot().getLocation() : JavaCore.getPlugin().getStateLocation();
+ IPath projectPath = stateLocation.append(EXTERNAL_PROJECT_NAME);
+ projectPath.toFile().mkdirs();
+ FileOutputStream output = new FileOutputStream(projectPath.append(".project").toOSString()); //$NON-NLS-1$
+ try {
+ output.write((
+ "\n" + //$NON-NLS-1$
+ "\n" + //$NON-NLS-1$
+ " " + EXTERNAL_PROJECT_NAME + "\n" + //$NON-NLS-1$ //$NON-NLS-2$
+ " \n" + //$NON-NLS-1$
+ " \n" + //$NON-NLS-1$
+ " \n" + //$NON-NLS-1$
+ " \n" + //$NON-NLS-1$
+ " \n" + //$NON-NLS-1$
+ " \n" + //$NON-NLS-1$
+ " \n" + //$NON-NLS-1$
+ "").getBytes()); //$NON-NLS-1$
+ } finally {
+ output.close();
+ }
+ }
+ project.open(monitor);
}
} catch (CoreException e) {
Util.log(e, "Problem creating hidden project for external folders"); //$NON-NLS-1$
@@ -202,6 +206,14 @@
return project;
}
+
+ private void createExternalFoldersProject(IProject project, IProgressMonitor monitor) throws CoreException {
+ IProjectDescription desc = project.getWorkspace().newProjectDescription(project.getName());
+ IPath stateLocation = JavaCore.getPlugin().getStateLocation();
+ desc.setLocation(stateLocation.append(EXTERNAL_PROJECT_NAME));
+ project.create(DEBUG ? null : desc, DEBUG ? IResource.NONE : IResource.HIDDEN, monitor);
+ }
+
public synchronized IFolder getFolder(IPath externalFolderPath) {
return (IFolder) getFolders().get(externalFolderPath);
}