mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Participants for indexer-setup, bug 218286.
This commit is contained in:
parent
86529c7688
commit
2e0d07d89b
4 changed files with 163 additions and 34 deletions
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2006, 2007 Wind River Systems, Inc. and others.
|
* Copyright (c) 2006, 2008 Wind River Systems, Inc. and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -11,6 +11,7 @@
|
||||||
|
|
||||||
package org.eclipse.cdt.core.index;
|
package org.eclipse.cdt.core.index;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
import org.eclipse.cdt.core.dom.IPDOMManager;
|
import org.eclipse.cdt.core.dom.IPDOMManager;
|
||||||
import org.eclipse.cdt.core.model.ICElement;
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
import org.eclipse.cdt.core.model.ICProject;
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
|
@ -196,4 +197,14 @@ public interface IIndexManager extends IPDOMManager {
|
||||||
* @since 4.0
|
* @since 4.0
|
||||||
*/
|
*/
|
||||||
public void export(ICProject project, String location, int options, IProgressMonitor monitor) throws CoreException;
|
public void export(ICProject project, String location, int options, IProgressMonitor monitor) throws CoreException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a participant for the indexer-setup
|
||||||
|
*/
|
||||||
|
public void addIndexerSetupParticipant(IndexerSetupParticipant participant);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes a participant for the indexer-setup
|
||||||
|
*/
|
||||||
|
public void removeIndexerSetupParticipant(IndexerSetupParticipant participant);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008 Wind River Systems, Inc. and others.
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* Markus Schorn - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.core.index;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
|
import org.eclipse.cdt.internal.core.CCoreInternals;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abstract base class for indexer setup participants. A participant can delay the
|
||||||
|
* setup of the indexer when a project is added to the workspace.
|
||||||
|
*/
|
||||||
|
public abstract class IndexerSetupParticipant {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The method will be called before an indexer is set up for a project. If you
|
||||||
|
* return <code>true</code> the setup will be postponed. You need to call
|
||||||
|
* {@link #notifyIndexerSetup(ICProject)} as soon as this participant no longer
|
||||||
|
* needs to block the indexer setup.
|
||||||
|
* <p>
|
||||||
|
* This method may be called multiple times for the same project.
|
||||||
|
* @param project the project for which the indexer is supposed to be initialized.
|
||||||
|
* @return whether or not to proceed with the indexer setup.
|
||||||
|
*/
|
||||||
|
public abstract boolean postponeIndexerSetup(ICProject project);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Informs the index manager that this participant no longer needs to postpone the
|
||||||
|
* indexer setup for the given project. Depending on the state of other participants
|
||||||
|
* this may trigger the indexer setup.
|
||||||
|
* @param project the project for which the setup no longer needs to be postponed
|
||||||
|
*/
|
||||||
|
public void notifyIndexerSetup(ICProject project) {
|
||||||
|
CCoreInternals.getPDOMManager().notifyIndexerSetup(this, project);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2007 Wind River Systems, Inc. and others.
|
* Copyright (c) 2007, 2008 Wind River Systems, Inc. and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -11,20 +11,34 @@
|
||||||
|
|
||||||
package org.eclipse.cdt.internal.core.pdom;
|
package org.eclipse.cdt.internal.core.pdom;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.index.IndexerSetupParticipant;
|
||||||
import org.eclipse.cdt.core.model.CoreModel;
|
import org.eclipse.cdt.core.model.CoreModel;
|
||||||
import org.eclipse.cdt.core.model.ICProject;
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
import org.eclipse.cdt.core.settings.model.CProjectDescriptionEvent;
|
import org.eclipse.cdt.core.settings.model.CProjectDescriptionEvent;
|
||||||
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
|
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
|
||||||
import org.eclipse.cdt.core.settings.model.ICProjectDescription;
|
import org.eclipse.cdt.core.settings.model.ICProjectDescription;
|
||||||
import org.eclipse.cdt.core.settings.model.ICProjectDescriptionListener;
|
import org.eclipse.cdt.core.settings.model.ICProjectDescriptionListener;
|
||||||
|
import org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
|
|
||||||
public class CProjectDescriptionListener implements ICProjectDescriptionListener {
|
public class CProjectDescriptionListener implements ICProjectDescriptionListener {
|
||||||
|
|
||||||
private PDOMManager fIndexManager;
|
private PDOMManager fIndexManager;
|
||||||
|
private IndexerSetupParticipant fIndexerSetupParticipant;
|
||||||
|
|
||||||
public CProjectDescriptionListener(PDOMManager manager) {
|
public CProjectDescriptionListener(PDOMManager manager) {
|
||||||
fIndexManager= manager;
|
fIndexManager= manager;
|
||||||
|
fIndexerSetupParticipant= createIndexerSetupParticipant();
|
||||||
|
manager.addIndexerSetupParticipant(fIndexerSetupParticipant);
|
||||||
|
}
|
||||||
|
|
||||||
|
private IndexerSetupParticipant createIndexerSetupParticipant() {
|
||||||
|
return new IndexerSetupParticipant() {
|
||||||
|
@Override
|
||||||
|
public boolean postponeIndexerSetup(ICProject project) {
|
||||||
|
return !isProjectCreationComplete(project.getProject());
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public void handleEvent(CProjectDescriptionEvent event) {
|
public void handleEvent(CProjectDescriptionEvent event) {
|
||||||
|
@ -34,7 +48,7 @@ public class CProjectDescriptionListener implements ICProjectDescriptionListener
|
||||||
if (completedProjectCreation(old, act)) {
|
if (completedProjectCreation(old, act)) {
|
||||||
ICProject project= getProject(event);
|
ICProject project= getProject(event);
|
||||||
if (project != null) {
|
if (project != null) {
|
||||||
fIndexManager.addProject(project);
|
fIndexerSetupParticipant.notifyIndexerSetup(project);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (old != null && changedDefaultSettingConfiguration(old, act)) {
|
else if (old != null && changedDefaultSettingConfiguration(old, act)) {
|
||||||
|
@ -69,6 +83,11 @@ public class CProjectDescriptionListener implements ICProjectDescriptionListener
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected boolean isProjectCreationComplete(IProject project) {
|
||||||
|
ICProjectDescription desc= CProjectDescriptionManager.getInstance().getProjectDescription(project.getProject(), false);
|
||||||
|
return !(desc == null || desc.isCdtProjectCreating());
|
||||||
|
}
|
||||||
|
|
||||||
private boolean completedProjectCreation(ICProjectDescription old, ICProjectDescription act) {
|
private boolean completedProjectCreation(ICProjectDescription old, ICProjectDescription act) {
|
||||||
return (old == null || old.isCdtProjectCreating()) && !act.isCdtProjectCreating();
|
return (old == null || old.isCdtProjectCreating()) && !act.isCdtProjectCreating();
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,6 +40,7 @@ import org.eclipse.cdt.core.index.IIndexChangeListener;
|
||||||
import org.eclipse.cdt.core.index.IIndexLocationConverter;
|
import org.eclipse.cdt.core.index.IIndexLocationConverter;
|
||||||
import org.eclipse.cdt.core.index.IIndexManager;
|
import org.eclipse.cdt.core.index.IIndexManager;
|
||||||
import org.eclipse.cdt.core.index.IIndexerStateListener;
|
import org.eclipse.cdt.core.index.IIndexerStateListener;
|
||||||
|
import org.eclipse.cdt.core.index.IndexerSetupParticipant;
|
||||||
import org.eclipse.cdt.core.model.CModelException;
|
import org.eclipse.cdt.core.model.CModelException;
|
||||||
import org.eclipse.cdt.core.model.CoreModel;
|
import org.eclipse.cdt.core.model.CoreModel;
|
||||||
import org.eclipse.cdt.core.model.ICContainer;
|
import org.eclipse.cdt.core.model.ICContainer;
|
||||||
|
@ -50,7 +51,6 @@ import org.eclipse.cdt.core.model.ILanguageMappingChangeListener;
|
||||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||||
import org.eclipse.cdt.core.model.LanguageManager;
|
import org.eclipse.cdt.core.model.LanguageManager;
|
||||||
import org.eclipse.cdt.core.settings.model.CProjectDescriptionEvent;
|
import org.eclipse.cdt.core.settings.model.CProjectDescriptionEvent;
|
||||||
import org.eclipse.cdt.core.settings.model.ICProjectDescription;
|
|
||||||
import org.eclipse.cdt.core.settings.model.ICProjectDescriptionListener;
|
import org.eclipse.cdt.core.settings.model.ICProjectDescriptionListener;
|
||||||
import org.eclipse.cdt.internal.core.CCoreInternals;
|
import org.eclipse.cdt.internal.core.CCoreInternals;
|
||||||
import org.eclipse.cdt.internal.core.index.IIndexFragment;
|
import org.eclipse.cdt.internal.core.index.IIndexFragment;
|
||||||
|
@ -70,7 +70,6 @@ import org.eclipse.cdt.internal.core.pdom.indexer.PDOMRebuildTask;
|
||||||
import org.eclipse.cdt.internal.core.pdom.indexer.PDOMUpdateTask;
|
import org.eclipse.cdt.internal.core.pdom.indexer.PDOMUpdateTask;
|
||||||
import org.eclipse.cdt.internal.core.pdom.indexer.ProjectIndexerInputAdapter;
|
import org.eclipse.cdt.internal.core.pdom.indexer.ProjectIndexerInputAdapter;
|
||||||
import org.eclipse.cdt.internal.core.pdom.indexer.TriggerNotificationTask;
|
import org.eclipse.cdt.internal.core.pdom.indexer.TriggerNotificationTask;
|
||||||
import org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager;
|
|
||||||
import org.eclipse.core.resources.IFolder;
|
import org.eclipse.core.resources.IFolder;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.resources.IResource;
|
import org.eclipse.core.resources.IResource;
|
||||||
|
@ -166,7 +165,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
|
||||||
|
|
||||||
private CModelListener fCModelListener= new CModelListener(this);
|
private CModelListener fCModelListener= new CModelListener(this);
|
||||||
private ILanguageMappingChangeListener fLanguageChangeListener = new LanguageMappingChangeListener(this);
|
private ILanguageMappingChangeListener fLanguageChangeListener = new LanguageMappingChangeListener(this);
|
||||||
private ICProjectDescriptionListener fProjectDescriptionListener= new CProjectDescriptionListener(this);
|
private final ICProjectDescriptionListener fProjectDescriptionListener;
|
||||||
|
|
||||||
private IndexFactory fIndexFactory= new IndexFactory(this);
|
private IndexFactory fIndexFactory= new IndexFactory(this);
|
||||||
private IndexProviderManager fIndexProviderManager = new IndexProviderManager();
|
private IndexProviderManager fIndexProviderManager = new IndexProviderManager();
|
||||||
|
@ -178,13 +177,21 @@ public class PDOMManager implements IWritableIndexManager, IListener {
|
||||||
*/
|
*/
|
||||||
private HashMap<ICProject, IndexUpdatePolicy> fUpdatePolicies= new HashMap<ICProject, IndexUpdatePolicy>();
|
private HashMap<ICProject, IndexUpdatePolicy> fUpdatePolicies= new HashMap<ICProject, IndexUpdatePolicy>();
|
||||||
private HashMap<IProject, PCL> fPrefListeners= new HashMap<IProject, PCL>();
|
private HashMap<IProject, PCL> fPrefListeners= new HashMap<IProject, PCL>();
|
||||||
|
private ArrayList<IndexerSetupParticipant> fSetupParticipants= new ArrayList<IndexerSetupParticipant>();
|
||||||
|
private HashSet<ICProject> fPostponedProjects= new HashSet<ICProject>();
|
||||||
|
|
||||||
|
public PDOMManager() {
|
||||||
|
fProjectDescriptionListener= new CProjectDescriptionListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
public Job startup() {
|
public Job startup() {
|
||||||
Job postStartupJob= new Job(CCorePlugin.getResourceString("CCorePlugin.startupJob")) { //$NON-NLS-1$
|
Job postStartupJob= new Job(CCorePlugin.getResourceString("CCorePlugin.startupJob")) { //$NON-NLS-1$
|
||||||
|
@Override
|
||||||
protected IStatus run(IProgressMonitor monitor) {
|
protected IStatus run(IProgressMonitor monitor) {
|
||||||
postStartup();
|
postStartup();
|
||||||
return Status.OK_STATUS;
|
return Status.OK_STATUS;
|
||||||
}
|
}
|
||||||
|
@Override
|
||||||
public boolean belongsTo(Object family) {
|
public boolean belongsTo(Object family) {
|
||||||
return family == PDOMManager.this;
|
return family == PDOMManager.this;
|
||||||
}
|
}
|
||||||
|
@ -660,9 +667,10 @@ public class PDOMManager implements IWritableIndexManager, IListener {
|
||||||
void addProject(final ICProject cproject) {
|
void addProject(final ICProject cproject) {
|
||||||
final IProject project = cproject.getProject();
|
final IProject project = cproject.getProject();
|
||||||
Job addProject= new Job(Messages.PDOMManager_StartJob_name) {
|
Job addProject= new Job(Messages.PDOMManager_StartJob_name) {
|
||||||
|
@Override
|
||||||
protected IStatus run(IProgressMonitor monitor) {
|
protected IStatus run(IProgressMonitor monitor) {
|
||||||
monitor.beginTask("", 100); //$NON-NLS-1$
|
monitor.beginTask("", 100); //$NON-NLS-1$
|
||||||
if (project.isOpen() && isFullyCreated(project)) {
|
if (project.isOpen() && !postponeSetup(cproject)) {
|
||||||
syncronizeProjectSettings(project, new SubProgressMonitor(monitor, 1));
|
syncronizeProjectSettings(project, new SubProgressMonitor(monitor, 1));
|
||||||
if (getIndexer(cproject) == null) {
|
if (getIndexer(cproject) == null) {
|
||||||
createIndexer(cproject, new SubProgressMonitor(monitor, 99));
|
createIndexer(cproject, new SubProgressMonitor(monitor, 99));
|
||||||
|
@ -681,6 +689,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
|
||||||
monitor.done();
|
monitor.done();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean belongsTo(Object family) {
|
public boolean belongsTo(Object family) {
|
||||||
return family == PDOMManager.this;
|
return family == PDOMManager.this;
|
||||||
}
|
}
|
||||||
|
@ -703,14 +712,6 @@ public class PDOMManager implements IWritableIndexManager, IListener {
|
||||||
addProject.schedule();
|
addProject.schedule();
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isFullyCreated(IProject project) {
|
|
||||||
ICProjectDescription desc= CProjectDescriptionManager.getInstance().getProjectDescription(project, false);
|
|
||||||
if (desc != null && !desc.isCdtProjectCreating()) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void registerPreferenceListener(ICProject project) {
|
private void registerPreferenceListener(ICProject project) {
|
||||||
IProject prj= project.getProject();
|
IProject prj= project.getProject();
|
||||||
PCL pcl= fPrefListeners.get(prj);
|
PCL pcl= fPrefListeners.get(prj);
|
||||||
|
@ -797,7 +798,8 @@ public class PDOMManager implements IWritableIndexManager, IListener {
|
||||||
if (pdom instanceof WritablePDOM) {
|
if (pdom instanceof WritablePDOM) {
|
||||||
final WritablePDOM finalpdom= (WritablePDOM) pdom;
|
final WritablePDOM finalpdom= (WritablePDOM) pdom;
|
||||||
Job job= new Job(Messages.PDOMManager_ClosePDOMJob) {
|
Job job= new Job(Messages.PDOMManager_ClosePDOMJob) {
|
||||||
protected IStatus run(IProgressMonitor monitor) {
|
@Override
|
||||||
|
protected IStatus run(IProgressMonitor monitor) {
|
||||||
try {
|
try {
|
||||||
finalpdom.acquireWriteLock();
|
finalpdom.acquireWriteLock();
|
||||||
try {
|
try {
|
||||||
|
@ -866,24 +868,35 @@ public class PDOMManager implements IWritableIndexManager, IListener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void reindex(ICProject project) {
|
public void reindex(final ICProject project) {
|
||||||
assert !Thread.holdsLock(fProjectToPDOM);
|
Job job= new Job(Messages.PDOMManager_notifyJob_label) {
|
||||||
IPDOMIndexer indexer= null;
|
@Override
|
||||||
synchronized (fUpdatePolicies) {
|
protected IStatus run(IProgressMonitor monitor) {
|
||||||
indexer= getIndexer(project);
|
IPDOMIndexer indexer= null;
|
||||||
}
|
synchronized (fUpdatePolicies) {
|
||||||
// don't attempt to hold lock on indexerMutex while cancelling
|
indexer= getIndexer(project);
|
||||||
if (indexer != null) {
|
}
|
||||||
cancelIndexerJobs(indexer);
|
// don't attempt to hold lock on indexerMutex while cancelling
|
||||||
}
|
if (indexer != null) {
|
||||||
|
cancelIndexerJobs(indexer);
|
||||||
|
}
|
||||||
|
|
||||||
synchronized(fUpdatePolicies) {
|
synchronized(fUpdatePolicies) {
|
||||||
indexer= getIndexer(project);
|
indexer= getIndexer(project);
|
||||||
if (indexer != null) {
|
if (indexer != null) {
|
||||||
createPolicy(project).clearTUs();
|
createPolicy(project).clearTUs();
|
||||||
enqueue(new PDOMRebuildTask(indexer));
|
enqueue(new PDOMRebuildTask(indexer));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Status.OK_STATUS;
|
||||||
}
|
}
|
||||||
}
|
@Override
|
||||||
|
public boolean belongsTo(Object family) {
|
||||||
|
return family == PDOMManager.this;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
job.setSystem(true);
|
||||||
|
job.schedule();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addIndexChangeListener(IIndexChangeListener listener) {
|
public void addIndexChangeListener(IIndexChangeListener listener) {
|
||||||
|
@ -913,7 +926,8 @@ public class PDOMManager implements IWritableIndexManager, IListener {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Job notify= new Job(Messages.PDOMManager_notifyJob_label) {
|
Job notify= new Job(Messages.PDOMManager_notifyJob_label) {
|
||||||
protected IStatus run(IProgressMonitor monitor) {
|
@Override
|
||||||
|
protected IStatus run(IProgressMonitor monitor) {
|
||||||
fIndexerStateEvent.setState(state);
|
fIndexerStateEvent.setState(state);
|
||||||
Object[] listeners= fStateListeners.getListeners();
|
Object[] listeners= fStateListeners.getListeners();
|
||||||
monitor.beginTask(Messages.PDOMManager_notifyTask_message, listeners.length);
|
monitor.beginTask(Messages.PDOMManager_notifyTask_message, listeners.length);
|
||||||
|
@ -950,6 +964,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
|
||||||
if (project != null) {
|
if (project != null) {
|
||||||
final ICProject finalProject= project;
|
final ICProject finalProject= project;
|
||||||
Job notify= new Job(Messages.PDOMManager_notifyJob_label) {
|
Job notify= new Job(Messages.PDOMManager_notifyJob_label) {
|
||||||
|
@Override
|
||||||
protected IStatus run(IProgressMonitor monitor) {
|
protected IStatus run(IProgressMonitor monitor) {
|
||||||
fIndexChangeEvent.setAffectedProject(finalProject);
|
fIndexChangeEvent.setAffectedProject(finalProject);
|
||||||
Object[] listeners= fChangeListeners.getListeners();
|
Object[] listeners= fChangeListeners.getListeners();
|
||||||
|
@ -980,6 +995,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
|
||||||
Thread th= null;
|
Thread th= null;
|
||||||
if (waitMaxMillis != FOREVER) {
|
if (waitMaxMillis != FOREVER) {
|
||||||
th= new Thread() {
|
th= new Thread() {
|
||||||
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
Thread.sleep(waitMaxMillis);
|
Thread.sleep(waitMaxMillis);
|
||||||
|
@ -1278,4 +1294,44 @@ public class PDOMManager implements IWritableIndexManager, IListener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected boolean postponeSetup(ICProject cproject) {
|
||||||
|
synchronized(fSetupParticipants) {
|
||||||
|
for (IndexerSetupParticipant sp : fSetupParticipants) {
|
||||||
|
if (sp.postponeIndexerSetup(cproject)) {
|
||||||
|
fPostponedProjects.add(cproject);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fPostponedProjects.remove(cproject);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param indexerSetupParticipant
|
||||||
|
* @param project
|
||||||
|
*/
|
||||||
|
public void notifyIndexerSetup(IndexerSetupParticipant participant, ICProject project) {
|
||||||
|
synchronized(fSetupParticipants) {
|
||||||
|
if (fPostponedProjects.contains(project)) {
|
||||||
|
addProject(project);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addIndexerSetupParticipant(IndexerSetupParticipant participant) {
|
||||||
|
synchronized (fSetupParticipants) {
|
||||||
|
fSetupParticipants.add(participant);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeIndexerSetupParticipant(IndexerSetupParticipant participant) {
|
||||||
|
synchronized (fSetupParticipants) {
|
||||||
|
fSetupParticipants.remove(participant);
|
||||||
|
for (ICProject project : fPostponedProjects) {
|
||||||
|
addProject(project);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue