1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Fixed a flaky test.

This commit is contained in:
Sergey Prigogin 2013-03-30 16:54:44 -07:00
parent c4b2ac159c
commit a4ebf6ffa5
2 changed files with 46 additions and 43 deletions

View file

@ -519,6 +519,7 @@ public class IndexCompositeTests extends BaseTestCase {
for (IProject project : createdProjects) { for (IProject project : createdProjects) {
project.delete(true, npm()); project.delete(true, npm());
} }
createdProjects.clear();
super.tearDown(); super.tearDown();
} }
} }

View file

@ -459,20 +459,14 @@ public class PDOMManager implements IWritableIndexManager, IListener {
IProject prj= project.getProject(); IProject prj= project.getProject();
IndexerPreferences.set(prj, IndexerPreferences.KEY_INDEXER_ID, indexerId); IndexerPreferences.set(prj, IndexerPreferences.KEY_INDEXER_ID, indexerId);
CCoreInternals.savePreferences(prj, IndexerPreferences.getScope(prj) == IndexerPreferences.SCOPE_PROJECT_SHARED); CCoreInternals.savePreferences(prj, IndexerPreferences.getScope(prj) == IndexerPreferences.SCOPE_PROJECT_SHARED);
changeIndexer(project);
} }
protected void onPreferenceChange(ICProject cproject, PreferenceChangeEvent event) { protected void onPreferenceChange(ICProject cproject, PreferenceChangeEvent event) {
if (IndexerPreferences.KEY_UPDATE_POLICY.equals(event.getKey())) { if (IndexerPreferences.KEY_UPDATE_POLICY.equals(event.getKey())) {
changeUpdatePolicy(cproject); changeUpdatePolicy(cproject);
} else { } else {
IProject project= cproject.getProject(); changeIndexer(cproject);
if (project.exists() && project.isOpen()) {
try {
changeIndexer(cproject);
} catch (Exception e) {
CCorePlugin.log(e);
}
}
} }
} }
@ -489,49 +483,56 @@ public class PDOMManager implements IWritableIndexManager, IListener {
} }
} }
private void changeIndexer(ICProject cproject) throws CoreException { private void changeIndexer(ICProject cproject) {
assert !Thread.holdsLock(fProjectToPDOM);
// if there is no indexer, don't touch the preferences.
IPDOMIndexer oldIndexer= getIndexer(cproject);
if (oldIndexer == null) {
return;
}
IProject prj= cproject.getProject(); IProject prj= cproject.getProject();
String newid= IndexerPreferences.get(prj, IndexerPreferences.KEY_INDEXER_ID, IPDOMManager.ID_NO_INDEXER); if (!prj.exists() || !prj.isOpen())
Properties props= IndexerPreferences.getProperties(prj); return;
synchronized (fUpdatePolicies) { try {
if (fClosingProjects.contains(prj.getName())) { assert !Thread.holdsLock(fProjectToPDOM);
// If there is no indexer, don't touch the preferences.
IPDOMIndexer oldIndexer= getIndexer(cproject);
if (oldIndexer == null) {
return; return;
} }
oldIndexer= getIndexer(cproject);
if (oldIndexer != null) {
if (oldIndexer.getID().equals(newid)) {
if (!oldIndexer.needsToRebuildForProperties(props)) {
oldIndexer.setProperties(props);
return;
}
}
IPDOMIndexer indexer= newIndexer(newid, props);
registerIndexer(cproject, indexer);
createPolicy(cproject).clearTUs();
if (oldIndexer instanceof AbstractPDOMIndexer) {
if (IndexerPreferences.preferDefaultLanguage(((AbstractPDOMIndexer) oldIndexer).getProperties()) !=
IndexerPreferences.preferDefaultLanguage(props)) {
enqueue(new NotifyCModelManagerTask(cproject.getProject()));
}
}
if (IndexerPreferences.getReindexOnIndexerChange(cproject.getProject())) { String newid= IndexerPreferences.get(prj, IndexerPreferences.KEY_INDEXER_ID, IPDOMManager.ID_NO_INDEXER);
enqueue(new PDOMRebuildTask(indexer)); Properties props= IndexerPreferences.getProperties(prj);
synchronized (fUpdatePolicies) {
if (fClosingProjects.contains(prj.getName())) {
return;
}
oldIndexer= getIndexer(cproject);
if (oldIndexer != null) {
if (oldIndexer.getID().equals(newid)) {
if (!oldIndexer.needsToRebuildForProperties(props)) {
oldIndexer.setProperties(props);
return;
}
}
IPDOMIndexer indexer= newIndexer(newid, props);
registerIndexer(cproject, indexer);
createPolicy(cproject).clearTUs();
if (oldIndexer instanceof AbstractPDOMIndexer) {
if (IndexerPreferences.preferDefaultLanguage(((AbstractPDOMIndexer) oldIndexer).getProperties()) !=
IndexerPreferences.preferDefaultLanguage(props)) {
enqueue(new NotifyCModelManagerTask(cproject.getProject()));
}
}
if (IndexerPreferences.getReindexOnIndexerChange(cproject.getProject())) {
enqueue(new PDOMRebuildTask(indexer));
}
} }
} }
}
if (oldIndexer != null) { if (oldIndexer != null) {
stopIndexer(oldIndexer); stopIndexer(oldIndexer);
}
} catch (Exception e) {
CCorePlugin.log(e);
} }
} }
@ -953,7 +954,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
return Status.OK_STATUS; return Status.OK_STATUS;
} }
} }
// don't attempt to hold lock on indexerMutex while canceling // Don't attempt to hold lock on indexerMutex while canceling.
cancelIndexerJobs(indexer); cancelIndexerJobs(indexer);
synchronized (fUpdatePolicies) { synchronized (fUpdatePolicies) {
@ -965,6 +966,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
} }
return Status.OK_STATUS; return Status.OK_STATUS;
} }
@Override @Override
public boolean belongsTo(Object family) { public boolean belongsTo(Object family) {
return family == PDOMManager.this; return family == PDOMManager.this;