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:
parent
c4b2ac159c
commit
a4ebf6ffa5
2 changed files with 46 additions and 43 deletions
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Reference in a new issue