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.
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.