1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45: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,25 +224,23 @@ 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) {
if (prefs == null || prefs.get(INDEXER_ID_KEY, null) == null) try {
setIndexerId(project, indexerId); prefs.flush();
return Status.OK_STATUS; } catch (BackingStoreException e) {
} catch (CoreException e) { }
return e.getStatus(); }
} return Status.OK_STATUS;
} }
} }
@ -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);
} }
} }