From 29eafddce07deecd6fd61832ce3146173eefffd3 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Wed, 2 Jul 2008 07:48:54 +0000 Subject: [PATCH] Workaround for platform bug 206343, project preferences marked dirty on project import. --- .../cdt/internal/core/pdom/PDOMManager.java | 2 +- .../core/pdom/indexer/IndexerPreferences.java | 19 +++---------------- .../cdt/internal/core/CCoreInternals.java | 4 ++-- .../eclipse/cdt/ui/dialogs/IndexerBlock.java | 2 +- 4 files changed, 7 insertions(+), 20 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java index 5b6abfe0c97..1bb578455d8 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java @@ -423,7 +423,7 @@ public class PDOMManager implements IWritableIndexManager, IListener { public void setIndexerId(final ICProject project, String indexerId) { IProject prj= project.getProject(); IndexerPreferences.set(prj, IndexerPreferences.KEY_INDEXER_ID, indexerId); - CCoreInternals.savePreferences(prj); + CCoreInternals.savePreferences(prj, IndexerPreferences.getScope(prj) == IndexerPreferences.SCOPE_PROJECT_SHARED); } protected void onPreferenceChange(ICProject cproject, PreferenceChangeEvent event) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/IndexerPreferences.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/IndexerPreferences.java index cb7f51c8a3b..2f8978347ff 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/IndexerPreferences.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/IndexerPreferences.java @@ -8,7 +8,6 @@ * Contributors: * Markus Schorn - initial API and implementation *******************************************************************************/ - package org.eclipse.cdt.internal.core.pdom.indexer; import java.util.Map; @@ -81,7 +80,7 @@ public class IndexerPreferences { if (get(project, scope, KEY_INDEXER_ID, null) == null) { scope= SCOPE_INSTANCE; ppp.putInt(KEY_INDEXER_PREFS_SCOPE, scope); - CCoreInternals.savePreferences(project); + CCoreInternals.savePreferences(project, false); } } } @@ -232,20 +231,8 @@ public class IndexerPreferences { if (prjPrefs.get(KEY_INDEXER_ID, null) != null) { scope= SCOPE_PROJECT_SHARED; } - else { - Preferences oldStyle= prjPrefs.parent(); - String id= oldStyle.get(KEY_INDEXER_ID, null); - if (id != null) { - prjPrefs.put(KEY_INDEXER_ID, id); - String value= oldStyle.get(KEY_INDEX_ALL_FILES, null); - if (value != null) { - prjPrefs.put(KEY_INDEX_ALL_FILES, value); - } - scope= SCOPE_PROJECT_SHARED; - } - } getLocalPreferences(project).putInt(KEY_INDEXER_PREFS_SCOPE, scope); - CCoreInternals.savePreferences(project); + CCoreInternals.savePreferences(project, false); return scope; } @@ -378,7 +365,7 @@ public class IndexerPreferences { public static void setIndexImportLocation(IProject project, String location) { if (!location.equals(getIndexImportLocation(project))) { getProjectPreferences(project).put(KEY_INDEX_IMPORT_LOCATION, location); - CCoreInternals.savePreferences(project); + CCoreInternals.savePreferences(project, true); } } diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CCoreInternals.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CCoreInternals.java index 7b8975ebf86..72c7969647a 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CCoreInternals.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CCoreInternals.java @@ -42,14 +42,14 @@ public class CCoreInternals { * @param project the project for which to save preferences, may be null * @since 4.0 */ - public static void savePreferences(final IProject project) { + public static void savePreferences(final IProject project, final boolean saveSharedPrefs) { Job job= new Job(CCorePlugin.getResourceString("CCoreInternals.savePreferencesJob")) { //$NON-NLS-1$ @Override protected IStatus run(IProgressMonitor monitor) { try { if (project != null) { new LocalProjectScope(project).getNode(CCorePlugin.PLUGIN_ID).flush(); - if (project.isOpen()) { + if (saveSharedPrefs && project.isOpen()) { new ProjectScope(project).getNode(CCorePlugin.PLUGIN_ID).flush(); } } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/IndexerBlock.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/IndexerBlock.java index ceb34cdde8b..389039ec8b9 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/IndexerBlock.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/IndexerBlock.java @@ -505,7 +505,7 @@ public class IndexerBlock extends AbstractCOptionPage { } prjDescMgr.setProjectDescription(getProject(), prefs); } - CCoreInternals.savePreferences(project); + CCoreInternals.savePreferences(project, scope == IndexerPreferences.SCOPE_PROJECT_SHARED); } @Override