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:
parent
a45da7ed8a
commit
2e27470c13
3 changed files with 66 additions and 34 deletions
|
@ -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());
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue