Eclipse 3.1 插件迁移 FAQ

  1. IPreferenceStore 具有更明确的 API
  2. IWorkbenchWindow#getShell() 具有更明确的 API

IPreferenceStore 具有更明确的 API

尽管由 AbstractUIPlugin#getPreferenceStore() 提供的 IPreferenceStore 的行为尚未更改,但我们已更新 IPreferenceStore 的规范以显式地定义我们已提供的行为。

PropertyChangeEvents 的输入

任何来自 IPreferenceStore 的属性更改事件必须具有一个相同类型的旧值和新值,且该值必须与生成它的 setValue 调用一致。

例如,如果您调用 IPreferenceStore#setValue(String name, long value),则从此方法生成的 PropertyChangeEvent 中的值都将具有 java.lang.Long 类型。

putValue

调用 #putValue 将不会生成 PropertyChangedEvent。对各种 #setValue 方法的调用将。

OSGI 首选项和 IPreferenceStore 之间的关系

AbstractUIPlugin#getPreferenceStore() 提供的 IPreferenceStore 是 ScopedPreferenceStore(它使用 org.osgi.service.prefs.Preferences 作为后端)的实例。org.osgi.service.prefs.Preferences 仅以字符串的形式传播更改事件。

ScopedPreferenceStore 包装 IPreferenceStore#setValue(String name, String value) 生成的那些 OSGI 事件和一个它自己的 PropertyChangeEvents,并将该事件转发到其侦听器。对于 IPreferenceStore#setValue 的其它实现,ScopedPreferenceStore 将创建它自己的正确类型的事件且不传播来自 OSGI 首选项的事件。

因为仍有可能通过 OSGI 首选项获得事件(在实例的首选项导入期间),所以应该准备 ScopedPreferenceStore 的侦听器以获取其更改事件中的输入值和字符串值。OSGI 事件的类型始终是 java.lang.String

IWorkbenchWindow#getShell() 具有更明确的 API

它始终可能从 Eclipse SDK 中的现有 IWorkbenchWindows 获取空 org.eclipse.swt.widgets.Shell。我们现在显式地定义这些情况的发生条件, 即 shell 何时未被创建或者 IWorkbenchWindow 何时已被关闭。