1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-08 02:06:01 +02:00

Turns out getting rid of flush in the preferences was a bad idea. I now do it in a job delayed 2 seconds to ensure any incoming .setting dirs are processed. Probably won't work on large projects but the side affects are only a log file.

This commit is contained in:
Doug Schaefer 2006-05-23 04:05:33 +00:00
parent 1e3290c88c
commit 6c2fa9874f

View file

@ -44,6 +44,7 @@ import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.preferences.IPreferencesService; import org.eclipse.core.runtime.preferences.IPreferencesService;
import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.core.runtime.preferences.IEclipsePreferences.NodeChangeEvent; import org.eclipse.core.runtime.preferences.IEclipsePreferences.NodeChangeEvent;
import org.osgi.service.prefs.BackingStoreException;
/** /**
* The PDOM Provider. This is likely temporary since I hope * The PDOM Provider. This is likely temporary since I hope
@ -175,6 +176,10 @@ public class PDOMManager implements IPDOMManager, IElementChangedListener {
return; // TODO why would this be null? return; // TODO why would this be null?
prefs.put(INDEXER_ID_KEY, indexerId); prefs.put(INDEXER_ID_KEY, indexerId);
try {
prefs.flush();
} catch (BackingStoreException e) {
}
} }
public String getIndexerId(ICProject project) throws CoreException { public String getIndexerId(ICProject project) throws CoreException {
@ -211,7 +216,7 @@ public class PDOMManager implements IPDOMManager, IElementChangedListener {
indexerId = getDefaultIndexerId(); indexerId = getDefaultIndexerId();
// Start a job to set the id. // Start a job to set the id.
new SetIndexerId(project, indexerId).schedule(); setIndexerId(project, indexerId);
} }
return indexerId; return indexerId;
@ -219,26 +224,24 @@ public class PDOMManager implements IPDOMManager, IElementChangedListener {
// This job is only used when setting during a get. Sometimes the get is being // This job is only used when setting during a get. Sometimes the get is being
// done in an unfriendly environment, e.g. startup. // done in an unfriendly environment, e.g. startup.
private class SetIndexerId extends Job { private class SavePrefs extends Job {
private final ICProject project; private final ICProject project;
private final String indexerId; public SavePrefs(ICProject project) {
public SetIndexerId(ICProject project, String indexerId) { super("Save Project Preferences"); //$NON-NLS-1$
super("Set Indexer Id");
this.project = project; this.project = project;
this.indexerId = indexerId;
setSystem(true); setSystem(true);
setRule(project.getProject()); setRule(project.getProject());
} }
protected IStatus run(IProgressMonitor monitor) { protected IStatus run(IProgressMonitor monitor) {
try {
IEclipsePreferences prefs = new ProjectScope(project.getProject()).getNode(CCorePlugin.PLUGIN_ID); IEclipsePreferences prefs = new ProjectScope(project.getProject()).getNode(CCorePlugin.PLUGIN_ID);
if (prefs == null || prefs.get(INDEXER_ID_KEY, null) == null) if (prefs != null) {
setIndexerId(project, indexerId); try {
return Status.OK_STATUS; prefs.flush();
} catch (CoreException e) { } catch (BackingStoreException e) {
return e.getStatus();
} }
} }
return Status.OK_STATUS;
}
} }
public void setIndexerId(ICProject project, String indexerId) throws CoreException { public void setIndexerId(ICProject project, String indexerId) throws CoreException {
@ -250,6 +253,7 @@ public class PDOMManager implements IPDOMManager, IElementChangedListener {
if (!indexerId.equals(oldId)) { if (!indexerId.equals(oldId)) {
prefs.put(INDEXER_ID_KEY, indexerId); prefs.put(INDEXER_ID_KEY, indexerId);
createIndexer(project, indexerId).reindex(); createIndexer(project, indexerId).reindex();
new SavePrefs(project).schedule(2000);
} }
} }