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 は、org.osgi.service.prefs.Preferences
をバックエンドとして使用する ScopedPreferenceStore
のインスタンスです。org.osgi.service.prefs.Preferences
は、変更イベントをストリングとしてのみ伝搬します。
ScopedPreferenceStore
は、IPreferenceStore#setValue(String name, String value)
によって生成される OSGI イベントや、独自の PropertyChangeEvents
の 1 つをラッピングし、そのイベントをリスナーに転送します。IPreferenceStore#setValue
の他の実装の場合、ScopedPreferenceStore
は、正しい型の独自のイベントを作成しますが、イベントを OSGI 設定から伝搬することはありません。
ScopedPreferenceStore
に対するリスナーは、依然として OSGI 設定を介してイベントを取得する可能性があるため (インスタンス用の設定インポート中に)、変更イベントの型付き値とストリング値の両方に備える必要があります。OSGI イベントの型は常に java.lang.String
です。
従来は、Eclipse SDK に既存の IWorkbenchWindows から、ヌルの org.eclipse.swt.widgets.Shell を常に取得することができました。現時点では、これが発生する条件、すなわちシェルが作成されていなかった場合や、IWorkbenchWindow がクローズされていた場合を、明示的に定義しています。