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:
parent
d8c16534f0
commit
a8413fa96d
4 changed files with 40 additions and 21 deletions
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue