1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-20 07:25:23 +02:00

Bug 375859 - Refresh scope becomes empty after closing/opening project

if left to default
This commit is contained in:
David Salinas 2012-05-09 11:23:14 -04:00 committed by Vivian Kong
parent a45da7ed8a
commit 2e27470c13
3 changed files with 66 additions and 34 deletions

View file

@ -18,13 +18,18 @@ import java.util.Iterator;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import org.eclipse.cdt.core.resources.ExclusionInstance; import org.eclipse.cdt.core.resources.ExclusionInstance;
import org.eclipse.cdt.core.resources.ExclusionType; import org.eclipse.cdt.core.resources.ExclusionType;
import org.eclipse.cdt.core.resources.RefreshExclusion; import org.eclipse.cdt.core.resources.RefreshExclusion;
import org.eclipse.cdt.core.resources.RefreshScopeManager; 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.core.settings.model.ICResourceDescription;
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
import org.eclipse.cdt.managedbuilder.internal.ui.Messages; import org.eclipse.cdt.managedbuilder.internal.ui.Messages;
import org.eclipse.cdt.ui.CDTSharedImages; import org.eclipse.cdt.ui.CDTSharedImages;
import org.eclipse.cdt.ui.newui.CDTPropertyManager;
import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.resources.ResourcesPlugin;
@ -93,6 +98,7 @@ public class RefreshPolicyTab extends AbstractCBuildPropertyTab {
HashMap<IResource, List<RefreshExclusion>> resourceMap = fConfigurationToResourcesToExclusionsMap.get(configName); HashMap<IResource, List<RefreshExclusion>> resourceMap = fConfigurationToResourcesToExclusionsMap.get(configName);
if (resourceMap == null) { if (resourceMap == null) {
resourceMap = new HashMap<IResource, List<RefreshExclusion>>(); resourceMap = new HashMap<IResource, List<RefreshExclusion>>();
resourceMap.put(fProject, new ArrayList<RefreshExclusion>());
fConfigurationToResourcesToExclusionsMap.put(configName, resourceMap); fConfigurationToResourcesToExclusionsMap.put(configName, resourceMap);
} }
@ -107,8 +113,8 @@ public class RefreshPolicyTab extends AbstractCBuildPropertyTab {
HashMap<String, HashMap<IResource, List<RefreshExclusion>>> target = new HashMap<String, HashMap<IResource, List<RefreshExclusion>>>(); HashMap<String, HashMap<IResource, List<RefreshExclusion>>> target = new HashMap<String, HashMap<IResource, List<RefreshExclusion>>>();
if (source.size() == 0) if (source.isEmpty())
return null; return target;
Iterator<String> config_iterator = source.keySet().iterator(); Iterator<String> config_iterator = source.keySet().iterator();
// for each Configuration ... // for each Configuration ...
@ -125,8 +131,13 @@ public class RefreshPolicyTab extends AbstractCBuildPropertyTab {
List<RefreshExclusion> target_exclusions = new LinkedList<RefreshExclusion>(); List<RefreshExclusion> target_exclusions = new LinkedList<RefreshExclusion>();
for (RefreshExclusion exclusion : source_exclusions) { for (RefreshExclusion exclusion : source_exclusions) {
// ADD each exclusion to the target exclusion list. // ADD each exclusion to the target exclusion list.
RefreshExclusion target_exclusion = (RefreshExclusion) exclusion.clone(); try {
target_exclusions.add(target_exclusion); 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 // ADD the exclusion list for this resource
@ -135,13 +146,15 @@ public class RefreshPolicyTab extends AbstractCBuildPropertyTab {
// ADD each resource. // ADD each resource.
target.put(configName, target_resourceMap); target.put(configName, target_resourceMap);
} }
return target; return target;
} }
private void loadInfo() { private void loadInfo() {
HashMap<String, HashMap<IResource, List<RefreshExclusion>>> configMap = fManager.getConfigurationToResourcesMap(fProject); HashMap<String, HashMap<IResource, List<RefreshExclusion>>> configMap = fManager.getConfigurationToResourcesMap(fProject);
if ( (configMap != null) && !(configMap.isEmpty())) if (configMap != null)
fConfigurationToResourcesToExclusionsMap = copyHashMap(configMap); fConfigurationToResourcesToExclusionsMap = copyHashMap(configMap);
} }
@ -151,6 +164,7 @@ public class RefreshPolicyTab extends AbstractCBuildPropertyTab {
if(exclusions == null) { if(exclusions == null) {
exclusions = new LinkedList<RefreshExclusion>(); exclusions = new LinkedList<RefreshExclusion>();
resourceMap.put(resource, exclusions); resourceMap.put(resource, exclusions);
} }
return resourceMap.get(resource); return resourceMap.get(resource);
} }
@ -159,10 +173,10 @@ public class RefreshPolicyTab extends AbstractCBuildPropertyTab {
* Wrapper for IResource/RefreshExclusion * Wrapper for IResource/RefreshExclusion
*/ */
class _Entry { 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; 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; RefreshExclusion exclusion = null;
//if this is a refresh exclusion, parent is the Exceptions node this is a child of //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) { if (exclusions == null) {
exclusions = new LinkedList<RefreshExclusion>(); exclusions = new LinkedList<RefreshExclusion>();
getResourcesToExclusionsMap(getConfigName()).put(parent.resourceToRefresh, exclusions); getResourcesToExclusionsMap(getConfigName()).put(parent.resourceToRefresh, exclusions);
} }
exclusions.add(exclusion); exclusions.add(exclusion);
} }
@ -349,6 +364,8 @@ public class RefreshPolicyTab extends AbstractCBuildPropertyTab {
} }
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.cdt.ui.newui.AbstractCPropertyTab#createControls(org.eclipse.swt.widgets.Composite) * @see org.eclipse.cdt.ui.newui.AbstractCPropertyTab#createControls(org.eclipse.swt.widgets.Composite)
*/ */
@ -505,6 +522,7 @@ public class RefreshPolicyTab extends AbstractCBuildPropertyTab {
@Override @Override
protected void performDefaults() { protected void performDefaults() {
// TODO Auto-generated method stub // TODO Auto-generated method stub
} }
@Override @Override
@ -521,6 +539,7 @@ public class RefreshPolicyTab extends AbstractCBuildPropertyTab {
} }
} }
@Override @Override
protected void updateButtons() { protected void updateButtons() {
TreeItem[] sel = fTree.getTree().getSelection(); TreeItem[] sel = fTree.getTree().getSelection();
@ -538,7 +557,7 @@ public class RefreshPolicyTab extends AbstractCBuildPropertyTab {
@Override @Override
public Object[] getChildren(Object element) { public Object[] getChildren(Object element) {
ArrayList<Object> filteredChildren = new ArrayList<Object>(Arrays.asList(super.getChildren(element))); ArrayList<Object> filteredChildren = new ArrayList<Object>(Arrays.asList(super.getChildren(element)));
Iterator<IResource> iterator = getResourcesToExclusionsMap(getConfigName()).keySet().iterator(); //fResourcesToRefresh.iterator(); Iterator<IResource> iterator = getResourcesToExclusionsMap(getConfigName()).keySet().iterator();
while (iterator.hasNext()) { while (iterator.hasNext()) {
filteredChildren.remove(iterator.next()); filteredChildren.remove(iterator.next());
@ -676,12 +695,15 @@ public class RefreshPolicyTab extends AbstractCBuildPropertyTab {
*/ */
@Override @Override
protected void performOK() { protected void performOK() {
Iterator<String> config_iterator = fConfigurationToResourcesToExclusionsMap.keySet().iterator(); Iterator<String> config_iterator = fConfigurationToResourcesToExclusionsMap.keySet().iterator();
while (config_iterator.hasNext()) { while (config_iterator.hasNext()) {
String configName = config_iterator.next(); String configName = config_iterator.next();
fManager.setResourcesToExclusionsMap(fProject, configName, getResourcesToExclusionsMap(configName)); fManager.setResourcesToExclusionsMap(fProject, configName, getResourcesToExclusionsMap(configName));
} }
try { try {
fManager.persistSettings(getResDesc().getConfiguration().getProjectDescription()); fManager.persistSettings(getResDesc().getConfiguration().getProjectDescription());

View file

@ -27,10 +27,12 @@ import org.eclipse.cdt.core.resources.ExclusionInstance;
import org.eclipse.cdt.core.resources.ExclusionType; import org.eclipse.cdt.core.resources.ExclusionType;
import org.eclipse.cdt.core.resources.RefreshExclusion; import org.eclipse.cdt.core.resources.RefreshExclusion;
import org.eclipse.cdt.core.resources.RefreshScopeManager; 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.ICProjectDescription;
import org.eclipse.cdt.core.testplugin.CProjectHelper; import org.eclipse.cdt.core.testplugin.CProjectHelper;
import org.eclipse.cdt.core.testplugin.CTestPlugin; import org.eclipse.cdt.core.testplugin.CTestPlugin;
import org.eclipse.cdt.internal.core.resources.ResourceExclusion; 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.IFolder;
import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResource;
@ -406,7 +408,12 @@ public class RefreshScopeTests extends TestCase {
IResource config1_resource = fProject; 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 // create a series of nested exclusions that include/exclude certain folders
// will be included/excluded as follows // will be included/excluded as follows
@ -428,7 +435,8 @@ public class RefreshScopeTests extends TestCase {
ExclusionInstance instance2 = new ExclusionInstance(); ExclusionInstance instance2 = new ExclusionInstance();
instance2.setResource(fFolder2); instance2.setResource(fFolder2);
exclusion1.addExclusionInstance(instance2); exclusion1.addExclusionInstance(instance2);
manager.addExclusion(fProject, config1, config1_resource, exclusion1); manager.addExclusion(fProject, conf_name, config1_resource, exclusion1);
ResourceExclusion exclusion2 = new ResourceExclusion(); ResourceExclusion exclusion2 = new ResourceExclusion();
ExclusionInstance instance3 = new ExclusionInstance(); ExclusionInstance instance3 = new ExclusionInstance();
@ -444,13 +452,14 @@ public class RefreshScopeTests extends TestCase {
// now check and see if the right folders are included/excluded // now check and see if the right folders are included/excluded
assertEquals(true, manager.shouldResourceBeRefreshed(config1, config1_resource)); assertEquals(true, manager.shouldResourceBeRefreshed(conf_name, config1_resource));
assertEquals(false, manager.shouldResourceBeRefreshed(config1, fFolder1)); assertEquals(false, manager.shouldResourceBeRefreshed(conf_name, fFolder1));
assertEquals(false, manager.shouldResourceBeRefreshed(config1, fFolder2)); assertEquals(false, manager.shouldResourceBeRefreshed(conf_name, fFolder2));
assertEquals(true, manager.shouldResourceBeRefreshed(config1, fFolder3)); assertEquals(true, manager.shouldResourceBeRefreshed(conf_name, fFolder3));
assertEquals(false, manager.shouldResourceBeRefreshed(config1, fFolder4)); assertEquals(false, manager.shouldResourceBeRefreshed(conf_name, fFolder4));
assertEquals(true, manager.shouldResourceBeRefreshed(config1, fFolder5)); assertEquals(true, manager.shouldResourceBeRefreshed(conf_name, fFolder5));
assertEquals(false, manager.shouldResourceBeRefreshed(config1, fFolder6)); 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 // 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 // resource deltas happening), and refresh the project according to the policy. We should only see the files

View file

@ -148,8 +148,10 @@ public class RefreshScopeManager {
|| (delta.getKind() == IResourceDelta.CHANGED && ((delta || (delta.getKind() == IResourceDelta.CHANGED && ((delta
.getFlags() & IResourceDelta.OPEN) != 0))) { .getFlags() & IResourceDelta.OPEN) != 0))) {
fIsLoading = true;
loadSettings(ResourcesPlugin.getWorkspace() loadSettings(ResourcesPlugin.getWorkspace()
.getRoot(), project); .getRoot(), project);
fIsLoading = false;
return false; return false;
} }
@ -344,16 +346,16 @@ public class RefreshScopeManager {
@Override @Override
public void run(IProgressMonitor monitor) throws CoreException { public void run(IProgressMonitor monitor) throws CoreException {
HashMap<String,HashMap<IResource, List<RefreshExclusion>>> configMap = getConfigurationToResourcesMap(project);
Iterator<String> it = configMap.keySet().iterator(); CProjectDescriptionManager descriptionManager = CProjectDescriptionManager
while (it.hasNext()) { .getInstance();
String configName = it.next(); ICProjectDescription projectDescription = descriptionManager.getProjectDescription(project, false);
List<IResource> resourcesToRefresh = getResourcesToRefresh(project,configName); ICConfigurationDescription active_conf = projectDescription.getActiveConfiguration();
for (IResource resource : resourcesToRefresh) { String name = active_conf.getName();
List<RefreshExclusion> exclusions = getExclusions(project,configName,resource); List<IResource> resourcesToRefresh = getResourcesToRefresh(project,name);
refreshResources(configName, resource, exclusions, monitor); for (IResource resource : resourcesToRefresh) {
} List<RefreshExclusion> exclusions = getExclusions(project,name,resource);
refreshResources(name, resource, exclusions, monitor);
} }
} }
}; };
@ -723,8 +725,7 @@ public class RefreshScopeManager {
/** /**
* @since 5.4 * @since 5.4
*/ */
public synchronized void setResourcesToExclusionsMap(IProject project, String configName, HashMap<IResource, List<RefreshExclusion>> source_resourceMap) { // List<IResource> resources) { public synchronized void setResourcesToExclusionsMap(IProject project, String configName, HashMap<IResource, List<RefreshExclusion>> source_resourceMap) {
HashMap<IResource, List<RefreshExclusion>> target_resourceMap = getResourcesToExclusionsMap(project,configName); HashMap<IResource, List<RefreshExclusion>> target_resourceMap = getResourcesToExclusionsMap(project,configName);
target_resourceMap.clear(); target_resourceMap.clear();