1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-26 02:15:31 +02:00

Fix for 171245, core plugin startup blocks UI.

This commit is contained in:
Markus Schorn 2007-01-23 11:47:37 +00:00
parent 8567242e2f
commit 57102e1bd4
3 changed files with 36 additions and 20 deletions

View file

@ -20,6 +20,7 @@ public class Messages extends NLS {
public static String PDOMManager_notifyJob_label; public static String PDOMManager_notifyJob_label;
public static String PDOMManager_notifyTask_message; public static String PDOMManager_notifyTask_message;
public static String PDOMManager_savePrefsJob; public static String PDOMManager_savePrefsJob;
public static String PDOMManager_StartJob_name;
public static String WritablePDOM_error_unknownLinkage; public static String WritablePDOM_error_unknownLinkage;
static { static {
// initialize resource bundle // initialize resource bundle

View file

@ -76,19 +76,22 @@ import org.osgi.service.prefs.Preferences;
*/ */
public class PDOMManager implements IPDOMManager, IWritableIndexManager, IListener { public class PDOMManager implements IPDOMManager, IWritableIndexManager, IListener {
private static final QualifiedName indexerProperty= new QualifiedName(CCorePlugin.PLUGIN_ID, "pdomIndexer"); //$NON-NLS-1$ private static final class PerInstanceSchedulingRule implements ISchedulingRule {
private static final QualifiedName dbNameProperty= new QualifiedName(CCorePlugin.PLUGIN_ID, "pdomName"); //$NON-NLS-1$
public static final String INDEXER_ID_KEY = "indexerId"; //$NON-NLS-1$
public static final String INDEX_ALL_FILES = "indexAllFiles"; //$NON-NLS-1$
private static final ISchedulingRule NOTIFICATION_SCHEDULING_RULE = new ISchedulingRule(){
public boolean contains(ISchedulingRule rule) { public boolean contains(ISchedulingRule rule) {
return rule == this; return rule == this;
} }
public boolean isConflicting(ISchedulingRule rule) { public boolean isConflicting(ISchedulingRule rule) {
return rule == this; return rule == this;
} }
}; }
private static final QualifiedName indexerProperty= new QualifiedName(CCorePlugin.PLUGIN_ID, "pdomIndexer"); //$NON-NLS-1$
private static final QualifiedName dbNameProperty= new QualifiedName(CCorePlugin.PLUGIN_ID, "pdomName"); //$NON-NLS-1$
public static final String INDEXER_ID_KEY = "indexerId"; //$NON-NLS-1$
public static final String INDEX_ALL_FILES = "indexAllFiles"; //$NON-NLS-1$
private static final ISchedulingRule NOTIFICATION_SCHEDULING_RULE = new PerInstanceSchedulingRule();
private static final ISchedulingRule INDEXER_SCHEDULING_RULE = new PerInstanceSchedulingRule();
/** /**
* Protects indexerJob, currentTask and taskQueue. * Protects indexerJob, currentTask and taskQueue.
@ -130,20 +133,29 @@ public class PDOMManager implements IPDOMManager, IWritableIndexManager, IListen
* change events. * change events.
*/ */
public void startup() { public void startup() {
CoreModel model = CoreModel.getDefault(); Job startup= new Job(Messages.PDOMManager_StartJob_name) {
model.addElementChangedListener(fCModelListener); protected IStatus run(IProgressMonitor monitor) {
ICProject[] projects; CoreModel model = CoreModel.getDefault();
try { model.addElementChangedListener(fCModelListener);
projects = model.getCModel().getCProjects(); ICProject[] projects;
for (int i = 0; i < projects.length; i++) { try {
ICProject project = projects[i]; projects = model.getCModel().getCProjects();
if (project.getProject().isOpen()) { for (int i = 0; i < projects.length; i++) {
addProject(project, null); ICProject project = projects[i];
} if (project.getProject().isOpen()) {
addProject(project, null);
}
}
} catch (CoreException e) {
CCorePlugin.log(e);
return e.getStatus();
}
return Status.OK_STATUS;
} }
} catch (CoreException e) { };
CCorePlugin.log(e); startup.setSystem(true);
} startup.setRule(INDEXER_SCHEDULING_RULE); // block indexer until init is done.
startup.schedule(1000);
} }
public IPDOM getPDOM(ICProject project) throws CoreException { public IPDOM getPDOM(ICProject project) throws CoreException {
@ -425,6 +437,7 @@ public class PDOMManager implements IPDOMManager, IWritableIndexManager, IListen
fCompletedSources= 0; fCompletedSources= 0;
fCompletedHeaders= 0; fCompletedHeaders= 0;
fIndexerJob = new PDOMIndexerJob(this); fIndexerJob = new PDOMIndexerJob(this);
fIndexerJob.setRule(INDEXER_SCHEDULING_RULE);
fIndexerJob.schedule(); fIndexerJob.schedule();
notifyState(IndexerStateEvent.STATE_BUSY); notifyState(IndexerStateEvent.STATE_BUSY);
} }
@ -462,6 +475,7 @@ public class PDOMManager implements IPDOMManager, IWritableIndexManager, IListen
} }
else { else {
fIndexerJob = new PDOMIndexerJob(this); fIndexerJob = new PDOMIndexerJob(this);
fIndexerJob.setRule(INDEXER_SCHEDULING_RULE);
fIndexerJob.schedule(); fIndexerJob.schedule();
} }
} }

View file

@ -2,5 +2,6 @@ WritablePDOM_error_unknownLinkage=AST specifies unknown linkage ''{0}''
PDOMManager_notifyJob_label=Notify Index Change Listeners PDOMManager_notifyJob_label=Notify Index Change Listeners
PDOMManager_JoinIndexerTask=Join Indexer PDOMManager_JoinIndexerTask=Join Indexer
PDOMManager_savePrefsJob=Save Project Preferences PDOMManager_savePrefsJob=Save Project Preferences
PDOMManager_StartJob_name=Initialize Indexing
PDOMManager_notifyTask_message=Notify Listeners PDOMManager_notifyTask_message=Notify Listeners
PDOMManager_indexMonitorDetail={0}/{1} sources, {2} headers PDOMManager_indexMonitorDetail={0}/{1} sources, {2} headers