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:
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;
|
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();
|
||||||
|
|
|
@ -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();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue