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 は、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 です。

IWorkbenchWindow#getShell() には、より明示的な API がある

従来は、Eclipse SDK に既存の IWorkbenchWindows から、ヌルの org.eclipse.swt.widgets.Shell を常に取得することができました。現時点では、これが発生する条件、すなわちシェルが作成されていなかった場合や、IWorkbenchWindow がクローズされていた場合を、明示的に定義しています。