diff options
author | DJ Houghton | 2007-07-17 15:40:04 +0000 |
---|---|---|
committer | DJ Houghton | 2007-07-17 15:40:04 +0000 |
commit | 02d43c56d590d13cc0c3d0652f412a4b613f9d21 (patch) | |
tree | f1508d8bbaeeeba52dbe9b248deb56d76551f1e7 /bundles/org.eclipse.equinox.preferences | |
parent | d8b8da62784cb35abc4b08bf8aa44d39bda964f8 (diff) | |
download | rt.equinox.bundles-02d43c56d590d13cc0c3d0652f412a4b613f9d21.tar.gz rt.equinox.bundles-02d43c56d590d13cc0c3d0652f412a4b613f9d21.tar.xz rt.equinox.bundles-02d43c56d590d13cc0c3d0652f412a4b613f9d21.zip |
Bug 95052 - [prefs] does not catch up with external property removal
Diffstat (limited to 'bundles/org.eclipse.equinox.preferences')
-rw-r--r-- | bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/PreferencesService.java | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/PreferencesService.java b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/PreferencesService.java index 982974b98..032a1863e 100644 --- a/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/PreferencesService.java +++ b/bundles/org.eclipse.equinox.preferences/src/org/eclipse/core/internal/preferences/PreferencesService.java @@ -136,12 +136,26 @@ public class PreferencesService implements IPreferencesService { // iterate over the preferences in this node and set them // in the global space. String[] keys = epNode.properties.keys(); + + // if this node was removed then we need to create a new one + if (removed) + globalNode = (IEclipsePreferences) root.node(node.absolutePath()); + + // the list for properties to remove + List propsToRemove = new ArrayList(); + for (int i = 0; i < globalNode.keys().length; i++){ + propsToRemove.add(globalNode.keys()[i]); + } + if (keys.length > 0) { - // if this node was removed then we need to create a new one - if (removed) - globalNode = (IEclipsePreferences) root.node(node.absolutePath()); + String key = null; for (int i = 0; i < keys.length; i++) { - String key = keys[i]; + key = keys[i]; + + // preferences that are not in the applied node + // will be removed + propsToRemove.remove(key); + // intern strings we import because some people // in their property change listeners use identity // instead of equals. See bug 20193 and 20534. @@ -154,6 +168,15 @@ public class PreferencesService implements IPreferencesService { } } } + + String keyToRemove = null; + for (Iterator it = propsToRemove.iterator(); it.hasNext(); ){ + keyToRemove = (String) it.next(); + keyToRemove = keyToRemove.intern(); + if (EclipsePreferences.DEBUG_PREFERENCE_SET) + PrefsMessages.message("Removing: " + globalNode.absolutePath() + '/' + keyToRemove); //$NON-NLS-1$ + globalNode.remove(keyToRemove); + } // keep visiting children return true; |