Anche se il comportamento di IPreferenceStore fornito da AbstractUIPlugin#getPreferenceStore()
non è stato modificato, sono state aggiornate le specifiche di IPreferenceStore per definire in modo esplicito il comportamento
fornito.
Tipologia di PropertyChangeEvents
Ogni evento di modifica proprietà da IPreferenceStore deve disporre di un valore vecchio e uno nuovo dello stesso tipo che sia congruente con la chiamata setValue che lo ha generato.
Ad esempio, se si richiama IPreferenceStore#setValue(String name, long
value)
, i valori in PropertyChangeEvent generati da questo metodo saranno entrambi del tipo java.lang.Long
.
putValue
Le chiamate a #putValue
non genereranno un PropertyChangedEvent
.
Le chiamate ai diversi metodi #setValue
invece lo genereranno.
Relazioni tra la preferenza OSGI e un IPreferenceStore
IPreferenceStore fornito da AbstractUIPlugin#getPreferenceStore()
è un'istanza di ScopedPreferenceStore
che utilizza org.osgi.service.prefs.Preferences
come back-end. org.osgi.service.prefs.Preferences
propaga gli
eventi di modifica solo come String.
ScopedPreferenceStore
unisce gli eventi OSGI generati da IPreferenceStore#setValue(String name, String value)
e uno dei propri PropertyChangeEvents
ed inoltra l'evento ai listener. Per le altre implementazioni di
IPreferenceStore#setValue
, ScopedPreferenceStore
creerà i propri eventi del tipo corretto e non propagherà gli
eventi dalle preferenze OSGI.
I listener di ScopedPreferenceStore
devono essere preparati per ricevere valori con tipo o String negli eventi di modifica,
dal momento che è ancora possibile ricevere un evento tramite le preferenze OSGI (ad esempio, durante l'importazione delle preferenze).
Gli
eventi OSGI sono sempre di tipo java.lang.String.
Già in precedenza era possibile ricevere un org.eclipse.swt.widgets.Shell null da un IWorkbenchWindow esistente in Eclipse SDK. Ora sono definite esplicitamente le condizioni in cui questo si verifica, quando la shell non è stata creata o quando IWorkbenchWindow è stato chiuso.