Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 118646 Details for
Bug 252571
[buildpath] External folder appears empty after workspace move
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Proposed fix
252571.txt (text/plain), 6.22 KB, created by
Jerome Lanneluc
on 2008-11-25 05:23:00 EST
(
hide
)
Description:
Proposed fix
Filename:
MIME Type:
Creator:
Jerome Lanneluc
Created:
2008-11-25 05:23:00 EST
Size:
6.22 KB
patch
obsolete
>### 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.12 >diff -u -r1.12 ExternalFoldersManager.java >--- model/org/eclipse/jdt/internal/core/ExternalFoldersManager.java 24 Sep 2008 16:28:14 -0000 1.12 >+++ model/org/eclipse/jdt/internal/core/ExternalFoldersManager.java 25 Nov 2008 10:19:39 -0000 >@@ -162,46 +162,55 @@ > if (!project.exists()) { > createExternalFoldersProject(project, monitor); > } >- try { >- project.open(monitor); >- } catch (CoreException e1) { >- 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); >+ openExternalFoldersProject(project, monitor); >+ } >+ return project; >+ } >+ >+ /* >+ * Attempt to open the given project (assuming it exists). >+ * If failing to open, make all attempts to recreate the missing pieces. >+ */ >+ private void openExternalFoldersProject(IProject project, IProgressMonitor monitor) throws CoreException { >+ try { >+ project.open(monitor); >+ } catch (CoreException e1) { >+ if (e1.getStatus().getCode() == IResourceStatus.FAILED_READ_METADATA) { >+ // workspace was moved >+ // (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=241400 and https://bugs.eclipse.org/bugs/show_bug.cgi?id=252571 ) >+ project.delete(false/*don't delete content*/, true/*force*/, 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(); >+ try { >+ FileOutputStream output = new FileOutputStream(projectPath.append(".project").toOSString()); //$NON-NLS-1$ >+ try { >+ output.write(( >+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + //$NON-NLS-1$ >+ "<projectDescription>\n" + //$NON-NLS-1$ >+ " <name>" + EXTERNAL_PROJECT_NAME + "</name>\n" + //$NON-NLS-1$ //$NON-NLS-2$ >+ " <comment></comment>\n" + //$NON-NLS-1$ >+ " <projects>\n" + //$NON-NLS-1$ >+ " </projects>\n" + //$NON-NLS-1$ >+ " <buildSpec>\n" + //$NON-NLS-1$ >+ " </buildSpec>\n" + //$NON-NLS-1$ >+ " <natures>\n" + //$NON-NLS-1$ >+ " </natures>\n" + //$NON-NLS-1$ >+ "</projectDescription>").getBytes()); //$NON-NLS-1$ >+ } finally { >+ output.close(); >+ } >+ } catch (IOException e) { >+ // fallback to re-creating the project >+ project.delete(false/*don't delete content*/, true/*force*/, 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(); >- try { >- FileOutputStream output = new FileOutputStream(projectPath.append(".project").toOSString()); //$NON-NLS-1$ >- try { >- output.write(( >- "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + //$NON-NLS-1$ >- "<projectDescription>\n" + //$NON-NLS-1$ >- " <name>" + EXTERNAL_PROJECT_NAME + "</name>\n" + //$NON-NLS-1$ //$NON-NLS-2$ >- " <comment></comment>\n" + //$NON-NLS-1$ >- " <projects>\n" + //$NON-NLS-1$ >- " </projects>\n" + //$NON-NLS-1$ >- " <buildSpec>\n" + //$NON-NLS-1$ >- " </buildSpec>\n" + //$NON-NLS-1$ >- " <natures>\n" + //$NON-NLS-1$ >- " </natures>\n" + //$NON-NLS-1$ >- "</projectDescription>").getBytes()); //$NON-NLS-1$ >- } finally { >- output.close(); >- } >- } catch (IOException e) { >- // fallback to re-creating the project >- project.delete(true, monitor); >- createExternalFoldersProject(project, monitor); >- } > } >- project.open(monitor); > } >+ project.open(monitor); > } >- return project; > } > > >@@ -220,19 +229,26 @@ > if (this.folders == null) { > this.folders = new HashMap(); > IProject project = getExternalFoldersProject(); >- if (project.isAccessible()) { >- try { >- IResource[] members = project.members(); >- for (int i = 0, length = members.length; i < length; i++) { >- IResource member = members[i]; >- if (member.getType() == IResource.FOLDER && member.isLinked() && member.getName().startsWith(LINKED_FOLDER_NAME)) { >- IPath externalFolderPath = member.getLocation(); >- this.folders.put(externalFolderPath, member); >- } >+ try { >+ if (!project.isAccessible()) { >+ if (project.exists()) { >+ // workspace was moved (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=252571 ) >+ openExternalFoldersProject(project, null/*no progress*/); >+ } else { >+ // if project doesn't exist, do not open and recreate it as it means that there are no external folders >+ return this.folders; >+ } >+ } >+ IResource[] members = project.members(); >+ for (int i = 0, length = members.length; i < length; i++) { >+ IResource member = members[i]; >+ if (member.getType() == IResource.FOLDER && member.isLinked() && member.getName().startsWith(LINKED_FOLDER_NAME)) { >+ IPath externalFolderPath = member.getLocation(); >+ this.folders.put(externalFolderPath, member); > } >- } catch (CoreException e) { >- Util.log(e, "Exception while initializing external folders"); //$NON-NLS-1$ > } >+ } catch (CoreException e) { >+ Util.log(e, "Exception while initializing external folders"); //$NON-NLS-1$ > } > } > return this.folders;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 252571
: 118646