1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-07 09:46:02 +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; BuildConfigurationData baseCfgData = (BuildConfigurationData)base;
IConfiguration baseCfg = baseCfgData.getConfiguration(); IConfiguration baseCfg = baseCfgData.getConfiguration();
BuildConfigurationData appliedCfg; BuildConfigurationData appliedCfg;
if(context.getBaseConfigurationDataCacheState() && !baseCfg.isDirty()){ if(context.isBaseDataCached() && !baseCfg.isDirty()){
appliedCfg = baseCfgData; appliedCfg = baseCfgData;
context.setConfiguratoinDataModifiedState(false); context.setConfigurationSettingsFlags(IModificationContext.CFG_DATA_STORAGE_UNMODIFIED | IModificationContext.CFG_DATA_SETTINGS_UNMODIFIED);
} else { } else {
appliedCfg = writeConfiguration(des, baseCfgData); appliedCfg = writeConfiguration(des, baseCfgData);
context.setConfiguratoinDataModifiedState(true);
IManagedBuildInfo info = getBuildInfo(des); IManagedBuildInfo info = getBuildInfo(des);
ManagedProject mProj = (ManagedProject)info.getManagedProject(); ManagedProject mProj = (ManagedProject)info.getManagedProject();

View file

@ -16,6 +16,9 @@ import org.eclipse.core.resources.IWorkspaceRunnable;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
public interface IModificationContext { public interface IModificationContext {
public static final int CFG_DATA_SETTINGS_UNMODIFIED = 1;
public static final int CFG_DATA_STORAGE_UNMODIFIED = 1 << 1;
IProject getProject(); IProject getProject();
IProjectDescription getEclipseProjectDescription() throws CoreException; IProjectDescription getEclipseProjectDescription() throws CoreException;
@ -25,12 +28,19 @@ public interface IModificationContext {
void addWorkspaceRunnable(IWorkspaceRunnable runnable); void addWorkspaceRunnable(IWorkspaceRunnable runnable);
/** /**
* the CConfigurationDataProvider can call this method to indicate whether the * the CConfigurationDataProvider can call this method to indicate the
* ICConfigurationDescription settings were changed * CConfigurationData settings state.
* @param modified *
* @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.ICSourceEntry;
import org.eclipse.cdt.core.settings.model.ICStorageElement; import org.eclipse.cdt.core.settings.model.ICStorageElement;
import org.eclipse.cdt.core.settings.model.ICTargetPlatformSetting; 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.WriteAccessException;
import org.eclipse.cdt.core.settings.model.extension.CBuildData; import org.eclipse.cdt.core.settings.model.extension.CBuildData;
import org.eclipse.cdt.core.settings.model.extension.CConfigurationData; import org.eclipse.cdt.core.settings.model.extension.CConfigurationData;
@ -138,11 +139,13 @@ public class CConfigurationDescriptionCache extends CDefaultConfigurationData
fId = fData.getId(); fId = fData.getId();
fSettingsFactory = factory; fSettingsFactory = factory;
if(context.getConfiguratoinDataModifiedState() || fBaseCache == null) if((context.getAllConfigurationSettingsFlags() & IModificationContext.CFG_DATA_SETTINGS_UNMODIFIED) == 0 || fBaseCache == null){
copySettingsFrom(fData, true); copySettingsFrom(fData, true);
else { } else {
copySettingsFrom(fBaseCache, true); copySettingsFrom(fBaseCache, true);
modified = fSpecSettings.isModified(); modified = fSpecSettings.isModified();
if(!modified)
modified = (context.getAllConfigurationSettingsFlags() & IModificationContext.CFG_DATA_STORAGE_UNMODIFIED) == 0;
} }
fSettingsFactory = null; fSettingsFactory = null;

View file

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