Хотя способ работы IPreferenceStore (предоставляется
AbstractUIPlugin#getPreferenceStore()
) не изменился, обновлена спецификация
IPreferenceStore для определения предоставленного способа работы явным образом.
Типы PropertyChangeEvents
Старое и новое значения любого события IPreferenceStore, связанного с изменением свойства, должны быть одинакового типа, соответствующего исходному вызову setValue.
Например, если вызвать IPreferenceStore#setValue(String
name, long value)
, то в созданном PropertyChangeEvent указываются значения типа
java.lang.Long
.
putValue
Вызовы #putValue
, в отличие от вызовов различных методов
#setValue
, не предусматривают
создание PropertyChangedEvent
.
Отношение между параметром OSGI и IPreferenceStore
IPreferenceStore (предоставляется AbstractUIPlugin#getPreferenceStore()
)
представляет собой экземпляр ScopedPreferenceStore
, использующий
org.osgi.service.prefs.Preferences
в качестве базового обеспечения. org.osgi.service.prefs.Preferences
распространяет изменения только в качестве строк.
ScopedPreferenceStore
объединяет события OSGI, созданные
функцией IPreferenceStore#setValue(String name, String value)
, а также одно
из событий PropertyChangeEvents
и перенаправляет данное событие связанным
обработчикам. В других реализациях IPreferenceStore#setValue
ScopedPreferenceStore
создает собственные события подходящего типа без
распространения событий, связанных с параметрами OSGI.
Обработчики событий ScopedPreferenceStore
должны поддерживать
как типизированные события, так и строковые значения, поскольку существует вероятность
получения событий с помощью параметров OSGI (например, в ходе импорта
параметров). Для событий OSGI всегда применяется тип java.lang.String.
Пустой org.eclipse.swt.widgets.Shell всегда можно было получить от существующего IWorkbenchWindows в Eclipse SDK. Теперь мы явно указываем условия, при которых это происходит: когда оболочка не создана, либо при закрытии IWorkbenchWindow.