Foire aux questions - Migration des plug-in vers Eclipse 3.1

  1. API plus explicite de IPreferenceStore
  2. API plus explicite de IWorkbenchWindow#getShell()

API plus explicite de IPreferenceStore

Bien que le comportement de IPreferenceStore fourni par AbstractUIPlugin#getPreferenceStore() n'ait pas changé, nous avons mis à jour la spécification de IPreferenceStore pour définir de manière explicite le comportement fourni.

Typage de PropertyChangeEvents

Tout événement de changement de propriété provenant de IPreferenceStore doit avoir une ancienne et une nouvelle valeur du même type cohérente avec l'appel setValue qui l'a générée.

Par exemple, si vous appelez IPreferenceStore#setValue(String name, long value) les valeurs générées dans PropertyChangeEvent à partir de cette méthode seront de type java.lang.Long.

putValue

Les appels de #putValue ne généreront pas de PropertyChangedEvent. Les appels de différentes méthodes #setValue le feront.

Relations entre la préférence OSGI et IPreferenceStore

IPreferenceStore fourni par AbstractUIPlugin#getPreferenceStore() est une instance de ScopedPreferenceStore qui utilise org.osgi.service.prefs.Preferences comme système dorsal. org.osgi.service.prefs.Preferences propage les événements de changement uniquement sous forme de chaîne.

ScopedPreferenceStore encapsule ces événements OSGI générés par IPreferenceStore#setValue(String name, String value) et un des ses propres PropertyChangeEvents et transmet cet événement à ses programmes d'écoute. Pour les autres implémentations deIPreferenceStore#setValue, ScopedPreferenceStore créera ses propres événements de type correct et ne propagera pas les événements des préférences OSGI.

Les modules d'écoute d'un ScopedPreferenceStore doivent être préparés pour les valeurs de chaîne et de type dans leurs événements de changement dans la mesure où il est toujours possible d'obtenir un événement via les préférences OSGI (lors de l'importation d'une préférence par exemple). Les événements OSGI sont toujours de type java.lang.String.

API plus explicite de IWorkbenchWindow#getShell()

Il a toujours été possible d'obtenir un org.eclipse.swt.widgets.Shell nul dans le IWorkbenchWindows existant du Eclipse SDK. Nous définissons maintenant explicitement les conditions dans lesquelles ceci se produit, à savoir lorsque le système n'a pas été créé ou lorsque la IWorkbenchWindow a été fermée.