Fix for Bug 56020 [runtime] prefs: converted preferences not restored on second session
diff --git a/bundles/org.eclipse.core.runtime/src/org/eclipse/core/internal/preferences/EclipsePreferences.java b/bundles/org.eclipse.core.runtime/src/org/eclipse/core/internal/preferences/EclipsePreferences.java
index 7dcab7c..234f07b 100644
--- a/bundles/org.eclipse.core.runtime/src/org/eclipse/core/internal/preferences/EclipsePreferences.java
+++ b/bundles/org.eclipse.core.runtime/src/org/eclipse/core/internal/preferences/EclipsePreferences.java
@@ -615,7 +615,7 @@
protected void makeDirty() {
EclipsePreferences node = this;
- while (node != null && !node.removed) {
+ while (node != null && !node.dirty && !node.removed) {
node.dirty = true;
node = (EclipsePreferences) node.parent();
}
@@ -938,6 +938,7 @@
result.loadLegacy();
result.load(result.getLocation());
result.loaded();
+ result.flush();
} catch (BackingStoreException e) {
String message = "Exception loading preferences";
IStatus status = new Status(IStatus.ERROR, Platform.PI_RUNTIME, IStatus.ERROR, message, e);
diff --git a/bundles/org.eclipse.core.runtime/src/org/eclipse/core/internal/preferences/InstancePreferences.java b/bundles/org.eclipse.core.runtime/src/org/eclipse/core/internal/preferences/InstancePreferences.java
index 6834bb1..04f86e8 100644
--- a/bundles/org.eclipse.core.runtime/src/org/eclipse/core/internal/preferences/InstancePreferences.java
+++ b/bundles/org.eclipse.core.runtime/src/org/eclipse/core/internal/preferences/InstancePreferences.java
@@ -140,7 +140,9 @@
if (value != null) {
if (InternalPlatform.DEBUG_PREFERENCES)
System.out.println("Loaded legacy preference: " + key + " -> " + value); //$NON-NLS-1$ //$NON-NLS-2$
+ // call these 2 methods rather than #put() so we don't send out unnecessary notification
properties.put(key, value);
+ makeDirty();
}
}
@@ -176,11 +178,7 @@
if (qualifier == null)
return;
// get the base location from the platform
- InternalPlatform platform = InternalPlatform.getDefault();
- Bundle bundle = platform.getBundle(qualifier);
- if (bundle == null)
- return;
- location = platform.getStateLocation(bundle).append(DEFAULT_PREFERENCES_FILENAME);
+ location = InternalPlatform.getDefault().getMetaArea().getStateLocation(qualifier).append(DEFAULT_PREFERENCES_FILENAME);
}
/*