Skip to main content
summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorMikhail Sennikovsky2007-09-17 17:33:28 +0000
committerMikhail Sennikovsky2007-09-17 17:33:28 +0000
commit46d9a5d1b8cefbf17c3c88c7ca1555574c75d8f8 (patch)
treea2c8c9c7028ef39319c635c55dfb06b7ee3cd0a3 /core
parenta76abebd0ccfc730b7a871b06c3748b400682edc (diff)
downloadorg.eclipse.cdt-46d9a5d1b8cefbf17c3c88c7ca1555574c75d8f8.tar.gz
org.eclipse.cdt-46d9a5d1b8cefbf17c3c88c7ca1555574c75d8f8.tar.xz
org.eclipse.cdt-46d9a5d1b8cefbf17c3c88c7ca1555574c75d8f8.zip
Fix for [Bug 203614] ICDescriptor.saveProjectData() doesn't always serialize to . cproject
Diffstat (limited to 'core')
-rw-r--r--core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationSpecSettings.java15
-rw-r--r--core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescription.java23
-rw-r--r--core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionManager.java5
-rw-r--r--core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionPreferences.java4
-rw-r--r--core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CStorage.java5
-rw-r--r--core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/InternalXmlStorageElement.java7
-rw-r--r--core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/SetCProjectDescriptionOperation.java14
7 files changed, 52 insertions, 21 deletions
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationSpecSettings.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationSpecSettings.java
index d1e432a448a..852bfc4e5c0 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationSpecSettings.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CConfigurationSpecSettings.java
@@ -279,11 +279,11 @@ public class CConfigurationSpecSettings implements ICSettingsStorage{
void doneInitialization(){
if(isReadOnly()){
if(fRootStorageElement != null)
- ((InternalXmlStorageElement)fRootStorageElement).setReadOnly(true);
+ ((InternalXmlStorageElement)fRootStorageElement).setReadOnly(true, false);
if(fSettingsStorageElement != null)
- ((InternalXmlStorageElement)fSettingsStorageElement).setReadOnly(true);
+ ((InternalXmlStorageElement)fSettingsStorageElement).setReadOnly(true, false);
if(fStorage != null)
- fStorage.setReadOnly(true);
+ fStorage.setReadOnly(true, false);
}
}
@@ -492,7 +492,16 @@ public class CConfigurationSpecSettings implements ICSettingsStorage{
if(isReadOnly())
throw ExceptionFactory.createIsReadOnlyException();
fIsModified = modified;
+
+ if(!modified){
+ if(fMacros != null)
+ fMacros.setDirty(false);
+
+ if(fEnvironment != null)
+ fEnvironment.setDirty(false);
+ }
}
+
void setModified(){
setModified(true);
}
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescription.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescription.java
index 9c8c790b028..aa2824cee49 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescription.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescription.java
@@ -232,11 +232,16 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
return modified;
}
-
-
void doneApplying(){
doneInitializing();
fIsApplying = false;
+
+ try {
+ ((InternalXmlStorageElement)getRootStorageElement()).setReadOnly(true, false);
+ } catch (CoreException e1) {
+ }
+
+ setModified(false);
}
void doneLoadding(){
@@ -502,6 +507,20 @@ public class CProjectDescription implements ICProjectDescription, ICDataProxyCon
}
return false;
}
+
+ private void setModified(boolean modified){
+ fIsModified = modified;
+
+ if(!modified){
+ fActiveCfgInfo.fIsModified = false;
+
+ fSettingCfgInfo.fIsModified = false;
+
+ fPrefs.setModified(false);
+
+ //no need to do that for config cache since they always maintain the "isModified == false"
+ }
+ }
public boolean isReadOnly() {
return fIsReadOnly && !(fIsLoadding || fIsApplying);
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionManager.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionManager.java
index f999bf20f0f..6ba684f7e68 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionManager.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionManager.java
@@ -709,11 +709,6 @@ public class CProjectDescriptionManager implements ICProjectDescriptionManager {
} finally {
clearDescriptionApplying(project);
}
-
- try {
- ((InternalXmlStorageElement)des.getRootStorageElement()).setReadOnly(true);
- } catch (CoreException e1) {
- }
}
}finally{
CProjectDescription d = clearDescriptionLoadding(project);
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionPreferences.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionPreferences.java
index de33cd528a5..d0c9d7bb020 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionPreferences.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CProjectDescriptionPreferences.java
@@ -95,6 +95,10 @@ public class CProjectDescriptionPreferences implements ICProjectDescriptionPrefe
&& !fSuperPreference.settingsEqual((CProjectDescriptionPreferences)CProjectDescriptionManager.getInstance().getProjectDescriptionWorkspacePreferences(false)));
}
+ void setModified(boolean modified){
+ fIsModified = modified;
+ }
+
public boolean isReadOnly(){
return fIsReadOnly;
}
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CStorage.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CStorage.java
index 67b21924b0c..acd862b0c6f 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CStorage.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/CStorage.java
@@ -170,11 +170,12 @@ public class CStorage implements ICSettingsStorage{
return false;
}
- void setReadOnly(boolean readOnly){
+ void setReadOnly(boolean readOnly, boolean keepModify){
fIsReadOnly = readOnly;
+ fIsDirty &= keepModify;
for(Iterator iter = fStorageElementMap.values().iterator(); iter.hasNext();){
InternalXmlStorageElement el = (InternalXmlStorageElement)iter.next();
- el.setReadOnly(readOnly);
+ el.setReadOnly(readOnly, keepModify);
}
}
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/InternalXmlStorageElement.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/InternalXmlStorageElement.java
index 446d88aa8df..35d2762ccd7 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/InternalXmlStorageElement.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/InternalXmlStorageElement.java
@@ -61,11 +61,16 @@ public class InternalXmlStorageElement extends XmlStorageElement {
}
public void setReadOnly(boolean readOnly){
+ setReadOnly(readOnly, true);
+ }
+
+ public void setReadOnly(boolean readOnly, boolean keepModify){
fIsReadOnly = readOnly;
+ fIsDirty &= keepModify;
ICStorageElement children[] = getChildren(false);
for(int i = 0; i < children.length; i++){
- ((InternalXmlStorageElement)children[i]).setReadOnly(readOnly);
+ ((InternalXmlStorageElement)children[i]).setReadOnly(readOnly, keepModify);
}
}
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/SetCProjectDescriptionOperation.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/SetCProjectDescriptionOperation.java
index 7df2215b456..78775696bf2 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/SetCProjectDescriptionOperation.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/settings/model/SetCProjectDescriptionOperation.java
@@ -45,11 +45,14 @@ public class SetCProjectDescriptionOperation extends CModelOperation {
mngr.notifyListeners(event);
CProjectDescription fNewDescriptionCache = null;
SettingsContext context = new SettingsContext(project);
- boolean modified;
+ boolean modified = false;
+
if(fSetDescription != null){
InternalXmlStorageElement el = null;
try {
- el = mngr.copyElement((InternalXmlStorageElement)fSetDescription.getRootStorageElement(), false);
+ InternalXmlStorageElement base = (InternalXmlStorageElement)fSetDescription.getRootStorageElement();
+ modified = base.isDirty();
+ el = mngr.copyElement(base, false);
} catch (CoreException e2) {
}
@@ -63,7 +66,7 @@ public class SetCProjectDescriptionOperation extends CModelOperation {
fNewDescriptionCache = new CProjectDescription(fSetDescription, true, el, creating);
try {
mngr.setDescriptionApplying(project, fNewDescriptionCache);
- modified = fNewDescriptionCache.applyDatas(context);
+ modified |= fNewDescriptionCache.applyDatas(context);
} finally {
mngr.clearDescriptionApplying(project);
}
@@ -105,11 +108,6 @@ public class SetCProjectDescriptionOperation extends CModelOperation {
// ExternalSettingsManager.getInstance().updateDepentents(delta);
if(fNewDescriptionCache != null){
- try {
- ((InternalXmlStorageElement)fNewDescriptionCache.getRootStorageElement()).setReadOnly(true);
- } catch (CoreException e1) {
- }
-
fNewDescriptionCache.doneApplying();
}

Back to the top