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 喜好設定來傳送事件。

對於變更事件中的 typed 和 String 值,都應該準備 ScopedPreferenceStore 的接聽器, 因為仍然可能會透過 OSGI 喜好設定來取得事件(例如,在匯入喜好設定期間)。OSGI 事件的類型一律是 java.lang.String

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

永遠都可能從 Eclipse SDK 的現有 IWorkbenchWindows 中,取得空值的 org.eclipse.swt.widgets.Shell。我們現在明確定義何時會發生此事件:即尚未建立 Shell 時,或已關閉 IWorkbenchWindow 時。