### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core Index: model/org/eclipse/jdt/internal/core/SetContainerOperation.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SetContainerOperation.java,v retrieving revision 1.13 diff -u -r1.13 SetContainerOperation.java --- model/org/eclipse/jdt/internal/core/SetContainerOperation.java 4 Feb 2010 07:31:23 -0000 1.13 +++ model/org/eclipse/jdt/internal/core/SetContainerOperation.java 8 Apr 2010 09:34:15 -0000 @@ -10,12 +10,9 @@ *******************************************************************************/ package org.eclipse.jdt.internal.core; -import org.eclipse.core.resources.IResourceRuleFactory; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.jobs.ISchedulingRule; -import org.eclipse.core.runtime.jobs.MultiRule; import org.eclipse.jdt.core.IClasspathContainer; import org.eclipse.jdt.core.IClasspathEntry; import org.eclipse.jdt.core.IJavaElement; @@ -143,23 +140,6 @@ } } - protected ISchedulingRule getSchedulingRule() { - if (this.canChangeResources) { - int length = this.affectedProjects.length; - IResourceRuleFactory ruleFactory = ResourcesPlugin.getWorkspace().getRuleFactory(); - ISchedulingRule[] rules = new ISchedulingRule[length + 1]; - - for (int index = 0; index < length; index++) { - rules[index] = ruleFactory.modifyRule(this.affectedProjects[index].getProject()); - } - // External folders might get changed inside ChangeClasspathOperation.classpathChanged(ClasspathChange) - rules[length] = ruleFactory.modifyRule(JavaModelManager.getExternalManager().getExternalFoldersProject()); - - return new MultiRule(rules); - } - return super.getSchedulingRule(); - } - private void verbose_failure(CoreException e) { Util.verbose( "CPContainer SET - FAILED DUE TO EXCEPTION\n" + //$NON-NLS-1$ Index: model/org/eclipse/jdt/internal/core/UserLibraryManager.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/UserLibraryManager.java,v retrieving revision 1.19 diff -u -r1.19 UserLibraryManager.java --- model/org/eclipse/jdt/internal/core/UserLibraryManager.java 4 Feb 2010 07:31:23 -0000 1.19 +++ model/org/eclipse/jdt/internal/core/UserLibraryManager.java 8 Apr 2010 09:34:15 -0000 @@ -152,34 +152,37 @@ } public void removeUserLibrary(String libName) { - IEclipsePreferences instancePreferences = JavaModelManager.getJavaModelManager().getInstancePreferences(); - String propertyName = CP_USERLIBRARY_PREFERENCES_PREFIX+libName; - instancePreferences.remove(propertyName); - try { - instancePreferences.flush(); - } catch (BackingStoreException e) { - Util.log(e, "Exception while removing user library " + libName); //$NON-NLS-1$ + synchronized (this.userLibraries) { + IEclipsePreferences instancePreferences = JavaModelManager.getJavaModelManager().getInstancePreferences(); + String propertyName = CP_USERLIBRARY_PREFERENCES_PREFIX+libName; + instancePreferences.remove(propertyName); + try { + instancePreferences.flush(); + } catch (BackingStoreException e) { + Util.log(e, "Exception while removing user library " + libName); //$NON-NLS-1$ + } } - // No need to lock this.userLibraries since SetContainerOperation uses ISchedulingRule now. + // this.userLibraries was updated during the PreferenceChangeEvent (see preferenceChange(...)) } - public void setUserLibrary(String libName, IClasspathEntry[] entries, boolean isSystemLibrary) { - IEclipsePreferences instancePreferences = JavaModelManager.getJavaModelManager().getInstancePreferences(); - String propertyName = CP_USERLIBRARY_PREFERENCES_PREFIX + libName; - try { - String propertyValue = UserLibrary.serialize(entries, isSystemLibrary); - instancePreferences.put(propertyName, propertyValue); // sends out a PreferenceChangeEvent (see - // preferenceChange(...)) - } catch (IOException e) { - Util.log(e, "Exception while serializing user library " + libName); //$NON-NLS-1$ - return; + public void setUserLibrary(String libName, IClasspathEntry[] entries, boolean isSystemLibrary) { + synchronized (this.userLibraries) { + IEclipsePreferences instancePreferences = JavaModelManager.getJavaModelManager().getInstancePreferences(); + String propertyName = CP_USERLIBRARY_PREFERENCES_PREFIX+libName; + try { + String propertyValue = UserLibrary.serialize(entries, isSystemLibrary); + instancePreferences.put(propertyName, propertyValue); // sends out a PreferenceChangeEvent (see preferenceChange(...)) + } catch (IOException e) { + Util.log(e, "Exception while serializing user library " + libName); //$NON-NLS-1$ + return; + } + try { + instancePreferences.flush(); + } catch (BackingStoreException e) { + Util.log(e, "Exception while saving user library " + libName); //$NON-NLS-1$ + } } - try { - instancePreferences.flush(); - } catch (BackingStoreException e) { - Util.log(e, "Exception while saving user library " + libName); //$NON-NLS-1$ - } - // No need to lock this.userLibraries since SetContainerOperation uses ISchedulingRule now. + // this.userLibraries was updated during the PreferenceChangeEvent (see preferenceChange(...)) } }