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 175000 Details for
Bug 320618
inconsistent initialization of classpath container backed by external class folder
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
patch version 2
Bug_320618-fix-v2.patch (text/plain), 5.44 KB, created by
Stephan Herrmann
on 2010-07-22 13:05:17 EDT
(
hide
)
Description:
patch version 2
Filename:
MIME Type:
Creator:
Stephan Herrmann
Created:
2010-07-22 13:05:17 EDT
Size:
5.44 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jdt.core >Index: model/org/eclipse/jdt/internal/core/ExternalFolderChange.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ExternalFolderChange.java,v >retrieving revision 1.4 >diff -u -r1.4 ExternalFolderChange.java >--- model/org/eclipse/jdt/internal/core/ExternalFolderChange.java 27 Jun 2008 16:03:51 -0000 1.4 >+++ model/org/eclipse/jdt/internal/core/ExternalFolderChange.java 22 Jul 2010 17:02:16 -0000 >@@ -42,7 +42,7 @@ > Iterator iterator = newFolders.iterator(); > while (iterator.hasNext()) { > Object folderPath = iterator.next(); >- if (oldFolders == null || !oldFolders.remove(folderPath)) { >+ if (oldFolders == null || !oldFolders.remove(folderPath) || foldersManager.isPendingFolder(folderPath)) { > try { > foldersManager.createLinkFolder((IPath) folderPath, refreshIfExistAlready, monitor); > } catch (CoreException e) { >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.19 >diff -u -r1.19 ExternalFoldersManager.java >--- model/org/eclipse/jdt/internal/core/ExternalFoldersManager.java 6 Jul 2010 08:45:52 -0000 1.19 >+++ model/org/eclipse/jdt/internal/core/ExternalFoldersManager.java 22 Jul 2010 17:02:16 -0000 >@@ -20,6 +20,7 @@ > import java.util.HashSet; > import java.util.Iterator; > import java.util.Map; >+import java.util.Set; > import java.util.Vector; > > import org.eclipse.core.resources.IFolder; >@@ -43,6 +44,7 @@ > private static final String EXTERNAL_PROJECT_NAME = ".org.eclipse.jdt.core.external.folders"; //$NON-NLS-1$ > private static final String LINKED_FOLDER_NAME = ".link"; //$NON-NLS-1$ > private Map folders; >+ private Set pendingFolders; // subset of keys of 'folders', for which linked folders haven't been created yet. > private int counter = 0; > /* Singleton instance */ > private static ExternalFoldersManager MANAGER = new ExternalFoldersManager(); >@@ -101,11 +103,11 @@ > return EXTERNAL_PROJECT_NAME.equals(resourcePath.segment(0)); > } > >- public IFolder addFolder(IPath externalFolderPath) { >- return addFolder(externalFolderPath, getExternalFoldersProject()); >+ public IFolder addFolder(IPath externalFolderPath, boolean scheduleForCreation) { >+ return addFolder(externalFolderPath, getExternalFoldersProject(), scheduleForCreation); > } > >- private IFolder addFolder(IPath externalFolderPath, IProject externalFoldersProject) { >+ private IFolder addFolder(IPath externalFolderPath, IProject externalFoldersProject, boolean scheduleForCreation) { > Map knownFolders = getFolders(); > Object existing = knownFolders.get(externalFolderPath); > if (existing != null) { >@@ -115,13 +117,24 @@ > do { > result = externalFoldersProject.getFolder(LINKED_FOLDER_NAME + this.counter++); > } while (result.exists()); >+ if (scheduleForCreation) { >+ if (this.pendingFolders == null) >+ this.pendingFolders = new HashSet(); >+ this.pendingFolders.add(externalFolderPath); >+ } > knownFolders.put(externalFolderPath, result); > return result; > } >+ >+ public boolean isPendingFolder(Object externalPath) { >+ if (this.pendingFolders == null) >+ return false; >+ return this.pendingFolders.remove(externalPath); >+ } > > public IFolder createLinkFolder(IPath externalFolderPath, boolean refreshIfExistAlready, IProgressMonitor monitor) throws CoreException { > IProject externalFoldersProject = createExternalFoldersProject(monitor); // run outside synchronized as this can create a resource >- IFolder result = addFolder(externalFolderPath, externalFoldersProject); >+ IFolder result = addFolder(externalFolderPath, externalFoldersProject, false); > if (!result.exists()) > result.createLink(externalFolderPath, IResource.ALLOW_MISSING_LOCAL, monitor); > else if (refreshIfExistAlready) >@@ -136,6 +149,16 @@ > for (Iterator iterator = toDelete.iterator(); iterator.hasNext();) { > IFolder folder = (IFolder) iterator.next(); > folder.delete(true, monitor); >+ IPath key = null; >+ for (Iterator knownIt = this.folders.entrySet().iterator(); knownIt.hasNext();) { >+ Map.Entry entry = (Map.Entry)knownIt.next(); >+ if (entry.getValue().equals(folder)) { >+ key = (IPath)entry.getKey(); >+ break; >+ } >+ } >+ if (key != null) >+ this.folders.remove(key); > } > IProject project = getExternalFoldersProject(); > if (project.isAccessible() && project.members().length == 1/*remaining member is .project*/) >Index: model/org/eclipse/jdt/internal/core/JavaProject.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaProject.java,v >retrieving revision 1.433 >diff -u -r1.433 JavaProject.java >--- model/org/eclipse/jdt/internal/core/JavaProject.java 27 May 2010 10:10:34 -0000 1.433 >+++ model/org/eclipse/jdt/internal/core/JavaProject.java 22 Jul 2010 17:02:21 -0000 >@@ -2736,7 +2736,7 @@ > } > } > if (resolvedEntry.getEntryKind() == IClasspathEntry.CPE_LIBRARY && ExternalFoldersManager.isExternalFolderPath(resolvedPath)) { >- externalFoldersManager.addFolder(resolvedPath); // no-op if not an external folder or if already registered >+ externalFoldersManager.addFolder(resolvedPath, true/*scheduleForCreation*/); // no-op if not an external folder or if already registered > } > } >
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 320618
:
174961
|
174964
|
174970
|
175000
|
175506
|
177533