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 2bb36643def..02686a762ec 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 @@ -18,13 +18,18 @@ import java.util.Iterator; import java.util.LinkedList; import java.util.List; + import org.eclipse.cdt.core.resources.ExclusionInstance; import org.eclipse.cdt.core.resources.ExclusionType; import org.eclipse.cdt.core.resources.RefreshExclusion; import org.eclipse.cdt.core.resources.RefreshScopeManager; +import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; +import org.eclipse.cdt.core.settings.model.ICProjectDescription; import org.eclipse.cdt.core.settings.model.ICResourceDescription; +import org.eclipse.cdt.managedbuilder.core.IConfiguration; import org.eclipse.cdt.managedbuilder.internal.ui.Messages; import org.eclipse.cdt.ui.CDTSharedImages; +import org.eclipse.cdt.ui.newui.CDTPropertyManager; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; @@ -66,7 +71,7 @@ import org.eclipse.ui.model.WorkbenchLabelProvider; * @since 8.0 */ @SuppressWarnings("restriction") -public class RefreshPolicyTab extends AbstractCBuildPropertyTab { +public class RefreshPolicyTab extends AbstractCBuildPropertyTab { private final Image IMG_FOLDER = CDTSharedImages.getImage(CDTSharedImages.IMG_OBJS_FOLDER); private final Image IMG_FILE = ManagedBuilderUIImages.get(ManagedBuilderUIImages.IMG_FILE_OBJ); @@ -93,6 +98,7 @@ public class RefreshPolicyTab extends AbstractCBuildPropertyTab { HashMap> resourceMap = fConfigurationToResourcesToExclusionsMap.get(configName); if (resourceMap == null) { resourceMap = new HashMap>(); + resourceMap.put(fProject, new ArrayList()); fConfigurationToResourcesToExclusionsMap.put(configName, resourceMap); } @@ -107,8 +113,8 @@ public class RefreshPolicyTab extends AbstractCBuildPropertyTab { HashMap>> target = new HashMap>>(); - if (source.size() == 0) - return null; + if (source.isEmpty()) + return target; Iterator config_iterator = source.keySet().iterator(); // for each Configuration ... @@ -125,8 +131,13 @@ public class RefreshPolicyTab extends AbstractCBuildPropertyTab { List target_exclusions = new LinkedList(); for (RefreshExclusion exclusion : source_exclusions) { // ADD each exclusion to the target exclusion list. - RefreshExclusion target_exclusion = (RefreshExclusion) exclusion.clone(); - target_exclusions.add(target_exclusion); + try { + RefreshExclusion target_exclusion = (RefreshExclusion) exclusion.clone(); + target_exclusions.add(target_exclusion); + } catch (CloneNotSupportedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } } // ADD the exclusion list for this resource @@ -135,13 +146,15 @@ public class RefreshPolicyTab extends AbstractCBuildPropertyTab { // ADD each resource. target.put(configName, target_resourceMap); + } + return target; } private void loadInfo() { HashMap>> configMap = fManager.getConfigurationToResourcesMap(fProject); - if ( (configMap != null) && !(configMap.isEmpty())) + if (configMap != null) fConfigurationToResourcesToExclusionsMap = copyHashMap(configMap); } @@ -151,6 +164,7 @@ public class RefreshPolicyTab extends AbstractCBuildPropertyTab { if(exclusions == null) { exclusions = new LinkedList(); resourceMap.put(resource, exclusions); + } return resourceMap.get(resource); } @@ -159,10 +173,10 @@ public class RefreshPolicyTab extends AbstractCBuildPropertyTab { * Wrapper for IResource/RefreshExclusion */ class _Entry { - //if this is a refresh exclusion, resourceToRefresh will be null + //if this is not a resource to refresh, resourceToRefresh will be null IResource resourceToRefresh = null; - //if this is a resource to refresh, exclusion will be null + //if this is not a refresh exclusion, exclusion will be null RefreshExclusion exclusion = null; //if this is a refresh exclusion, parent is the Exceptions node this is a child of @@ -300,6 +314,7 @@ public class RefreshPolicyTab extends AbstractCBuildPropertyTab { if (exclusions == null) { exclusions = new LinkedList(); getResourcesToExclusionsMap(getConfigName()).put(parent.resourceToRefresh, exclusions); + } exclusions.add(exclusion); } @@ -349,6 +364,8 @@ public class RefreshPolicyTab extends AbstractCBuildPropertyTab { } } + + /* (non-Javadoc) * @see org.eclipse.cdt.ui.newui.AbstractCPropertyTab#createControls(org.eclipse.swt.widgets.Composite) */ @@ -370,7 +387,7 @@ public class RefreshPolicyTab extends AbstractCBuildPropertyTab { Group g1 = setupGroup(usercomp, Messages.RefreshPolicyTab_resourcesGroupLabel, 2, GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL); fSrc = new ArrayList<_Entry>(); - generateTreeContent(); + generateTreeContent(); fTree = new TreeViewer(g1); fTree.getTree().setLayoutData(new GridData(GridData.FILL_BOTH)); @@ -505,6 +522,7 @@ public class RefreshPolicyTab extends AbstractCBuildPropertyTab { @Override protected void performDefaults() { // TODO Auto-generated method stub + } @Override @@ -521,6 +539,7 @@ public class RefreshPolicyTab extends AbstractCBuildPropertyTab { } } + @Override protected void updateButtons() { TreeItem[] sel = fTree.getTree().getSelection(); @@ -538,7 +557,7 @@ public class RefreshPolicyTab extends AbstractCBuildPropertyTab { @Override public Object[] getChildren(Object element) { ArrayList filteredChildren = new ArrayList(Arrays.asList(super.getChildren(element))); - Iterator iterator = getResourcesToExclusionsMap(getConfigName()).keySet().iterator(); //fResourcesToRefresh.iterator(); + Iterator iterator = getResourcesToExclusionsMap(getConfigName()).keySet().iterator(); while (iterator.hasNext()) { filteredChildren.remove(iterator.next()); @@ -676,12 +695,15 @@ public class RefreshPolicyTab extends AbstractCBuildPropertyTab { */ @Override protected void performOK() { + + Iterator config_iterator = fConfigurationToResourcesToExclusionsMap.keySet().iterator(); while (config_iterator.hasNext()) { String configName = config_iterator.next(); - fManager.setResourcesToExclusionsMap(fProject, configName, getResourcesToExclusionsMap(configName)); + fManager.setResourcesToExclusionsMap(fProject, configName, getResourcesToExclusionsMap(configName)); + } try { fManager.persistSettings(getResDesc().getConfiguration().getProjectDescription()); diff --git a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/resources/tests/RefreshScopeTests.java b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/resources/tests/RefreshScopeTests.java index 81c4628ec69..c6d45b6ffff 100644 --- a/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/resources/tests/RefreshScopeTests.java +++ b/core/org.eclipse.cdt.core.tests/misc/org/eclipse/cdt/core/resources/tests/RefreshScopeTests.java @@ -27,10 +27,12 @@ import org.eclipse.cdt.core.resources.ExclusionInstance; import org.eclipse.cdt.core.resources.ExclusionType; import org.eclipse.cdt.core.resources.RefreshExclusion; import org.eclipse.cdt.core.resources.RefreshScopeManager; +import org.eclipse.cdt.core.settings.model.ICConfigurationDescription; import org.eclipse.cdt.core.settings.model.ICProjectDescription; import org.eclipse.cdt.core.testplugin.CProjectHelper; import org.eclipse.cdt.core.testplugin.CTestPlugin; import org.eclipse.cdt.internal.core.resources.ResourceExclusion; +import org.eclipse.cdt.internal.core.settings.model.CProjectDescriptionManager; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; @@ -406,8 +408,13 @@ public class RefreshScopeTests extends TestCase { IResource config1_resource = fProject; - manager.addResourceToRefresh(fProject, config1, config1_resource); + CProjectDescriptionManager descriptionManager = CProjectDescriptionManager.getInstance(); + ICProjectDescription projectDescription = descriptionManager.getProjectDescription(fProject, false); + ICConfigurationDescription conf = projectDescription.getActiveConfiguration(); + String conf_name = conf.getName(); + manager.addResourceToRefresh(fProject, conf_name, config1_resource); + // create a series of nested exclusions that include/exclude certain folders // will be included/excluded as follows /* @@ -428,7 +435,8 @@ public class RefreshScopeTests extends TestCase { ExclusionInstance instance2 = new ExclusionInstance(); instance2.setResource(fFolder2); exclusion1.addExclusionInstance(instance2); - manager.addExclusion(fProject, config1, config1_resource, exclusion1); + manager.addExclusion(fProject, conf_name, config1_resource, exclusion1); + ResourceExclusion exclusion2 = new ResourceExclusion(); ExclusionInstance instance3 = new ExclusionInstance(); @@ -444,14 +452,15 @@ public class RefreshScopeTests extends TestCase { // now check and see if the right folders are included/excluded - assertEquals(true, manager.shouldResourceBeRefreshed(config1, config1_resource)); - assertEquals(false, manager.shouldResourceBeRefreshed(config1, fFolder1)); - assertEquals(false, manager.shouldResourceBeRefreshed(config1, fFolder2)); - assertEquals(true, manager.shouldResourceBeRefreshed(config1, fFolder3)); - assertEquals(false, manager.shouldResourceBeRefreshed(config1, fFolder4)); - assertEquals(true, manager.shouldResourceBeRefreshed(config1, fFolder5)); - assertEquals(false, manager.shouldResourceBeRefreshed(config1, fFolder6)); - + assertEquals(true, manager.shouldResourceBeRefreshed(conf_name, config1_resource)); + assertEquals(false, manager.shouldResourceBeRefreshed(conf_name, fFolder1)); + assertEquals(false, manager.shouldResourceBeRefreshed(conf_name, fFolder2)); + assertEquals(true, manager.shouldResourceBeRefreshed(conf_name, fFolder3)); + assertEquals(false, manager.shouldResourceBeRefreshed(conf_name, fFolder4)); + assertEquals(true, manager.shouldResourceBeRefreshed(conf_name, fFolder5)); + assertEquals(false, manager.shouldResourceBeRefreshed(conf_name, fFolder6)); + + // now let's create a bunch of files in these directories using java.io.File (so that we don't get // resource deltas happening), and refresh the project according to the policy. We should only see the files // in the same folders above when consulting the resource system 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 33af877063d..c3cb38ae4e6 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 @@ -148,8 +148,10 @@ public class RefreshScopeManager { || (delta.getKind() == IResourceDelta.CHANGED && ((delta .getFlags() & IResourceDelta.OPEN) != 0))) { + fIsLoading = true; loadSettings(ResourcesPlugin.getWorkspace() .getRoot(), project); + fIsLoading = false; return false; } @@ -344,17 +346,17 @@ public class RefreshScopeManager { @Override public void run(IProgressMonitor monitor) throws CoreException { - HashMap>> configMap = getConfigurationToResourcesMap(project); - - Iterator it = configMap.keySet().iterator(); - while (it.hasNext()) { - String configName = it.next(); - List resourcesToRefresh = getResourcesToRefresh(project,configName); - for (IResource resource : resourcesToRefresh) { - List exclusions = getExclusions(project,configName,resource); - refreshResources(configName, resource, exclusions, monitor); - } - } + + CProjectDescriptionManager descriptionManager = CProjectDescriptionManager + .getInstance(); + ICProjectDescription projectDescription = descriptionManager.getProjectDescription(project, false); + ICConfigurationDescription active_conf = projectDescription.getActiveConfiguration(); + String name = active_conf.getName(); + List resourcesToRefresh = getResourcesToRefresh(project,name); + for (IResource resource : resourcesToRefresh) { + List exclusions = getExclusions(project,name,resource); + refreshResources(name, resource, exclusions, monitor); + } } }; @@ -723,8 +725,7 @@ public class RefreshScopeManager { /** * @since 5.4 */ - public synchronized void setResourcesToExclusionsMap(IProject project, String configName, HashMap> source_resourceMap) { // List resources) { - + public synchronized void setResourcesToExclusionsMap(IProject project, String configName, HashMap> source_resourceMap) { HashMap> target_resourceMap = getResourcesToExclusionsMap(project,configName); target_resourceMap.clear();