diff options
2 files changed, 9 insertions, 4 deletions
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/GeneratePDOMApplicationTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/GeneratePDOMApplicationTest.java index 87974999174..6cc0cf343cc 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/GeneratePDOMApplicationTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/GeneratePDOMApplicationTest.java @@ -214,7 +214,8 @@ public class GeneratePDOMApplicationTest extends PDOMTestBase { } finally { wpdom.releaseReadLock(); } - assertTrue(stateCount[0] == 2); + // depending on the timing the index of the temporary project is changed twice. + assertTrue(stateCount[0] == 2 || stateCount[0] == 4); } public void testExternalExportProjectProvider_SysIncludes() throws Exception { 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 1f7c1fe3e83..6ce38c6fa04 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 @@ -138,6 +138,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { private static final ISchedulingRule NOTIFICATION_SCHEDULING_RULE = new PerInstanceSchedulingRule(); private static final ISchedulingRule INDEXER_SCHEDULING_RULE = new PerInstanceSchedulingRule(); + private static final ISchedulingRule INIT_INDEXER_SCHEDULING_RULE = new PerInstanceSchedulingRule(); /** * Protects indexerJob, currentTask and taskQueue. @@ -654,10 +655,13 @@ public class PDOMManager implements IWritableIndexManager, IListener { // have to check for that. ISchedulingRule rule= project.getWorkspace().getRuleFactory().refreshRule(project.getFolder(SETTINGS_FOLDER_NAME)); if (project.contains(rule)) { - rule= new MultiRule(new ISchedulingRule[] {project, INDEXER_SCHEDULING_RULE }); + rule= MultiRule.combine(project, INIT_INDEXER_SCHEDULING_RULE); } - else if (!rule.contains(project)) { - rule= new MultiRule(new ISchedulingRule[] {rule, project, INDEXER_SCHEDULING_RULE }); + else if (rule.contains(project)) { + rule= MultiRule.combine(rule, INIT_INDEXER_SCHEDULING_RULE); + } + else { + rule= MultiRule.combine(new ISchedulingRule[] {rule, project, INIT_INDEXER_SCHEDULING_RULE }); } addProject.setRule(rule); addProject.setSystem(true); |