Preguntas más frecuentes (FAQ) acerca de la migración de conectores a Eclipse 3.1

  1. IPreferenceStore tiene unas API más explícitas
  2. IWorkbenchWindow#getShell() tiene una API más explícita

IPreferenceStore tiene unas API más explícitas

Aunque el comportamiento del IPreferenceStore proporcionado por AbstractUIPlugin#getPreferenceStore() no ha cambiado, hemos actualizado la especificación de IPreferenceStore para definir explícitamente el comportamiento que hemos proporcionado.

Escritura de PropertyChangeEvents

Cualquier evento de cambio de propiedades de un IPreferenceStore debe tener un valor antiguo y uno nuevo del mismo tipo que sea coherente con la llamada setValue que lo generó.

Por ejemplo, si llama a IPreferenceStore#setValue(nombre Serie, valor largo), los valores del PropertyChangeEvent generado a partir de este método serán de tipo java.lang.Long.

putValue

Las llamadas a #putValue no generarán un PropertyChangedEvent. Las llamadas a los diversos métodos #setValue sí lo harán.

Relación entre Preferencia de OSGI e IPreferenceStore

El IPreferenceStore proporcionado por AbstractUIPlugin#getPreferenceStore() es una instancia de ScopedPreferenceStore que utiliza org.osgi.service.prefs.Preferences como valor de fondo. org.osgi.service.prefs.Preferences sólo propaga los sucesos de cambio como Series.

Los reiniciadores de ScopedPreferenceStore cuyos sucesos OSGI generados por IPreferenceStore#setValue(nombre Serie, valor Serie) y uno de sus propios PropertyChangeEvents reenvía ese evento a sus escuchas. Para las demás implementaciones de IPreferenceStore#setValue, el ScopedPreferenceStore creará sus propios sucesos del tipo correcto y no propagará los sucesos desde las preferencias de OSGI.

Los escuchas de un ScopedPreferenceStore deben estar preparados para valores escritos y de Serie en sus sucesos de cambio, ya que todavía es posible obtener un evento a través de las preferencias de OSGI (por ejemplo, durante un proceso de importación de preferencias). Los sucesos OSGI son siempre del tipo java.lang.String.

IWorkbenchWindow#getShell() tiene una API más explícita

Siempre ha sido posible obtener un org.eclipse.swt.widgets.Shell nulo de un IWorkbenchWindows existente en el SDK de Eclipse. Ahora definimos explícitamente las condiciones en que esto ocurre, es decir, cuando la shell no se ha creado o cuando IWorkbenchWindow se ha cerrado.