diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionManager.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionManager.java index ff733355e97..7ac436fb38f 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionManager.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionManager.java @@ -667,7 +667,7 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager { if(projNames.size() == 0) return new HashSet(0); - Set set = new HashSet(); + Set set = new LinkedHashSet(); IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); for (String sproj : projNames) @@ -685,17 +685,22 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager { Collection oldProjSet = oldMap != null ? projSetFromProjNameSet(oldMap.keySet()) : new HashSet(0); Collection newProjSet = newMap != null ? projSetFromProjNameSet(newMap.keySet()) : new HashSet(0); - Set tmp = new HashSet(newProjSet); - newProjSet.removeAll(oldProjSet); - oldProjSet.removeAll(tmp); - if(oldProjSet.size() != 0 || newProjSet.size() != 0){ - IProject[] refs = des.getReferencedProjects(); - Set set = new HashSet(Arrays.asList(refs)); - set.removeAll(oldProjSet); - set.addAll(newProjSet); - des.setReferencedProjects(set.toArray(new IProject[set.size()])); + // Referenced projects are set in the CDT RefsTab. These settings override those set in the Platform tab. + if (oldProjSet.size() != newProjSet.size()) { + des.setReferencedProjects(newProjSet.toArray(new IProject[newProjSet.size()])); return true; } + + Iterator oldIt = oldProjSet.iterator(); + Iterator newIt = newProjSet.iterator(); + while (oldIt.hasNext() && newIt.hasNext()) { + IProject oldP = oldIt.next(); + IProject newP = newIt.next(); + if (!oldP.equals(newP)) { + des.setReferencedProjects(newProjSet.toArray(new IProject[newProjSet.size()])); + return true; + } + } return false; } @@ -1359,8 +1364,9 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager { Map newMap = newSettings.getExtensionMapCopy(); Map oldMap = oldSettings.getExtensionMapCopy(); - for(Iterator> iter = newMap.entrySet().iterator(); iter.hasNext();){ - Map.Entry entry = iter.next(); + Iterator> iter = newMap.entrySet().iterator(); + while(iter.hasNext()) { + Map.Entry entry = iter.next(); iter.remove(); CConfigExtensionReference[] oldRefs = oldMap.remove(entry.getKey()); if(oldRefs == null){ @@ -1368,7 +1374,7 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager { break; } - CConfigExtensionReference[] newRefs = (CConfigExtensionReference[])entry.getValue(); + CConfigExtensionReference[] newRefs = entry.getValue(); if(newRefs.length != oldRefs.length){ flags |= ICDescriptionDelta.EXT_REF; break; @@ -1554,11 +1560,10 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager { flags = ICDescriptionDelta.CFG_REF_ADDED; } else { boolean stop = false; - for(Iterator iter = newMap.entrySet().iterator(); iter.hasNext();){ - Map.Entry newEntry = (Map.Entry)iter.next(); - Object newProj = newEntry.getKey(); - Object newCfg = newEntry.getValue(); - Object oldCfg = oldMap.remove(newProj); + for (Map.Entry newEntry : newMap.entrySet()) { + String newProj = newEntry.getKey(); + String newCfg = newEntry.getValue(); + String oldCfg = oldMap.remove(newProj); if(!newCfg.equals(oldCfg)){ flags |= ICDescriptionDelta.CFG_REF_ADDED; if(oldCfg != null){ @@ -1942,6 +1947,7 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager { generateCElementDeltasFromResourceDelta(cProject, child, list); } } + break; case ICDescriptionDelta.ADDED: case ICDescriptionDelta.REMOVED: break; @@ -2478,14 +2484,15 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager { CResourceData parentRcData = null; for(parent = child.getParentContainer(); (parentRcData = (CResourceData)parent.getValue()).getType() != ICSettingBase.SETTING_FOLDER; - parent = parent.getParentContainer()); - if(!settingsCustomized(project, (CFolderData)parentRcData, (CFolderData)childRcData)){ - try { - data.removeResourceData(childRcData); - child.remove(); - modified = true; - } catch (CoreException e) { - CCorePlugin.log(e); + parent = parent.getParentContainer()) { + if(!settingsCustomized(project, (CFolderData)parentRcData, (CFolderData)childRcData)){ + try { + data.removeResourceData(childRcData); + child.remove(); + modified = true; + } catch (CoreException e) { + CCorePlugin.log(e); + } } } } else { @@ -2519,13 +2526,12 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager { HashMap, CLanguageData> parentMap = createExtSetToLDataMap(project, parentLDatas); HashMap, CLanguageData> childMap = createExtSetToLDataMap(project, childLDatas); CLanguageData parentLData, childLData; - for(Iterator iter = parentMap.entrySet().iterator(); iter.hasNext();){ - Map.Entry entry = (Map.Entry)iter.next(); + for (Map.Entry, CLanguageData> entry : parentMap.entrySet()) { childLData = childMap.get(entry.getKey()); if(childLData == null) return true; - parentLData = (CLanguageData)entry.getValue(); + parentLData = entry.getValue(); if(!langDatasEqual(parentLData, childLData)) return true; }