Вопросы и ответы по миграции модулей в Eclipse 3.1

  1. Более явный API IPreferenceStore
  2. Более явный API IWorkbenchWindow#getShell()

Более явный API IPreferenceStore

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

Более явный API IWorkbenchWindow#getShell()

Пустой org.eclipse.swt.widgets.Shell всегда можно было получить от существующего IWorkbenchWindows в Eclipse SDK. Теперь мы явно указываем условия, при которых это происходит: когда оболочка не создана, либо при закрытии IWorkbenchWindow.