Хотя способ работы 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.