View | Details | Raw Unified | Return to bug 305043 | Differences between
and this patch

Collapse All | Expand All

(-)model/org/eclipse/jdt/internal/core/SetContainerOperation.java (-20 lines)
Lines 10-21 Link Here
10
 *******************************************************************************/
10
 *******************************************************************************/
11
package org.eclipse.jdt.internal.core;
11
package org.eclipse.jdt.internal.core;
12
12
13
import org.eclipse.core.resources.IResourceRuleFactory;
14
import org.eclipse.core.resources.ResourcesPlugin;
13
import org.eclipse.core.resources.ResourcesPlugin;
15
import org.eclipse.core.runtime.CoreException;
14
import org.eclipse.core.runtime.CoreException;
16
import org.eclipse.core.runtime.IPath;
15
import org.eclipse.core.runtime.IPath;
17
import org.eclipse.core.runtime.jobs.ISchedulingRule;
18
import org.eclipse.core.runtime.jobs.MultiRule;
19
import org.eclipse.jdt.core.IClasspathContainer;
16
import org.eclipse.jdt.core.IClasspathContainer;
20
import org.eclipse.jdt.core.IClasspathEntry;
17
import org.eclipse.jdt.core.IClasspathEntry;
21
import org.eclipse.jdt.core.IJavaElement;
18
import org.eclipse.jdt.core.IJavaElement;
Lines 143-165 Link Here
143
		}
140
		}
144
	}
141
	}
145
142
146
	protected ISchedulingRule getSchedulingRule() {
147
		if (this.canChangeResources) {
148
			int length = this.affectedProjects.length;
149
			IResourceRuleFactory ruleFactory = ResourcesPlugin.getWorkspace().getRuleFactory();
150
			ISchedulingRule[] rules = new ISchedulingRule[length + 1];
151
152
			for (int index = 0; index < length; index++) {
153
				rules[index] = ruleFactory.modifyRule(this.affectedProjects[index].getProject());
154
			}
155
			// External folders might get changed inside ChangeClasspathOperation.classpathChanged(ClasspathChange)
156
			rules[length] = ruleFactory.modifyRule(JavaModelManager.getExternalManager().getExternalFoldersProject());
157
158
			return new MultiRule(rules);
159
		}
160
		return super.getSchedulingRule();
161
	}
162
	
163
	private void verbose_failure(CoreException e) {
143
	private void verbose_failure(CoreException e) {
164
		Util.verbose(
144
		Util.verbose(
165
			"CPContainer SET  - FAILED DUE TO EXCEPTION\n" + //$NON-NLS-1$
145
			"CPContainer SET  - FAILED DUE TO EXCEPTION\n" + //$NON-NLS-1$
(-)model/org/eclipse/jdt/internal/core/UserLibraryManager.java (-24 / +27 lines)
Lines 152-185 Link Here
152
	}
152
	}
153
153
154
	public void removeUserLibrary(String libName)  {
154
	public void removeUserLibrary(String libName)  {
155
		IEclipsePreferences instancePreferences = JavaModelManager.getJavaModelManager().getInstancePreferences();
155
		synchronized (this.userLibraries) {
156
		String propertyName = CP_USERLIBRARY_PREFERENCES_PREFIX+libName;
156
			IEclipsePreferences instancePreferences = JavaModelManager.getJavaModelManager().getInstancePreferences();
157
		instancePreferences.remove(propertyName);
157
			String propertyName = CP_USERLIBRARY_PREFERENCES_PREFIX+libName;
158
		try {
158
			instancePreferences.remove(propertyName);
159
			instancePreferences.flush();
159
			try {
160
		} catch (BackingStoreException e) {
160
				instancePreferences.flush();
161
			Util.log(e, "Exception while removing user library " + libName); //$NON-NLS-1$
161
			} catch (BackingStoreException e) {
162
				Util.log(e, "Exception while removing user library " + libName); //$NON-NLS-1$
163
			}
162
		}
164
		}
163
		// No need to lock this.userLibraries since SetContainerOperation uses ISchedulingRule now.
165
		// this.userLibraries was updated during the PreferenceChangeEvent (see preferenceChange(...))
164
	}
166
	}
165
167
166
	public void setUserLibrary(String libName, IClasspathEntry[] entries, boolean isSystemLibrary) {
168
	public void setUserLibrary(String libName, IClasspathEntry[] entries, boolean isSystemLibrary)  {
167
		IEclipsePreferences instancePreferences = JavaModelManager.getJavaModelManager().getInstancePreferences();
169
		synchronized (this.userLibraries) {
168
		String propertyName = CP_USERLIBRARY_PREFERENCES_PREFIX + libName;
170
			IEclipsePreferences instancePreferences = JavaModelManager.getJavaModelManager().getInstancePreferences();
169
		try {
171
			String propertyName = CP_USERLIBRARY_PREFERENCES_PREFIX+libName;
170
			String propertyValue = UserLibrary.serialize(entries, isSystemLibrary);
172
			try {
171
			instancePreferences.put(propertyName, propertyValue); // sends out a PreferenceChangeEvent (see
173
				String propertyValue = UserLibrary.serialize(entries, isSystemLibrary);
172
																	// preferenceChange(...))
174
				instancePreferences.put(propertyName, propertyValue); // sends out a PreferenceChangeEvent (see preferenceChange(...))
173
		} catch (IOException e) {
175
			} catch (IOException e) {
174
			Util.log(e, "Exception while serializing user library " + libName); //$NON-NLS-1$
176
				Util.log(e, "Exception while serializing user library " + libName); //$NON-NLS-1$
175
			return;
177
				return;
178
			}
179
			try {
180
				instancePreferences.flush();
181
			} catch (BackingStoreException e) {
182
				Util.log(e, "Exception while saving user library " + libName); //$NON-NLS-1$
183
			}
176
		}
184
		}
177
		try {
185
		// this.userLibraries was updated during the PreferenceChangeEvent (see preferenceChange(...))
178
			instancePreferences.flush();
179
		} catch (BackingStoreException e) {
180
			Util.log(e, "Exception while saving user library " + libName); //$NON-NLS-1$
181
		}
182
		// No need to lock this.userLibraries since SetContainerOperation uses ISchedulingRule now.
183
	}
186
	}
184
187
185
}
188
}

Return to bug 305043