From b504068dc4f47461381a8aee205a89227c3a429e Mon Sep 17 00:00:00 2001
From: Patrick Ziegler
Date: Mon, 24 Aug 2026 20:53:58 +0200
Subject: [PATCH 1/2] Move `ScopedPreferenceStore` to `org.eclipse.jface` #4262
The `IPreferenceStore` interface has two public implementations; A JFace
`PreferenceStore` based on _*.properties_ files and an Eclipse 3.x
`ScopedPreferenceStore` based on _*.prefs_ files. Consumers who want to
use scoped preferences therefore always carry a direct dependency to the
3.x framework, rendering this interface unusable in a pure 4.x
application.
Consumers currently have to fall back to the `IEclipsePreferences`
interface, which is not a drop-in replacement, however, due to a
different behavior when it comes to e.g. default values.
Because the `ScopedPreferenceStore` doesn't depend on any 3.x-specific
functionality, it can be easily moved to the JFace component. The
dependency to the Eclipse Runtime bundle can be reduced to the Equinox
Preferences bundle by inlining the call to `IPreferenceService.get`.
Note that this change has to be split up into two commits; One where the
`ScopedPreferenceStore` is moved and one where a dummy implementation is
added to the Eclipse Workbench bundle. Otherwise Git is unable to detect
the class as being moved to the JFace component and thus doesn't carry
over the file history.
Contributes to
https://github.com/eclipse-platform/eclipse.platform.ui/issues/4262
---
.../org.eclipse.jface/META-INF/MANIFEST.MF | 5 +-
.../src/org/eclipse/jface/messages.properties | 5 ++
.../jface/preference/IPreferenceStore.java | 4 +-
.../preference}/ScopedPreferenceStore.java | 69 +++++++++++--------
.../META-INF/MANIFEST.MF | 2 +-
.../text/TextEditorPreferencePage.java | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../GenericEditorPreferencePage.java | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../ide/application/IDEApplication.java | 2 +-
.../org.eclipse.ui.ide/META-INF/MANIFEST.MF | 2 +-
.../ui/internal/ide/ChooseWorkspaceData.java | 2 +-
.../dialogs/IDEWorkspacePreferencePage.java | 2 +-
.../META-INF/MANIFEST.MF | 2 +-
.../WorkbenchChainedTextFontFieldEditor.java | 3 +-
.../META-INF/MANIFEST.MF | 4 +-
.../eclipseui/org/eclipse/ui/PlatformUI.java | 2 +-
.../ui/internal/WorkbenchMessages.java | 1 -
.../internal/dialogs/ViewsPreferencePage.java | 2 +-
.../eclipse/ui/internal/messages.properties | 1 -
.../eclipse/ui/plugin/AbstractUIPlugin.java | 2 +-
bundles/org.eclipse.ui/META-INF/MANIFEST.MF | 4 +-
.../tests/preferences/AllPrefsTests.java | 3 +-
.../ScopedPreferenceStoreTest.java} | 53 +++++++-------
.../preferences/PreferencesTestSuite.java | 1 -
25 files changed, 100 insertions(+), 79 deletions(-)
rename bundles/{org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/preferences => org.eclipse.jface/src/org/eclipse/jface/preference}/ScopedPreferenceStore.java (90%)
rename tests/{org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/preferences/ScopedPreferenceStoreTestCase.java => org.eclipse.jface.tests/src/org/eclipse/jface/tests/preferences/ScopedPreferenceStoreTest.java} (63%)
diff --git a/bundles/org.eclipse.jface/META-INF/MANIFEST.MF b/bundles/org.eclipse.jface/META-INF/MANIFEST.MF
index dc2cb26184a..3d6990d7426 100644
--- a/bundles/org.eclipse.jface/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.jface/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.jface;singleton:=true
-Bundle-Version: 3.40.100.qualifier
+Bundle-Version: 3.41.0.qualifier
Bundle-Vendor: %providerName
Bundle-Localization: plugin
Export-Package: org.eclipse.jface,
@@ -40,7 +40,10 @@ Require-Bundle: org.eclipse.swt;bundle-version="[3.126.0,4.0.0)";visibility:=ree
org.eclipse.equinox.bidi;bundle-version="[0.10.0,2.0.0)";resolution:=optional
Bundle-RequiredExecutionEnvironment: JavaSE-21
Import-Package: javax.xml.parsers,
+ org.eclipse.core.internal.preferences;resolution:=optional,
+ org.eclipse.core.runtime.preferences;version="[3.6.0,4.0.0)";resolution:=optional,
org.osgi.framework;version="[1.8.0,2.0.0)",
+ org.osgi.service.prefs;version="[1.1.0,2.0.0)";resolution:=optional,
org.w3c.dom,
org.xml.sax
Automatic-Module-Name: org.eclipse.jface
diff --git a/bundles/org.eclipse.jface/src/org/eclipse/jface/messages.properties b/bundles/org.eclipse.jface/src/org/eclipse/jface/messages.properties
index 18ec98f0fa2..2dbb4c71ffb 100644
--- a/bundles/org.eclipse.jface/src/org/eclipse/jface/messages.properties
+++ b/bundles/org.eclipse.jface/src/org/eclipse/jface/messages.properties
@@ -236,3 +236,8 @@ ConfigureColumnsDialog_down = Dow&n
# org.eclipse.jface.viewers.internal.ExpandableNode
ExpandableNode.defaultLabel = Show next {0} items from remaining {1}
ExpandableNode.showRemaining = Show remaining {0} item{1}
+
+#############################################################
+# org.eclipse.jface.preference.ScopedPreferenceStore
+#############################################################
+ScopedPreferenceStore_DefaultAddedError=Do not add the default to the search contexts
diff --git a/bundles/org.eclipse.jface/src/org/eclipse/jface/preference/IPreferenceStore.java b/bundles/org.eclipse.jface/src/org/eclipse/jface/preference/IPreferenceStore.java
index 81c3c357c1c..3ad237c529e 100644
--- a/bundles/org.eclipse.jface/src/org/eclipse/jface/preference/IPreferenceStore.java
+++ b/bundles/org.eclipse.jface/src/org/eclipse/jface/preference/IPreferenceStore.java
@@ -51,10 +51,12 @@
*
*
* Clients who need a preference store may implement this interface or
- * instantiate the standard implementation PreferenceStore.
+ * instantiate either the standard implementation PreferenceStore
+ * or the ScopedPreferenceStore.
*
*
* @see PreferenceStore
+ * @see ScopedPreferenceStore
*/
public interface IPreferenceStore {
diff --git a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/preferences/ScopedPreferenceStore.java b/bundles/org.eclipse.jface/src/org/eclipse/jface/preference/ScopedPreferenceStore.java
similarity index 90%
rename from bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/preferences/ScopedPreferenceStore.java
rename to bundles/org.eclipse.jface/src/org/eclipse/jface/preference/ScopedPreferenceStore.java
index 65ffaf9f820..79fb35f92b8 100644
--- a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/preferences/ScopedPreferenceStore.java
+++ b/bundles/org.eclipse.jface/src/org/eclipse/jface/preference/ScopedPreferenceStore.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2004, 2018 IBM Corporation and others.
+ * Copyright (c) 2004, 2026 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -13,13 +13,14 @@
* Yves YANG -
* Initial Fix for Bug 138078 [Preferences] Preferences Store for i18n support
*******************************************************************************/
-package org.eclipse.ui.preferences;
+package org.eclipse.jface.preference;
import java.io.IOException;
import java.util.Objects;
+
import org.eclipse.core.commands.common.EventManager;
+import org.eclipse.core.internal.preferences.PreferencesService;
import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.SafeRunner;
import org.eclipse.core.runtime.preferences.DefaultScope;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
@@ -27,13 +28,13 @@
import org.eclipse.core.runtime.preferences.IEclipsePreferences.NodeChangeEvent;
import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
import org.eclipse.core.runtime.preferences.IScopeContext;
-import org.eclipse.jface.preference.IPersistentPreferenceStore;
-import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.util.SafeRunnable;
-import org.eclipse.ui.internal.WorkbenchMessages;
+import org.eclipse.pde.api.tools.annotations.NoExtend;
+import org.osgi.framework.FrameworkUtil;
import org.osgi.service.prefs.BackingStoreException;
/**
@@ -49,9 +50,22 @@
*
*
* @see org.eclipse.core.runtime.preferences
- * @since 3.1
+ * @since 3.41
+ * @noextend This class is not intended to be subclassed by clients.
*/
-public class ScopedPreferenceStore extends EventManager implements IPreferenceStore, IPersistentPreferenceStore {
+@NoExtend
+public class ScopedPreferenceStore extends EventManager implements IPersistentPreferenceStore {
+
+ /**
+ * Creates a {@link IPersistentPreferenceStore} for the bundle that loaded that
+ * class.
+ *
+ * @param clazz the class to use for determining the responsible bundle
+ * @return the instance scoped preference store for the given class
+ */
+ public static IPersistentPreferenceStore getInstance(Class> clazz) {
+ return new ScopedPreferenceStore(InstanceScope.INSTANCE, FrameworkUtil.getBundle(clazz).getSymbolicName());
+ }
/**
* The storeContext is the context where values will stored with the setValue
@@ -86,12 +100,12 @@ public class ScopedPreferenceStore extends EventManager implements IPreferenceSt
/**
* The nodeQualifer is the string used to look up the node in the contexts.
*/
- String nodeQualifier;
+ private String nodeQualifier;
/**
* The defaultQualifier is the string used to look up the default node.
*/
- String defaultQualifier;
+ private String defaultQualifier;
/**
* Boolean value indicating whether or not this store has changes to be saved.
@@ -100,8 +114,7 @@ public class ScopedPreferenceStore extends EventManager implements IPreferenceSt
/**
* Create a new instance of the receiver. Store the values in context in the
- * node looked up by qualifier. NOTE: Any instance of
- * ScopedPreferenceStore should call
+ * node looked up by qualifier.
*
* @param context the scope to store to
* @param qualifier the qualifier used to look up the preference node
@@ -145,7 +158,7 @@ private void initializePreferencesListener() {
* @param obj the object who default we are looking for
* @return Object or null
*/
- Object getDefault(String key, Object obj) {
+ private Object getDefault(String key, Object obj) {
IEclipsePreferences defaults = getDefaultPreferences();
if (obj instanceof String) {
return defaults.get(key, STRING_DEFAULT_DEFAULT);
@@ -169,7 +182,7 @@ Object getDefault(String key, Object obj) {
*
* @return the preference node for this store
*/
- IEclipsePreferences getStorePreferences() {
+ private IEclipsePreferences getStorePreferences() {
return storeContext.getNode(nodeQualifier);
}
@@ -201,7 +214,6 @@ public void addPropertyChangeListener(IPropertyChangeListener listener) {
* @param includeDefault true if the default context should be
* included and false otherwise
* @return IEclipsePreferences[]
- * @since 3.4 public, was added in 3.1 as private method
*/
public IEclipsePreferences[] getPreferenceNodes(boolean includeDefault) {
// if the user didn't specify a search order, then return the scope that
@@ -255,7 +267,7 @@ public void setSearchContexts(IScopeContext[] scopes) {
// the end)
for (IScopeContext scope : scopes) {
if (scope.equals(defaultContext)) {
- Assert.isTrue(false, WorkbenchMessages.ScopedPreferenceStore_DefaultAddedError);
+ Assert.isTrue(false, JFaceResources.getString("ScopedPreferenceStore_DefaultAddedError")); //$NON-NLS-1$
}
}
}
@@ -265,7 +277,7 @@ public boolean contains(String name) {
if (name == null) {
return false;
}
- return (Platform.getPreferencesService().get(name, null, getPreferenceNodes(true))) != null;
+ return internalGet(name, true) != null;
}
@Override
@@ -290,7 +302,7 @@ public void run() {
@Override
public boolean getBoolean(String name) {
- String value = internalGet(name);
+ String value = internalGet(name, true);
return value == null ? BOOLEAN_DEFAULT_DEFAULT : Boolean.parseBoolean(value);
}
@@ -326,7 +338,7 @@ public String getDefaultString(String name) {
@Override
public double getDouble(String name) {
- String value = internalGet(name);
+ String value = internalGet(name, true);
if (value == null) {
return DOUBLE_DEFAULT_DEFAULT;
}
@@ -342,16 +354,19 @@ public double getDouble(String name) {
* specified by this object's list of search scopes. If the value does not exist
* then return null.
*
- * @param key the key to search with
+ * @param key the key to search with
+ * @param includeDefault {@code true} if the default context should be included
+ * and {@code true} otherwise
* @return String or null if the value does not exist.
*/
- private String internalGet(String key) {
- return Platform.getPreferencesService().get(key, null, getPreferenceNodes(true));
+ @SuppressWarnings("restriction")
+ private String internalGet(String key, boolean includeDefault) {
+ return PreferencesService.getDefault().get(key, null, getPreferenceNodes(includeDefault));
}
@Override
public float getFloat(String name) {
- String value = internalGet(name);
+ String value = internalGet(name, true);
if (value == null) {
return FLOAT_DEFAULT_DEFAULT;
}
@@ -364,7 +379,7 @@ public float getFloat(String name) {
@Override
public int getInt(String name) {
- String value = internalGet(name);
+ String value = internalGet(name, true);
if (value == null) {
return INT_DEFAULT_DEFAULT;
}
@@ -377,7 +392,7 @@ public int getInt(String name) {
@Override
public long getLong(String name) {
- String value = internalGet(name);
+ String value = internalGet(name, true);
if (value == null) {
return LONG_DEFAULT_DEFAULT;
}
@@ -390,7 +405,7 @@ public long getLong(String name) {
@Override
public String getString(String name) {
- String value = internalGet(name);
+ String value = internalGet(name, true);
return value == null ? STRING_DEFAULT_DEFAULT : value;
}
@@ -399,7 +414,7 @@ public boolean isDefault(String name) {
if (name == null) {
return false;
}
- return (Platform.getPreferencesService().get(name, null, getPreferenceNodes(false))) == null;
+ return internalGet(name, false) == null;
}
@Override
diff --git a/bundles/org.eclipse.ui.editors/META-INF/MANIFEST.MF b/bundles/org.eclipse.ui.editors/META-INF/MANIFEST.MF
index b55671b7dc0..ace882b6010 100644
--- a/bundles/org.eclipse.ui.editors/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.ui.editors/META-INF/MANIFEST.MF
@@ -22,7 +22,7 @@ Require-Bundle:
org.eclipse.core.expressions;bundle-version="[3.9.0,4.0.0)",
org.eclipse.swt;bundle-version="[3.133.0,4.0.0)",
org.eclipse.ui.ide;bundle-version="[3.21.0,4.0.0)",
- org.eclipse.ui;bundle-version="[3.208.0,4.0.0)",
+ org.eclipse.ui;bundle-version="[3.210.0,4.0.0)",
org.eclipse.jface.text;bundle-version="[3.24.0,4.0.0)",
org.eclipse.ui.workbench;bundle-version="[3.130.0,4.0.0)",
org.eclipse.ui.workbench.texteditor;bundle-version="[3.19.0,4.0.0)",
diff --git a/bundles/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/TextEditorPreferencePage.java b/bundles/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/TextEditorPreferencePage.java
index e279e37989e..caf1c2e5152 100644
--- a/bundles/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/TextEditorPreferencePage.java
+++ b/bundles/org.eclipse.ui.editors/src/org/eclipse/ui/editors/text/TextEditorPreferencePage.java
@@ -26,12 +26,12 @@
import org.eclipse.jface.preference.FontFieldEditor;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
+import org.eclipse.jface.preference.ScopedPreferenceStore;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.preferences.ScopedPreferenceStore;
import org.eclipse.ui.texteditor.AbstractTextEditor;
diff --git a/bundles/org.eclipse.ui.genericeditor/META-INF/MANIFEST.MF b/bundles/org.eclipse.ui.genericeditor/META-INF/MANIFEST.MF
index f28fe7c793b..b516bf7fafa 100644
--- a/bundles/org.eclipse.ui.genericeditor/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.ui.genericeditor/META-INF/MANIFEST.MF
@@ -11,7 +11,7 @@ Require-Bundle: org.eclipse.ui.workbench.texteditor;bundle-version="3.10.0",
org.eclipse.jface.text;bundle-version="3.24.0",
org.eclipse.core.runtime;bundle-version="3.29.0",
org.eclipse.ui.workbench;bundle-version="3.109.0",
- org.eclipse.jface;bundle-version="3.39.0",
+ org.eclipse.jface;bundle-version="[3.41.0,4.0.0)",
org.eclipse.ui.ide;bundle-version="3.12.0",
org.eclipse.core.resources;bundle-version="3.11.0",
org.eclipse.core.expressions;bundle-version="3.6.0",
diff --git a/bundles/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/preferences/GenericEditorPreferencePage.java b/bundles/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/preferences/GenericEditorPreferencePage.java
index 489e806d8a4..2ecff02872d 100644
--- a/bundles/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/preferences/GenericEditorPreferencePage.java
+++ b/bundles/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/preferences/GenericEditorPreferencePage.java
@@ -25,6 +25,7 @@
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.jface.preference.ScopedPreferenceStore;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
@@ -41,7 +42,6 @@
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.internal.genericeditor.Messages;
-import org.eclipse.ui.preferences.ScopedPreferenceStore;
public class GenericEditorPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
private final ArrayList leadFollowerListeners = new ArrayList<>();
diff --git a/bundles/org.eclipse.ui.ide.application/META-INF/MANIFEST.MF b/bundles/org.eclipse.ui.ide.application/META-INF/MANIFEST.MF
index 6af4988da95..743693601f5 100644
--- a/bundles/org.eclipse.ui.ide.application/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.ui.ide.application/META-INF/MANIFEST.MF
@@ -8,7 +8,7 @@ Bundle-Localization: plugin
Require-Bundle: org.eclipse.ui.ide;bundle-version="[3.21.0,4.0.0)",
org.eclipse.core.runtime;bundle-version="[3.29.0,4.0.0)",
org.eclipse.core.resources;bundle-version="[3.19.0,4.0.0)",
- org.eclipse.ui;bundle-version="[3.209.0,4.0.0)",
+ org.eclipse.ui;bundle-version="[3.210.0,4.0.0)",
org.eclipse.ui.navigator.resources;bundle-version="[3.9.0,4.0.0)",
org.eclipse.core.net;bundle-version="[1.5.0,2.0.0)",
org.eclipse.core.filesystem;bundle-version="1.10.0",
diff --git a/bundles/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/IDEApplication.java b/bundles/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/IDEApplication.java
index 23f25a15925..6ecf3ded110 100644
--- a/bundles/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/IDEApplication.java
+++ b/bundles/org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application/IDEApplication.java
@@ -52,6 +52,7 @@
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.MessageDialogWithToggle;
import org.eclipse.jface.preference.IPersistentPreferenceStore;
+import org.eclipse.jface.preference.ScopedPreferenceStore;
import org.eclipse.jface.window.Window;
import org.eclipse.osgi.service.datalocation.Location;
import org.eclipse.osgi.util.NLS;
@@ -76,7 +77,6 @@
import org.eclipse.ui.internal.ide.IDEInternalPreferences;
import org.eclipse.ui.internal.ide.IDEWorkbenchMessages;
import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
-import org.eclipse.ui.preferences.ScopedPreferenceStore;
import org.osgi.framework.Bundle;
import org.osgi.framework.Version;
diff --git a/bundles/org.eclipse.ui.ide/META-INF/MANIFEST.MF b/bundles/org.eclipse.ui.ide/META-INF/MANIFEST.MF
index a835ebf42a9..79e49703327 100644
--- a/bundles/org.eclipse.ui.ide/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.ui.ide/META-INF/MANIFEST.MF
@@ -48,7 +48,7 @@ Require-Bundle: org.eclipse.core.resources;bundle-version="[3.20.0,4.0.0)";resol
org.eclipse.core.runtime;bundle-version="[3.29.0,4.0.0)",
org.eclipse.core.filesystem;bundle-version="[1.10.0,2.0.0)",
org.eclipse.help;bundle-version="[3.10.0,4.0.0)",
- org.eclipse.ui;bundle-version="[3.208.0,4.0.0)",
+ org.eclipse.ui;bundle-version="[3.210.0,4.0.0)",
org.eclipse.ui.views;bundle-version="[3.12.0,4.0.0)";resolution:=optional,
org.eclipse.jface.text;bundle-version="[3.24.0,4.0.0)",
org.eclipse.ui.forms;bundle-version="[3.13.0,4.0.0)";resolution:=optional,
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ChooseWorkspaceData.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ChooseWorkspaceData.java
index c94640113d9..9ba3b607739 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ChooseWorkspaceData.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ChooseWorkspaceData.java
@@ -23,8 +23,8 @@
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.preferences.ConfigurationScope;
import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.ScopedPreferenceStore;
import org.eclipse.ui.ide.IDE;
-import org.eclipse.ui.preferences.ScopedPreferenceStore;
import org.osgi.service.prefs.BackingStoreException;
import org.osgi.service.prefs.Preferences;
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IDEWorkspacePreferencePage.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IDEWorkspacePreferencePage.java
index c3bc654590a..c37d677330d 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IDEWorkspacePreferencePage.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IDEWorkspacePreferencePage.java
@@ -42,6 +42,7 @@
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.IntegerFieldEditor;
import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.jface.preference.ScopedPreferenceStore;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.jface.util.BidiUtils;
import org.eclipse.osgi.util.NLS;
@@ -67,7 +68,6 @@
import org.eclipse.ui.internal.ide.IIDEHelpContextIds;
import org.eclipse.ui.internal.ide.LineDelimiterEditor;
import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;
-import org.eclipse.ui.preferences.ScopedPreferenceStore;
import org.eclipse.ui.views.markers.internal.MarkerMessages;
/**
diff --git a/bundles/org.eclipse.ui.workbench.texteditor/META-INF/MANIFEST.MF b/bundles/org.eclipse.ui.workbench.texteditor/META-INF/MANIFEST.MF
index 9cd9b4012db..fae838ba10d 100644
--- a/bundles/org.eclipse.ui.workbench.texteditor/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.ui.workbench.texteditor/META-INF/MANIFEST.MF
@@ -32,7 +32,7 @@ Require-Bundle:
org.eclipse.core.expressions;bundle-version="[3.4.100,4.0.0)",
org.eclipse.jface.text;bundle-version="[3.19.0,4.0.0)",
org.eclipse.swt;bundle-version="[3.133.0,4.0.0)",
- org.eclipse.ui;bundle-version="[3.208.0,4.0.0)",
+ org.eclipse.ui;bundle-version="[3.210.0,4.0.0)",
org.eclipse.jface.notifications
Bundle-RequiredExecutionEnvironment: JavaSE-21
Automatic-Module-Name: org.eclipse.ui.workbench.texteditor
diff --git a/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/WorkbenchChainedTextFontFieldEditor.java b/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/WorkbenchChainedTextFontFieldEditor.java
index 7d038f359ea..5ec7150beaf 100644
--- a/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/WorkbenchChainedTextFontFieldEditor.java
+++ b/bundles/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/texteditor/WorkbenchChainedTextFontFieldEditor.java
@@ -21,12 +21,11 @@
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.ScopedPreferenceStore;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.text.PropagatingFontFieldEditor;
-import org.eclipse.ui.preferences.ScopedPreferenceStore;
-
/**
* This font field editor implements chaining between the workbench's preference
diff --git a/bundles/org.eclipse.ui.workbench/META-INF/MANIFEST.MF b/bundles/org.eclipse.ui.workbench/META-INF/MANIFEST.MF
index ad8b78a2b9d..d445c136917 100644
--- a/bundles/org.eclipse.ui.workbench/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.ui.workbench/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.ui.workbench; singleton:=true
-Bundle-Version: 3.140.100.qualifier
+Bundle-Version: 3.141.0.qualifier
Bundle-Activator: org.eclipse.ui.internal.WorkbenchPlugin
Bundle-ActivationPolicy: lazy
Bundle-Vendor: %providerName
@@ -96,7 +96,7 @@ Export-Package: org.eclipse.e4.ui.workbench.addons.perspectiveswitcher;x-interna
org.eclipse.ui.wizards
Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.33.0,4.0.0)",
org.eclipse.help;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.jface;bundle-version="[3.31.0,4.0.0)",
+ org.eclipse.jface;bundle-version="[3.41.0,4.0.0)",
org.eclipse.jface.databinding;bundle-version="[1.3.0,2.0.0)",
org.eclipse.core.databinding.property;bundle-version="[1.2.0,2.0.0)",
org.eclipse.core.databinding.observable;bundle-version="[1.2.0,2.0.0)",
diff --git a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/PlatformUI.java b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/PlatformUI.java
index b176fb9147c..c80730105d2 100644
--- a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/PlatformUI.java
+++ b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/PlatformUI.java
@@ -23,6 +23,7 @@
import org.eclipse.e4.ui.services.help.EHelpService;
import org.eclipse.jface.dialogs.IDialogSettingsProvider;
import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.ScopedPreferenceStore;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.application.WorkbenchAdvisor;
@@ -30,7 +31,6 @@
import org.eclipse.ui.internal.WorkbenchMessages;
import org.eclipse.ui.internal.WorkbenchPlugin;
import org.eclipse.ui.internal.util.PrefUtil;
-import org.eclipse.ui.preferences.ScopedPreferenceStore;
import org.eclipse.ui.testing.TestableObject;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
diff --git a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/WorkbenchMessages.java b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/WorkbenchMessages.java
index cf676246aa7..469de885aeb 100644
--- a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/WorkbenchMessages.java
+++ b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/WorkbenchMessages.java
@@ -876,7 +876,6 @@ public class WorkbenchMessages extends NLS {
public static String FilteredTree_FilteredDialogTitle;
public static String FilteredTree_AccessibleListenerFiltered;
public static String Workbench_startingPlugins;
- public static String ScopedPreferenceStore_DefaultAddedError;
public static String WorkbenchEncoding_invalidCharset;
diff --git a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/dialogs/ViewsPreferencePage.java b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/dialogs/ViewsPreferencePage.java
index 92cb3e25d13..10da19bed2c 100644
--- a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/dialogs/ViewsPreferencePage.java
+++ b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/dialogs/ViewsPreferencePage.java
@@ -62,6 +62,7 @@
import org.eclipse.jface.preference.IPersistentPreferenceStore;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.jface.preference.ScopedPreferenceStore;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.viewers.ISelection;
@@ -90,7 +91,6 @@
import org.eclipse.ui.internal.WorkbenchPlugin;
import org.eclipse.ui.internal.themes.IThemeDescriptor;
import org.eclipse.ui.internal.util.PrefUtil;
-import org.eclipse.ui.preferences.ScopedPreferenceStore;
import org.eclipse.ui.themes.IThemeManager;
import org.osgi.service.prefs.BackingStoreException;
diff --git a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/messages.properties b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/messages.properties
index c7153c6b09a..8920f9043be 100644
--- a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/messages.properties
+++ b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/messages.properties
@@ -857,7 +857,6 @@ FilteredTree_FilterMessage=type filter text
FilteredTree_FilteredDialogTitle={0} (Filtered)
FilteredTree_AccessibleListenerFiltered={0} {1} matches.
Workbench_startingPlugins = Starting plug-ins
-ScopedPreferenceStore_DefaultAddedError=Do not add the default to the search contexts
WorkbenchEncoding_invalidCharset = {0} is not a valid charset.
diff --git a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/plugin/AbstractUIPlugin.java b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/plugin/AbstractUIPlugin.java
index fa809e76b46..d891ce9c54a 100644
--- a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/plugin/AbstractUIPlugin.java
+++ b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/plugin/AbstractUIPlugin.java
@@ -23,6 +23,7 @@
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.dialogs.IDialogSettingsProvider;
import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.ScopedPreferenceStore;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.jface.resource.ResourceLocator;
@@ -34,7 +35,6 @@
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.WWinPluginAction;
import org.eclipse.ui.internal.util.BundleUtility;
-import org.eclipse.ui.preferences.ScopedPreferenceStore;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleEvent;
diff --git a/bundles/org.eclipse.ui/META-INF/MANIFEST.MF b/bundles/org.eclipse.ui/META-INF/MANIFEST.MF
index bd3afebd4d1..a9e645a824d 100644
--- a/bundles/org.eclipse.ui/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %Plugin.name
Bundle-SymbolicName: org.eclipse.ui; singleton:=true
-Bundle-Version: 3.209.200.qualifier
+Bundle-Version: 3.210.0.qualifier
Bundle-Activator: org.eclipse.ui.internal.UIPlugin
Bundle-ActivationPolicy: lazy
Bundle-Vendor: %Plugin.providerName
@@ -10,7 +10,7 @@ Bundle-Localization: plugin
Export-Package: org.eclipse.ui.internal;x-friends:="org.eclipse.ui.workbench.texteditor,org.eclipse.search"
Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.29.0,4.0.0)",
org.eclipse.swt;bundle-version="[3.133.0,4.0.0)";visibility:=reexport,
- org.eclipse.jface;bundle-version="[3.34.0,4.0.0)";visibility:=reexport,
+ org.eclipse.jface;bundle-version="[3.41.0,4.0.0)";visibility:=reexport,
org.eclipse.ui.workbench;bundle-version="[3.138.100,4.0.0)";visibility:=reexport,
org.eclipse.core.expressions;bundle-version="[3.4.0,4.0.0)"
Bundle-RequiredExecutionEnvironment: JavaSE-21
diff --git a/tests/org.eclipse.jface.tests/src/org/eclipse/jface/tests/preferences/AllPrefsTests.java b/tests/org.eclipse.jface.tests/src/org/eclipse/jface/tests/preferences/AllPrefsTests.java
index 770e8dae7f8..ec92176a038 100644
--- a/tests/org.eclipse.jface.tests/src/org/eclipse/jface/tests/preferences/AllPrefsTests.java
+++ b/tests/org.eclipse.jface.tests/src/org/eclipse/jface/tests/preferences/AllPrefsTests.java
@@ -21,7 +21,8 @@
BooleanFieldEditorTest.class, //
StringFieldEditorTest.class, //
IntegerFieldEditorTest.class, //
- ScaleFieldEditorTest.class //
+ ScaleFieldEditorTest.class, //
+ ScopedPreferenceStoreTest.class //
})
public class AllPrefsTests {
diff --git a/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/preferences/ScopedPreferenceStoreTestCase.java b/tests/org.eclipse.jface.tests/src/org/eclipse/jface/tests/preferences/ScopedPreferenceStoreTest.java
similarity index 63%
rename from tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/preferences/ScopedPreferenceStoreTestCase.java
rename to tests/org.eclipse.jface.tests/src/org/eclipse/jface/tests/preferences/ScopedPreferenceStoreTest.java
index 1019f5c3afa..dbcb49a8c2d 100644
--- a/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/preferences/ScopedPreferenceStoreTestCase.java
+++ b/tests/org.eclipse.jface.tests/src/org/eclipse/jface/tests/preferences/ScopedPreferenceStoreTest.java
@@ -11,22 +11,22 @@
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
-package org.eclipse.ui.tests.preferences;
+package org.eclipse.jface.tests.preferences;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
import java.io.IOException;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.preferences.IScopeContext;
import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.jface.preference.ScopedPreferenceStore;
import org.eclipse.jface.util.IPropertyChangeListener;
-import org.eclipse.ui.preferences.ScopedPreferenceStore;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
-public class ScopedPreferenceStoreTestCase {
+public class ScopedPreferenceStoreTest {
final String DEFAULT_DEFAULT_STRING = "";
@@ -34,35 +34,34 @@ public class ScopedPreferenceStoreTestCase {
public void testNeedsSaving() throws IOException {
IScopeContext context = InstanceScope.INSTANCE;
String qualifier = "org.eclipse.ui.tests.preferences";
- ScopedPreferenceStore store = new ScopedPreferenceStore(context,
- qualifier);
+ ScopedPreferenceStore store = new ScopedPreferenceStore(context, qualifier);
String key = "key1";
String value = "value1";
// nothing there
- assertFalse("0.1", store.needsSaving());
- assertFalse("0.2", store.contains(key));
- assertEquals("0.3", DEFAULT_DEFAULT_STRING, store.getString(key));
+ assertFalse(store.needsSaving(), "0.1");
+ assertFalse(store.contains(key), "0.2");
+ assertEquals(DEFAULT_DEFAULT_STRING, store.getString(key), "0.3");
// set the value
store.setValue(key, value);
- assertTrue("1.0", store.needsSaving());
- assertTrue("1.1", store.contains(key));
- assertEquals("1.2", value, store.getString(key));
+ assertTrue(store.needsSaving(), "1.0");
+ assertTrue(store.contains(key), "1.1");
+ assertEquals(value, store.getString(key), "1.2");
// flush
store.save();
// do the test
- assertFalse("3.0", store.needsSaving());
+ assertFalse(store.needsSaving(), "3.0");
// change the node outside of the scoped store
String key2 = "key2";
String value2 = "value2";
IEclipsePreferences node = context.getNode(qualifier);
node.put(key2, value2);
- assertEquals("4.0", value2, node.get(key2, null));
- assertFalse("4.1", store.needsSaving());
+ assertEquals(value2, node.get(key2, null), "4.0");
+ assertFalse(store.needsSaving(), "4.1");
}
@Test
@@ -74,16 +73,16 @@ public void testRestoreDefaults() {
final String value = "value";
// setup and initial assertions
- assertFalse("0.1", store.contains(key));
- assertEquals("0.2", DEFAULT_DEFAULT_STRING, store.getString(key));
+ assertFalse(store.contains(key), "0.1");
+ assertEquals(DEFAULT_DEFAULT_STRING, store.getString(key), "0.2");
// set the value
store.setValue(key, value);
- assertTrue("1.0", store.contains(key));
- assertEquals("1.1", value, store.getString(key));
+ assertTrue(store.contains(key), "1.0");
+ assertEquals(value, store.getString(key), "1.1");
final boolean[] found = new boolean[1];
- IPropertyChangeListener listener= event -> {
+ IPropertyChangeListener listener = event -> {
if (key.equals(event.getProperty()) && value.equals(event.getOldValue())) {
found[0] = true;
}
@@ -92,11 +91,11 @@ public void testRestoreDefaults() {
// restore the default
store.setToDefault(key);
- assertFalse("2.0", store.contains(key));
- assertEquals("2.1", DEFAULT_DEFAULT_STRING, store.getString(key));
+ assertFalse(store.contains(key), "2.0");
+ assertEquals(DEFAULT_DEFAULT_STRING, store.getString(key), "2.1");
// check it
- assertTrue("3.0", found[0]);
-}
+ assertTrue(found[0], "3.0");
+ }
}
diff --git a/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/preferences/PreferencesTestSuite.java b/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/preferences/PreferencesTestSuite.java
index a6526ee5d33..0e2a768597f 100644
--- a/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/preferences/PreferencesTestSuite.java
+++ b/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/preferences/PreferencesTestSuite.java
@@ -27,7 +27,6 @@
@SelectClasses({
FontPreferenceTestCase.class,
DeprecatedFontPreferenceTestCase.class,
- ScopedPreferenceStoreTestCase.class,
WorkingCopyPreferencesTestCase.class,
PropertyPageEnablementTest.class,
ListenerRemovalTestCase.class,
From 5a833dc7dee0a35f1b4e651d1af5295209f294d9 Mon Sep 17 00:00:00 2001
From: Patrick Ziegler
Date: Mon, 24 Aug 2026 21:10:41 +0200
Subject: [PATCH 2/2] Restore dummy `ScopedPreferenceStore` for backwards
compatibility #4262
This adds the `ScopedPreferenceStore` back to the Platform Workbench
bundle to restore backwards compatibility. Note that this is done in a
separate commit, to make sure that the history of this class now resides
with the preference store that has been moved to the JFace component.
The old implementation is still being used in the `PlatformUI` and
`AbstractUIPlugin` for backwards compatibility, in case of a type cast
on the returned store.
Closes https://github.com/eclipse-platform/eclipse.platform.ui/issues/4262
---
.../.settings/.api_filters | 8 +++
.../eclipseui/org/eclipse/ui/PlatformUI.java | 2 +-
.../eclipse/ui/plugin/AbstractUIPlugin.java | 6 +-
.../ui/preferences/ScopedPreferenceStore.java | 66 +++++++++++++++++++
4 files changed, 78 insertions(+), 4 deletions(-)
create mode 100644 bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/preferences/ScopedPreferenceStore.java
diff --git a/bundles/org.eclipse.ui.workbench/.settings/.api_filters b/bundles/org.eclipse.ui.workbench/.settings/.api_filters
index 4614ab0685b..9cc1746b3d7 100644
--- a/bundles/org.eclipse.ui.workbench/.settings/.api_filters
+++ b/bundles/org.eclipse.ui.workbench/.settings/.api_filters
@@ -8,4 +8,12 @@
+
+
+
+
+
+
+
+
diff --git a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/PlatformUI.java b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/PlatformUI.java
index c80730105d2..b176fb9147c 100644
--- a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/PlatformUI.java
+++ b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/PlatformUI.java
@@ -23,7 +23,6 @@
import org.eclipse.e4.ui.services.help.EHelpService;
import org.eclipse.jface.dialogs.IDialogSettingsProvider;
import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.preference.ScopedPreferenceStore;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.application.WorkbenchAdvisor;
@@ -31,6 +30,7 @@
import org.eclipse.ui.internal.WorkbenchMessages;
import org.eclipse.ui.internal.WorkbenchPlugin;
import org.eclipse.ui.internal.util.PrefUtil;
+import org.eclipse.ui.preferences.ScopedPreferenceStore;
import org.eclipse.ui.testing.TestableObject;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
diff --git a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/plugin/AbstractUIPlugin.java b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/plugin/AbstractUIPlugin.java
index d891ce9c54a..58458dbd384 100644
--- a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/plugin/AbstractUIPlugin.java
+++ b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/plugin/AbstractUIPlugin.java
@@ -23,7 +23,6 @@
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.dialogs.IDialogSettingsProvider;
import org.eclipse.jface.preference.IPreferenceStore;
-import org.eclipse.jface.preference.ScopedPreferenceStore;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.jface.resource.ResourceLocator;
@@ -35,6 +34,7 @@
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.WWinPluginAction;
import org.eclipse.ui.internal.util.BundleUtility;
+import org.eclipse.ui.preferences.ScopedPreferenceStore;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleEvent;
@@ -115,7 +115,7 @@ public abstract class AbstractUIPlugin extends Plugin {
/**
* Storage for preferences.
*/
- private volatile ScopedPreferenceStore preferenceStore;
+ private volatile IPreferenceStore preferenceStore;
/**
* The registry for all graphic images; null if not yet
@@ -245,7 +245,7 @@ public ImageRegistry getImageRegistry() {
*/
public IPreferenceStore getPreferenceStore() {
// Create the preference store lazily.
- ScopedPreferenceStore result = preferenceStore;
+ IPreferenceStore result = preferenceStore;
if (result == null) { // First check (no locking)
synchronized (this) {
result = preferenceStore;
diff --git a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/preferences/ScopedPreferenceStore.java b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/preferences/ScopedPreferenceStore.java
new file mode 100644
index 00000000000..802a07acad0
--- /dev/null
+++ b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/preferences/ScopedPreferenceStore.java
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2018 IBM Corporation and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ * Yves YANG -
+ * Initial Fix for Bug 138078 [Preferences] Preferences Store for i18n support
+ *******************************************************************************/
+package org.eclipse.ui.preferences;
+
+import org.eclipse.core.runtime.preferences.IScopeContext;
+
+/**
+ * The ScopedPreferenceStore is an IPreferenceStore that uses the scopes
+ * provided in org.eclipse.core.runtime.preferences.
+ *
+ * A ScopedPreferenceStore does the lookup of a preference based on it's search
+ * scopes and sets the value of the preference based on its store scope.
+ *
+ *
+ * The default scope is always included in the search scopes when searching for
+ * preference values.
+ *
+ *
+ * Note: This class is kept for backwards compatibility. Users are
+ * encouraged to use the JFace preference store in order to avoid a hard
+ * dependency on the Eclipse 3.x API.
+ *
+ *
+ * @see org.eclipse.core.runtime.preferences
+ * @since 3.1
+ */
+public class ScopedPreferenceStore extends org.eclipse.jface.preference.ScopedPreferenceStore {
+
+ /**
+ * Create a new instance of the receiver. Store the values in context in the
+ * node looked up by qualifier. NOTE: Any instance of
+ * ScopedPreferenceStore should call
+ *
+ * @param context the scope to store to
+ * @param qualifier the qualifier used to look up the preference node
+ * @param defaultQualifierPath the qualifier used when looking up the defaults
+ */
+ public ScopedPreferenceStore(IScopeContext context, String qualifier, String defaultQualifierPath) {
+ super(context, qualifier, defaultQualifierPath);
+ }
+
+ /**
+ * Create a new instance of the receiver. Store the values in context in the
+ * node looked up by qualifier.
+ *
+ * @param context the scope to store to
+ * @param qualifier the qualifer used to look up the preference node
+ */
+ public ScopedPreferenceStore(IScopeContext context, String qualifier) {
+ super(context, qualifier);
+ }
+
+}