Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDJ Houghton2007-07-17 15:40:04 +0000
committerDJ Houghton2007-07-17 15:40:04 +0000
commit02d43c56d590d13cc0c3d0652f412a4b613f9d21 (patch)
treef1508d8bbaeeeba52dbe9b248deb56d76551f1e7 /bundles/org.eclipse.equinox.preferences
parentd8b8da62784cb35abc4b08bf8aa44d39bda964f8 (diff)
downloadrt.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.java31
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;

Back to the top