From 38ecfea632f85ed186af20738442f44433a2e866 Mon Sep 17 00:00:00 2001 From: David Salinas Date: Fri, 27 Apr 2012 15:19:40 -0400 Subject: [PATCH] Bug 375859 - Refresh scope becomes empty after closing/opening project if left to default --- .../ui/properties/RefreshPolicyTab.java | 7 ++- .../core/resources/RefreshScopeManager.java | 51 +++++++++---------- 2 files changed, 31 insertions(+), 27 deletions(-) diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/RefreshPolicyTab.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/RefreshPolicyTab.java index 569bb5ed68a..2bb36643def 100644 --- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/RefreshPolicyTab.java +++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/RefreshPolicyTab.java @@ -106,6 +106,10 @@ public class RefreshPolicyTab extends AbstractCBuildPropertyTab { private HashMap>> copyHashMap(HashMap>> source) { HashMap>> target = new HashMap>>(); + + if (source.size() == 0) + return null; + Iterator config_iterator = source.keySet().iterator(); // for each Configuration ... while (config_iterator.hasNext()) { @@ -137,7 +141,8 @@ public class RefreshPolicyTab extends AbstractCBuildPropertyTab { private void loadInfo() { HashMap>> configMap = fManager.getConfigurationToResourcesMap(fProject); - fConfigurationToResourcesToExclusionsMap = copyHashMap(configMap); + if ( (configMap != null) && !(configMap.isEmpty())) + fConfigurationToResourcesToExclusionsMap = copyHashMap(configMap); } private List getExclusions(String configName, IResource resource) { diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/RefreshScopeManager.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/RefreshScopeManager.java index d8941f98add..33af877063d 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/RefreshScopeManager.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/resources/RefreshScopeManager.java @@ -300,8 +300,8 @@ public class RefreshScopeManager { HashMap>> configMap = fProjToConfToResToExcluMap.get(project); if (configMap == null) { - configMap = new HashMap>>(); - fProjToConfToResToExcluMap.put(project,configMap); + initializeConfigMap(project); + configMap = fProjToConfToResToExcluMap.get(project); } return configMap; @@ -463,18 +463,15 @@ public class RefreshScopeManager { return; } - ICStorageElement storageElement = projectDescription.getStorage( - REFRESH_SCOPE_STORAGE_NAME, true); - - // walk the tree and load the settings - - String str = storageElement.getAttribute(VERSION_NUMBER_ATTRIBUTE_NAME); - int version = (str != null) ? Integer.valueOf(str) : 2; + ICStorageElement storageElement = projectDescription.getStorage(REFRESH_SCOPE_STORAGE_NAME, true); // iterate through the child nodes ICStorageElement[] children = storageElement.getChildren(); - - if (version == 1) { + + // walk the tree and load the settings + String str = storageElement.getAttribute(VERSION_NUMBER_ATTRIBUTE_NAME); + + if ((str == null) || (str.equals("1"))) { //$NON-NLS-1$ ICConfigurationDescription cfgDescs[] = projectDescription.getConfigurations(); for (ICConfigurationDescription cfgDesc : cfgDescs) loadResourceData(workspaceRoot, project, cfgDesc.getName(), children); @@ -489,7 +486,7 @@ public class RefreshScopeManager { // else there are no children, and this is a "new" project. // so initialize it. if (children.length == 0) { - initializeConfigMap(project); + getConfigurationToResourcesMap(project); // this will initialize the config map. } } } @@ -497,21 +494,23 @@ public class RefreshScopeManager { } private void initializeConfigMap(IProject project) { - getProjectToConfigurationToResourcesMap(); - HashMap>> configMap = fProjToConfToResToExcluMap.get(project); - if (configMap == null) { - configMap = new HashMap>>(); - CProjectDescriptionManager descriptionManager = CProjectDescriptionManager.getInstance(); - ICProjectDescription projectDescription = descriptionManager.getProjectDescription(project, false); - ICConfigurationDescription cfgDescs[] = projectDescription.getConfigurations(); - for (ICConfigurationDescription cfgDesc : cfgDescs) { - String configName = cfgDesc.getName(); - HashMap> resourceMap = new HashMap>(); - resourceMap.put(project, new LinkedList()); - configMap.put(configName, resourceMap); - } - fProjToConfToResToExcluMap.put(project,configMap); + + HashMap>> configMap = new HashMap>>(); + + // for each build configuration + CProjectDescriptionManager descriptionManager = CProjectDescriptionManager.getInstance(); + ICProjectDescription projectDescription = descriptionManager.getProjectDescription(project, false); + ICConfigurationDescription cfgDescs[] = projectDescription.getConfigurations(); + for (ICConfigurationDescription cfgDesc : cfgDescs) { + String configName = cfgDesc.getName(); + HashMap> resourceMap = new HashMap>(); + if (!fIsLoading) + resourceMap.put(project, new LinkedList()); + configMap.put(configName, resourceMap); } + + // and add this configMap to the project to config map. + fProjToConfToResToExcluMap.put(project,configMap); } /**