mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-04 06:45:43 +02:00
1. Fix for [Bug 191744] Switching build configurations should not save .cproject
2. Fix for [Bug 186380] [New Project Model] Saving project description is slow
This commit is contained in:
parent
c11d44bf9e
commit
d8c16534f0
9 changed files with 155 additions and 82 deletions
|
@ -960,7 +960,7 @@ public class Configuration extends BuildObject implements IConfiguration, IBuild
|
||||||
LanguageSettingEntriesSerializer.serializeEntries(sourceEntries, el);
|
LanguageSettingEntriesSerializer.serializeEntries(sourceEntries, el);
|
||||||
}
|
}
|
||||||
// I am clean now
|
// I am clean now
|
||||||
isDirty = false;
|
setDirty(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -100,8 +100,8 @@ public class ConfigurationDataProvider extends CConfigurationDataProvider implem
|
||||||
|
|
||||||
}
|
}
|
||||||
static BuildConfigurationData writeConfiguration(ICConfigurationDescription des,
|
static BuildConfigurationData writeConfiguration(ICConfigurationDescription des,
|
||||||
CConfigurationData base) throws CoreException {
|
BuildConfigurationData base) throws CoreException {
|
||||||
BuildConfigurationData appliedCfg = (BuildConfigurationData)base;
|
BuildConfigurationData appliedCfg = base;
|
||||||
ICStorageElement rootElement = des.getStorage(BUILD_SYSTEM_DATA_MODULE_NAME, true);
|
ICStorageElement rootElement = des.getStorage(BUILD_SYSTEM_DATA_MODULE_NAME, true);
|
||||||
rootElement.clear();
|
rootElement.clear();
|
||||||
rootElement.setAttribute(VERSION_ATTRIBUTE, ManagedBuildManager.getVersion().toString());
|
rootElement.setAttribute(VERSION_ATTRIBUTE, ManagedBuildManager.getVersion().toString());
|
||||||
|
@ -122,7 +122,7 @@ public class ConfigurationDataProvider extends CConfigurationDataProvider implem
|
||||||
protected CConfigurationData applyPreferences(
|
protected CConfigurationData applyPreferences(
|
||||||
ICConfigurationDescription des, CConfigurationData base) throws CoreException{
|
ICConfigurationDescription des, CConfigurationData base) throws CoreException{
|
||||||
|
|
||||||
BuildConfigurationData appliedCfg = writeConfiguration(des, base);
|
BuildConfigurationData appliedCfg = writeConfiguration(des, (BuildConfigurationData)base);
|
||||||
|
|
||||||
IConfiguration cfg = ((BuildConfigurationData)base).getConfiguration();
|
IConfiguration cfg = ((BuildConfigurationData)base).getConfiguration();
|
||||||
try {
|
try {
|
||||||
|
@ -144,7 +144,15 @@ public class ConfigurationDataProvider extends CConfigurationDataProvider implem
|
||||||
if(des.isPreferenceConfiguration())
|
if(des.isPreferenceConfiguration())
|
||||||
return applyPreferences(des, base);
|
return applyPreferences(des, base);
|
||||||
|
|
||||||
BuildConfigurationData appliedCfg = writeConfiguration(des, base);
|
BuildConfigurationData baseCfgData = (BuildConfigurationData)base;
|
||||||
|
IConfiguration baseCfg = baseCfgData.getConfiguration();
|
||||||
|
BuildConfigurationData appliedCfg;
|
||||||
|
if(context.getBaseConfigurationDataCacheState() && !baseCfg.isDirty()){
|
||||||
|
appliedCfg = baseCfgData;
|
||||||
|
context.setConfiguratoinDataModifiedState(false);
|
||||||
|
} else {
|
||||||
|
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();
|
||||||
|
@ -175,7 +183,7 @@ public class ConfigurationDataProvider extends CConfigurationDataProvider implem
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return appliedCfg;
|
return appliedCfg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,4 +23,14 @@ public interface IModificationContext {
|
||||||
void setEclipseProjectDescription(IProjectDescription eDes) throws CoreException;
|
void setEclipseProjectDescription(IProjectDescription eDes) throws CoreException;
|
||||||
|
|
||||||
void addWorkspaceRunnable(IWorkspaceRunnable runnable);
|
void addWorkspaceRunnable(IWorkspaceRunnable runnable);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the CConfigurationDataProvider can call this method to indicate whether the
|
||||||
|
* ICConfigurationDescription settings were changed
|
||||||
|
* @param modified
|
||||||
|
*/
|
||||||
|
void setConfiguratoinDataModifiedState(boolean modified);
|
||||||
|
|
||||||
|
boolean getBaseConfigurationDataCacheState();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,6 @@ 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;
|
||||||
|
@ -60,6 +59,7 @@ public class CConfigurationDescriptionCache extends CDefaultConfigurationData
|
||||||
private List fChildList = new ArrayList();
|
private List fChildList = new ArrayList();
|
||||||
private CConfigurationSpecSettings fSpecSettings;
|
private CConfigurationSpecSettings fSpecSettings;
|
||||||
private CConfigurationData fData;
|
private CConfigurationData fData;
|
||||||
|
private CConfigurationDescriptionCache fBaseCache;
|
||||||
private ICSourceEntry fProjSourceEntries[];
|
private ICSourceEntry fProjSourceEntries[];
|
||||||
private StorableCdtVariables fMacros;
|
private StorableCdtVariables fMacros;
|
||||||
private boolean fDataLoadded;
|
private boolean fDataLoadded;
|
||||||
|
@ -105,11 +105,12 @@ public class CConfigurationDescriptionCache extends CDefaultConfigurationData
|
||||||
// fInitializing = false;
|
// fInitializing = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
CConfigurationDescriptionCache(ICConfigurationDescription baseDescription, CConfigurationData base, CConfigurationSpecSettings settingsBase, CProjectDescription parent, ICStorageElement rootEl) throws CoreException {
|
CConfigurationDescriptionCache(ICConfigurationDescription baseDescription, CConfigurationData base, CConfigurationDescriptionCache baseCache, CConfigurationSpecSettings settingsBase, CProjectDescription parent, ICStorageElement rootEl) throws CoreException {
|
||||||
super(base.getId(), base.getName(), null);
|
super(base.getId(), base.getName(), null);
|
||||||
fInitializing = true;
|
fInitializing = true;
|
||||||
fParent = parent;
|
fParent = parent;
|
||||||
fSpecSettings = new CConfigurationSpecSettings(this, settingsBase, rootEl);
|
fSpecSettings = new CConfigurationSpecSettings(this, settingsBase, rootEl);
|
||||||
|
fSpecSettings.setModified(settingsBase.isModified());
|
||||||
fBaseDescription = baseDescription;
|
fBaseDescription = baseDescription;
|
||||||
if(base instanceof CConfigurationDescriptionCache){
|
if(base instanceof CConfigurationDescriptionCache){
|
||||||
fData = ((CConfigurationDescriptionCache)base).getConfigurationData();
|
fData = ((CConfigurationDescriptionCache)base).getConfigurationData();
|
||||||
|
@ -119,23 +120,17 @@ public class CConfigurationDescriptionCache extends CDefaultConfigurationData
|
||||||
// base = CProjectDescriptionManager.getInstance().applyData(this, baseDescription, base);
|
// base = CProjectDescriptionManager.getInstance().applyData(this, baseDescription, base);
|
||||||
// fData = base;
|
// fData = base;
|
||||||
}
|
}
|
||||||
// fDataLoadded = true;
|
|
||||||
// fName = fData.getName();
|
fBaseCache = baseCache;
|
||||||
// fId = fData.getId();
|
|
||||||
//
|
|
||||||
// copySettingsFrom(base, true);
|
|
||||||
//
|
|
||||||
// ICdtVariable vars[] = CdtVariableManager.getDefault().getVariables(this);
|
|
||||||
// fMacros = new StorableCdtVariables(vars, true);
|
|
||||||
// if(saving)
|
|
||||||
// fSpecSettings.serialize();
|
|
||||||
//
|
|
||||||
// fInitializing = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void applyData(CSettingEntryFactory factory, IModificationContext context) throws CoreException{
|
CConfigurationDescriptionCache getBaseCache(){
|
||||||
if(fBaseDescription == null)
|
return fBaseCache;
|
||||||
return;
|
}
|
||||||
|
|
||||||
|
boolean applyData(CSettingEntryFactory factory, SettingsContext context) throws CoreException{
|
||||||
|
boolean modified = true;
|
||||||
|
if(fBaseDescription != null){
|
||||||
|
|
||||||
fData = CProjectDescriptionManager.getInstance().applyData(this, fBaseDescription, fData, context, null);
|
fData = CProjectDescriptionManager.getInstance().applyData(this, fBaseDescription, fData, context, null);
|
||||||
fDataLoadded = true;
|
fDataLoadded = true;
|
||||||
|
@ -143,17 +138,26 @@ public class CConfigurationDescriptionCache extends CDefaultConfigurationData
|
||||||
fId = fData.getId();
|
fId = fData.getId();
|
||||||
fSettingsFactory = factory;
|
fSettingsFactory = factory;
|
||||||
|
|
||||||
|
if(context.getConfiguratoinDataModifiedState() || fBaseCache == null)
|
||||||
copySettingsFrom(fData, true);
|
copySettingsFrom(fData, true);
|
||||||
|
else {
|
||||||
|
copySettingsFrom(fBaseCache, true);
|
||||||
|
modified = fSpecSettings.isModified();
|
||||||
|
}
|
||||||
|
|
||||||
fSettingsFactory = null;
|
fSettingsFactory = null;
|
||||||
|
|
||||||
ICdtVariable vars[] = CdtVariableManager.getDefault().getVariables(this);
|
ICdtVariable vars[] = CdtVariableManager.getDefault().getVariables(this);
|
||||||
fMacros = new StorableCdtVariables(vars, true);
|
fMacros = new StorableCdtVariables(vars, true);
|
||||||
// if(saving)
|
|
||||||
fSpecSettings.serialize();
|
fSpecSettings.serialize();
|
||||||
|
fSpecSettings.setModified(false);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
fBaseDescription = null;
|
fBaseDescription = null;
|
||||||
// fInitializing = false;
|
fBaseCache = null;
|
||||||
|
|
||||||
|
return modified;
|
||||||
}
|
}
|
||||||
|
|
||||||
CSettingEntryFactory getSettingsFactory(){
|
CSettingEntryFactory getSettingsFactory(){
|
||||||
|
|
|
@ -488,10 +488,13 @@ public class CConfigurationSpecSettings implements ICSettingsStorage{
|
||||||
return fExtSettingsProvider.isModified();
|
return fExtSettingsProvider.isModified();
|
||||||
}
|
}
|
||||||
|
|
||||||
void setModified(){
|
void setModified(boolean modified){
|
||||||
if(isReadOnly())
|
if(isReadOnly())
|
||||||
throw ExceptionFactory.createIsReadOnlyException();
|
throw ExceptionFactory.createIsReadOnlyException();
|
||||||
fIsModified = true;
|
fIsModified = modified;
|
||||||
|
}
|
||||||
|
void setModified(){
|
||||||
|
setModified(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map getSessionPropertiesMap(boolean create){
|
private Map getSessionPropertiesMap(boolean create){
|
||||||
|
|
|
@ -23,7 +23,6 @@ import org.eclipse.cdt.core.settings.model.ICSettingContainer;
|
||||||
import org.eclipse.cdt.core.settings.model.ICSettingObject;
|
import org.eclipse.cdt.core.settings.model.ICSettingObject;
|
||||||
import org.eclipse.cdt.core.settings.model.ICSettingsStorage;
|
import org.eclipse.cdt.core.settings.model.ICSettingsStorage;
|
||||||
import org.eclipse.cdt.core.settings.model.ICStorageElement;
|
import org.eclipse.cdt.core.settings.model.ICStorageElement;
|
||||||
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.CConfigurationData;
|
import org.eclipse.cdt.core.settings.model.extension.CConfigurationData;
|
||||||
import org.eclipse.cdt.core.settings.model.util.CSettingEntryFactory;
|
import org.eclipse.cdt.core.settings.model.util.CSettingEntryFactory;
|
||||||
|
@ -206,15 +205,17 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
|
||||||
// fIsLoadding = false;
|
// fIsLoadding = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void applyDatas(IModificationContext context){
|
boolean applyDatas(SettingsContext context){
|
||||||
if(!fIsReadOnly || !fIsApplying)
|
if(!fIsReadOnly || !fIsApplying)
|
||||||
return;
|
return false;
|
||||||
|
|
||||||
CSettingEntryFactory factory = new CSettingEntryFactory();
|
CSettingEntryFactory factory = new CSettingEntryFactory();
|
||||||
|
boolean modified = false;
|
||||||
for(Iterator iter = fCfgMap.values().iterator(); iter.hasNext();){
|
for(Iterator iter = fCfgMap.values().iterator(); iter.hasNext();){
|
||||||
CConfigurationDescriptionCache cache = (CConfigurationDescriptionCache)iter.next();
|
CConfigurationDescriptionCache cache = (CConfigurationDescriptionCache)iter.next();
|
||||||
try {
|
try {
|
||||||
cache.applyData(factory, context);
|
if(cache.applyData(factory, context))
|
||||||
|
modified = true;
|
||||||
} catch (CoreException e) {
|
} catch (CoreException e) {
|
||||||
CCorePlugin.log(e);
|
CCorePlugin.log(e);
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
@ -227,6 +228,8 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
|
||||||
factory.clear();
|
factory.clear();
|
||||||
|
|
||||||
// fIsApplying = false;
|
// fIsApplying = false;
|
||||||
|
|
||||||
|
return modified;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -280,10 +283,12 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
|
||||||
IInternalCCfgInfo cfgDes = (IInternalCCfgInfo)iter.next();
|
IInternalCCfgInfo cfgDes = (IInternalCCfgInfo)iter.next();
|
||||||
if(fIsReadOnly){
|
if(fIsReadOnly){
|
||||||
CConfigurationData baseData = cfgDes.getConfigurationData(false);
|
CConfigurationData baseData = cfgDes.getConfigurationData(false);
|
||||||
|
CConfigurationDescriptionCache baseCache = null;
|
||||||
if(baseData instanceof CConfigurationDescriptionCache){
|
if(baseData instanceof CConfigurationDescriptionCache){
|
||||||
baseData = ((CConfigurationDescriptionCache)baseData).getConfigurationData();
|
baseCache = (CConfigurationDescriptionCache)baseData;
|
||||||
|
baseData = baseCache.getConfigurationData();
|
||||||
}
|
}
|
||||||
CConfigurationDescriptionCache cache = new CConfigurationDescriptionCache((ICConfigurationDescription)cfgDes, baseData, cfgDes.getSpecSettings(), this, null);
|
CConfigurationDescriptionCache cache = new CConfigurationDescriptionCache((ICConfigurationDescription)cfgDes, baseData, baseCache, cfgDes.getSpecSettings(), this, null);
|
||||||
configurationCreated(cache);
|
configurationCreated(cache);
|
||||||
} else {
|
} else {
|
||||||
CConfigurationData baseData = cfgDes.getConfigurationData(false);
|
CConfigurationData baseData = cfgDes.getConfigurationData(false);
|
||||||
|
|
|
@ -69,7 +69,6 @@ import org.eclipse.cdt.core.settings.model.ICSettingsStorage;
|
||||||
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.extension.CConfigurationData;
|
import org.eclipse.cdt.core.settings.model.extension.CConfigurationData;
|
||||||
import org.eclipse.cdt.core.settings.model.extension.CConfigurationDataProvider;
|
import org.eclipse.cdt.core.settings.model.extension.CConfigurationDataProvider;
|
||||||
import org.eclipse.cdt.core.settings.model.extension.CFileData;
|
import org.eclipse.cdt.core.settings.model.extension.CFileData;
|
||||||
|
@ -1671,11 +1670,12 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
return provider.loadConfiguration(des, monitor);
|
return provider.loadConfiguration(des, monitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
CConfigurationData applyData(ICConfigurationDescription des, ICConfigurationDescription baseDescription, CConfigurationData base, IModificationContext context, IProgressMonitor monitor) throws CoreException {
|
CConfigurationData applyData(CConfigurationDescriptionCache des, ICConfigurationDescription baseDescription, CConfigurationData base, SettingsContext context, IProgressMonitor monitor) throws CoreException {
|
||||||
if(monitor == null)
|
if(monitor == null)
|
||||||
monitor = new NullProgressMonitor();
|
monitor = new NullProgressMonitor();
|
||||||
|
|
||||||
CConfigurationDataProvider provider = getProvider(des);
|
CConfigurationDataProvider provider = getProvider(des);
|
||||||
|
context.init(des);
|
||||||
return provider.applyConfiguration(des, baseDescription, base, context, monitor);
|
return provider.applyConfiguration(des, baseDescription, base, context, monitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3095,8 +3095,10 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
private CConfigurationDescriptionCache createPreferenceCache(ICConfigurationDescription des) throws CoreException{
|
private CConfigurationDescriptionCache createPreferenceCache(ICConfigurationDescription des) throws CoreException{
|
||||||
IInternalCCfgInfo cfgDes = (IInternalCCfgInfo)des;
|
IInternalCCfgInfo cfgDes = (IInternalCCfgInfo)des;
|
||||||
CConfigurationData baseData = cfgDes.getConfigurationData(false);
|
CConfigurationData baseData = cfgDes.getConfigurationData(false);
|
||||||
|
CConfigurationDescriptionCache baseCache = null;
|
||||||
if(baseData instanceof CConfigurationDescriptionCache){
|
if(baseData instanceof CConfigurationDescriptionCache){
|
||||||
baseData = ((CConfigurationDescriptionCache)baseData).getConfigurationData();
|
baseCache = (CConfigurationDescriptionCache)baseData;
|
||||||
|
baseData = baseCache.getConfigurationData();
|
||||||
}
|
}
|
||||||
CConfigurationSpecSettings settings = cfgDes.getSpecSettings();
|
CConfigurationSpecSettings settings = cfgDes.getSpecSettings();
|
||||||
ICStorageElement rootEl = getBuildSystemConfigPreferenceStorage(des.getBuildSystemId(), true, false);
|
ICStorageElement rootEl = getBuildSystemConfigPreferenceStorage(des.getBuildSystemId(), true, false);
|
||||||
|
@ -3104,7 +3106,7 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
|
||||||
rootParent.removeChild(rootEl);
|
rootParent.removeChild(rootEl);
|
||||||
ICStorageElement baseRootEl = settings.getRootStorageElement();
|
ICStorageElement baseRootEl = settings.getRootStorageElement();
|
||||||
rootEl = rootParent.importChild(baseRootEl);
|
rootEl = rootParent.importChild(baseRootEl);
|
||||||
CConfigurationDescriptionCache cache = new CConfigurationDescriptionCache(des, baseData, cfgDes.getSpecSettings(), null, rootEl);
|
CConfigurationDescriptionCache cache = new CConfigurationDescriptionCache(des, baseData, baseCache, cfgDes.getSpecSettings(), null, rootEl);
|
||||||
CSettingEntryFactory factory = new CSettingEntryFactory();
|
CSettingEntryFactory factory = new CSettingEntryFactory();
|
||||||
SettingsContext context = new SettingsContext(null);
|
SettingsContext context = new SettingsContext(null);
|
||||||
cache.applyData(factory, context);
|
cache.applyData(factory, context);
|
||||||
|
|
|
@ -45,7 +45,7 @@ public class SetCProjectDescriptionOperation extends CModelOperation {
|
||||||
mngr.notifyListeners(event);
|
mngr.notifyListeners(event);
|
||||||
CProjectDescription fNewDescriptionCache = null;
|
CProjectDescription fNewDescriptionCache = null;
|
||||||
SettingsContext context = new SettingsContext(project);
|
SettingsContext context = new SettingsContext(project);
|
||||||
|
boolean modified;
|
||||||
if(fSetDescription != null){
|
if(fSetDescription != null){
|
||||||
InternalXmlStorageElement el = null;
|
InternalXmlStorageElement el = null;
|
||||||
try {
|
try {
|
||||||
|
@ -63,10 +63,12 @@ public class SetCProjectDescriptionOperation extends CModelOperation {
|
||||||
fNewDescriptionCache = new CProjectDescription(fSetDescription, true, el, creating);
|
fNewDescriptionCache = new CProjectDescription(fSetDescription, true, el, creating);
|
||||||
try {
|
try {
|
||||||
mngr.setDescriptionApplying(project, fNewDescriptionCache);
|
mngr.setDescriptionApplying(project, fNewDescriptionCache);
|
||||||
fNewDescriptionCache.applyDatas(context);
|
modified = fNewDescriptionCache.applyDatas(context);
|
||||||
} finally {
|
} finally {
|
||||||
mngr.clearDescriptionApplying(project);
|
mngr.clearDescriptionApplying(project);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
modified = fOldDescriptionCache != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
ICDescriptionDelta delta = mngr.createDelta(fNewDescriptionCache, fOldDescriptionCache);
|
ICDescriptionDelta delta = mngr.createDelta(fNewDescriptionCache, fOldDescriptionCache);
|
||||||
|
@ -115,8 +117,11 @@ public class SetCProjectDescriptionOperation extends CModelOperation {
|
||||||
mngr.notifyListeners(event);
|
mngr.notifyListeners(event);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if(fNewDescriptionCache != null && !CProjectDescriptionManager.checkFlags(fFlags, ICProjectDescriptionManager.SET_NO_SERIALIZE))
|
if(fNewDescriptionCache != null && !CProjectDescriptionManager.checkFlags(fFlags, ICProjectDescriptionManager.SET_NO_SERIALIZE)){
|
||||||
|
if(modified || isPersistentCoreSettingChanged(event)){
|
||||||
context.addWorkspaceRunnable(mngr.createDesSerializationRunnable(fNewDescriptionCache));
|
context.addWorkspaceRunnable(mngr.createDesSerializationRunnable(fNewDescriptionCache));
|
||||||
|
}
|
||||||
|
}
|
||||||
IWorkspaceRunnable toRun = context.createOperationRunnable();
|
IWorkspaceRunnable toRun = context.createOperationRunnable();
|
||||||
|
|
||||||
if(toRun != null)
|
if(toRun != null)
|
||||||
|
@ -126,6 +131,23 @@ public class SetCProjectDescriptionOperation extends CModelOperation {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean isPersistentCoreSettingChanged(CProjectDescriptionEvent event){
|
||||||
|
ICDescriptionDelta delta = event.getProjectDelta();
|
||||||
|
if(delta == null)
|
||||||
|
return false;
|
||||||
|
if(delta.getDeltaKind() != ICDescriptionDelta.CHANGED)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if(delta.getChildren().length != 0)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
int flags = delta.getChangeFlags();
|
||||||
|
if(flags != 0 && flags != ICDescriptionDelta.ACTIVE_CFG)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isReadOnly() {
|
public boolean isReadOnly() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,8 @@ public final class SettingsContext implements IModificationContext{
|
||||||
private IProjectDescription fEDes;
|
private IProjectDescription fEDes;
|
||||||
private IProject fProject;
|
private IProject fProject;
|
||||||
private CompositeWorkspaceRunnable fRunnable;
|
private CompositeWorkspaceRunnable fRunnable;
|
||||||
|
private boolean fCfgDataModifyState;
|
||||||
|
private boolean fCfgDataCacheState;
|
||||||
|
|
||||||
SettingsContext(IProject project){
|
SettingsContext(IProject project){
|
||||||
fProject = project;
|
fProject = project;
|
||||||
|
@ -31,6 +33,11 @@ public final class SettingsContext implements IModificationContext{
|
||||||
return fProject;
|
return fProject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void init(CConfigurationDescriptionCache cfg){
|
||||||
|
fCfgDataModifyState = true;
|
||||||
|
fCfgDataCacheState = cfg.getBaseCache() != null;
|
||||||
|
}
|
||||||
|
|
||||||
IProjectDescription getEclipseProjectDescription(boolean create) throws CoreException{
|
IProjectDescription getEclipseProjectDescription(boolean create) throws CoreException{
|
||||||
IProjectDescription eDes = fEDes;
|
IProjectDescription eDes = fEDes;
|
||||||
if(eDes == null && create){
|
if(eDes == null && create){
|
||||||
|
@ -89,4 +96,16 @@ public final class SettingsContext implements IModificationContext{
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean getBaseConfigurationDataCacheState() {
|
||||||
|
return fCfgDataCacheState;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setConfiguratoinDataModifiedState(boolean modified) {
|
||||||
|
fCfgDataModifyState = modified;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean getConfiguratoinDataModifiedState(){
|
||||||
|
return fCfgDataModifyState;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue