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

- Bug76407 #checkProjectRefChange should preserve order when setting referenced projects

- Bug252966 unintentional stray semi-colon added to removeNonCustomSettings
- Fix all warnings
This commit is contained in:
James Blackburn 2009-10-22 15:26:35 +00:00
parent 64781791db
commit 8789d929c1

View file

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