From 57102e1bd4494579a2abb2667732e7aa5ef84152 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Tue, 23 Jan 2007 11:47:37 +0000 Subject: [PATCH] Fix for 171245, core plugin startup blocks UI. --- .../cdt/internal/core/pdom/Messages.java | 1 + .../cdt/internal/core/pdom/PDOMManager.java | 54 ++++++++++++------- .../internal/core/pdom/messages.properties | 1 + 3 files changed, 36 insertions(+), 20 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/Messages.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/Messages.java index fe8f7ae5dfb..e292f9ed04d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/Messages.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/Messages.java @@ -20,6 +20,7 @@ public class Messages extends NLS { public static String PDOMManager_notifyJob_label; public static String PDOMManager_notifyTask_message; public static String PDOMManager_savePrefsJob; + public static String PDOMManager_StartJob_name; public static String WritablePDOM_error_unknownLinkage; static { // initialize resource bundle diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java index c5cf759b510..485ece2c3d0 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java @@ -76,19 +76,22 @@ import org.osgi.service.prefs.Preferences; */ public class PDOMManager implements IPDOMManager, IWritableIndexManager, IListener { - 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 ISchedulingRule(){ + private static final class PerInstanceSchedulingRule implements ISchedulingRule { public boolean contains(ISchedulingRule rule) { return rule == this; } public boolean isConflicting(ISchedulingRule rule) { 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. @@ -130,20 +133,29 @@ public class PDOMManager implements IPDOMManager, IWritableIndexManager, IListen * change events. */ public void startup() { - CoreModel model = CoreModel.getDefault(); - model.addElementChangedListener(fCModelListener); - ICProject[] projects; - try { - projects = model.getCModel().getCProjects(); - for (int i = 0; i < projects.length; i++) { - ICProject project = projects[i]; - if (project.getProject().isOpen()) { - addProject(project, null); - } + Job startup= new Job(Messages.PDOMManager_StartJob_name) { + protected IStatus run(IProgressMonitor monitor) { + CoreModel model = CoreModel.getDefault(); + model.addElementChangedListener(fCModelListener); + ICProject[] projects; + try { + projects = model.getCModel().getCProjects(); + for (int i = 0; i < projects.length; i++) { + 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 { @@ -425,6 +437,7 @@ public class PDOMManager implements IPDOMManager, IWritableIndexManager, IListen fCompletedSources= 0; fCompletedHeaders= 0; fIndexerJob = new PDOMIndexerJob(this); + fIndexerJob.setRule(INDEXER_SCHEDULING_RULE); fIndexerJob.schedule(); notifyState(IndexerStateEvent.STATE_BUSY); } @@ -462,6 +475,7 @@ public class PDOMManager implements IPDOMManager, IWritableIndexManager, IListen } else { fIndexerJob = new PDOMIndexerJob(this); + fIndexerJob.setRule(INDEXER_SCHEDULING_RULE); fIndexerJob.schedule(); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/messages.properties b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/messages.properties index ddcad56a411..0fdc52cf4d7 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/messages.properties +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/messages.properties @@ -2,5 +2,6 @@ WritablePDOM_error_unknownLinkage=AST specifies unknown linkage ''{0}'' PDOMManager_notifyJob_label=Notify Index Change Listeners PDOMManager_JoinIndexerTask=Join Indexer PDOMManager_savePrefsJob=Save Project Preferences +PDOMManager_StartJob_name=Initialize Indexing PDOMManager_notifyTask_message=Notify Listeners PDOMManager_indexMonitorDetail={0}/{1} sources, {2} headers