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); + } + +}