From 46df43c5f7dccd6a62d15ccca31d52a8d5598087 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Fri, 13 Apr 2007 08:05:53 +0000 Subject: [PATCH] Fix for 107569, error on async preference save operation. --- .../cdt/internal/core/CCoreInternals.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CCoreInternals.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CCoreInternals.java index 33c273ae92f..d05254aaf86 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CCoreInternals.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CCoreInternals.java @@ -13,17 +13,26 @@ package org.eclipse.cdt.internal.core; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.internal.core.pdom.PDOMManager; +import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IResourceRuleFactory; import org.eclipse.core.resources.ProjectScope; +import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.core.runtime.jobs.MultiRule; import org.eclipse.core.runtime.preferences.InstanceScope; import org.osgi.service.prefs.BackingStoreException; public class CCoreInternals { + private static final String PREFS_FILE_EXTENSION = ".prefs"; //$NON-NLS-1$ + private static final String SETTINGS_DIRECTORY_NAME = ".settings"; //$NON-NLS-1$ + public static PDOMManager getPDOMManager() { return (PDOMManager) CCorePlugin.getIndexManager(); } @@ -51,7 +60,15 @@ public class CCoreInternals { }; job.setSystem(true); if (project != null) { - job.setRule(project); + IResourceRuleFactory rf= ResourcesPlugin.getWorkspace().getRuleFactory(); + IFile wsFile= project.getFile(new Path(SETTINGS_DIRECTORY_NAME).append(CCorePlugin.PLUGIN_ID + PREFS_FILE_EXTENSION)); + ISchedulingRule[] rules= { + rf.modifyRule(wsFile), + rf.createRule(wsFile.getParent()), + rf.createRule(wsFile), + rf.deleteRule(wsFile) + }; + job.setRule(MultiRule.combine(rules)); } job.schedule(2000); }