1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-22 22:22:11 +02:00

1. Follow up for Fix for [Bug 191744] Switching build configurations should not save .cproject

2. Follow up for Fix for [Bug 186380] [New Project Model] Saving project description is slow
This commit is contained in:
Mikhail Sennikovsky 2007-08-09 15:08:43 +00:00
parent d8c16534f0
commit a8413fa96d
4 changed files with 40 additions and 21 deletions

View file

@ -147,12 +147,11 @@ public class ConfigurationDataProvider extends CConfigurationDataProvider implem
BuildConfigurationData baseCfgData = (BuildConfigurationData)base;
IConfiguration baseCfg = baseCfgData.getConfiguration();
BuildConfigurationData appliedCfg;
if(context.getBaseConfigurationDataCacheState() && !baseCfg.isDirty()){
if(context.isBaseDataCached() && !baseCfg.isDirty()){
appliedCfg = baseCfgData;
context.setConfiguratoinDataModifiedState(false);
context.setConfigurationSettingsFlags(IModificationContext.CFG_DATA_STORAGE_UNMODIFIED | IModificationContext.CFG_DATA_SETTINGS_UNMODIFIED);
} else {
appliedCfg = writeConfiguration(des, baseCfgData);
context.setConfiguratoinDataModifiedState(true);
IManagedBuildInfo info = getBuildInfo(des);
ManagedProject mProj = (ManagedProject)info.getManagedProject();

View file

@ -16,6 +16,9 @@ import org.eclipse.core.resources.IWorkspaceRunnable;
import org.eclipse.core.runtime.CoreException;
public interface IModificationContext {
public static final int CFG_DATA_SETTINGS_UNMODIFIED = 1;
public static final int CFG_DATA_STORAGE_UNMODIFIED = 1 << 1;
IProject getProject();
IProjectDescription getEclipseProjectDescription() throws CoreException;
@ -25,12 +28,19 @@ public interface IModificationContext {
void addWorkspaceRunnable(IWorkspaceRunnable runnable);
/**
* the CConfigurationDataProvider can call this method to indicate whether the
* ICConfigurationDescription settings were changed
* @param modified
* the CConfigurationDataProvider can call this method to indicate the
* CConfigurationData settings state.
*
* @param flags
*/
void setConfiguratoinDataModifiedState(boolean modified);
void setConfigurationSettingsFlags(int flags);
boolean getBaseConfigurationDataCacheState();
/**
* returns true if the cache data gets re-applied, i.e. there were no changes to the
* current configuration data performed from the core side
*
* @return boolean
*/
boolean isBaseDataCached();
}

View file

@ -32,6 +32,7 @@ import org.eclipse.cdt.core.settings.model.ICSettingObject;
import org.eclipse.cdt.core.settings.model.ICSourceEntry;
import org.eclipse.cdt.core.settings.model.ICStorageElement;
import org.eclipse.cdt.core.settings.model.ICTargetPlatformSetting;
import org.eclipse.cdt.core.settings.model.IModificationContext;
import org.eclipse.cdt.core.settings.model.WriteAccessException;
import org.eclipse.cdt.core.settings.model.extension.CBuildData;
import org.eclipse.cdt.core.settings.model.extension.CConfigurationData;
@ -138,11 +139,13 @@ public class CConfigurationDescriptionCache extends CDefaultConfigurationData
fId = fData.getId();
fSettingsFactory = factory;
if(context.getConfiguratoinDataModifiedState() || fBaseCache == null)
if((context.getAllConfigurationSettingsFlags() & IModificationContext.CFG_DATA_SETTINGS_UNMODIFIED) == 0 || fBaseCache == null){
copySettingsFrom(fData, true);
else {
} else {
copySettingsFrom(fBaseCache, true);
modified = fSpecSettings.isModified();
if(!modified)
modified = (context.getAllConfigurationSettingsFlags() & IModificationContext.CFG_DATA_STORAGE_UNMODIFIED) == 0;
}
fSettingsFactory = null;

View file

@ -19,11 +19,14 @@ import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
public final class SettingsContext implements IModificationContext{
private static final int USER_FLAGS_MASK = 0x0000ffff;
public static final int CFG_DATA_CACHED = 1 << 15;
private IProjectDescription fEDes;
private IProject fProject;
private CompositeWorkspaceRunnable fRunnable;
private boolean fCfgDataModifyState;
private boolean fCfgDataCacheState;
private int fFlags;
SettingsContext(IProject project){
fProject = project;
@ -34,8 +37,10 @@ public final class SettingsContext implements IModificationContext{
}
void init(CConfigurationDescriptionCache cfg){
fCfgDataModifyState = true;
fCfgDataCacheState = cfg.getBaseCache() != null;
int flags = 0;
if(cfg.getBaseCache() != null)
flags |= CFG_DATA_CACHED;
fFlags = flags;
}
IProjectDescription getEclipseProjectDescription(boolean create) throws CoreException{
@ -97,15 +102,17 @@ public final class SettingsContext implements IModificationContext{
return null;
}
public boolean getBaseConfigurationDataCacheState() {
return fCfgDataCacheState;
public int getAllConfigurationSettingsFlags() {
return fFlags;
}
public void setConfiguratoinDataModifiedState(boolean modified) {
fCfgDataModifyState = modified;
public void setConfigurationSettingsFlags(int flags) {
//system flags are read only;
flags &= USER_FLAGS_MASK;
fFlags |= flags;
}
public boolean getConfiguratoinDataModifiedState(){
return fCfgDataModifyState;
public boolean isBaseDataCached() {
return (fFlags & CFG_DATA_CACHED) != 0;
}
}