Apesar do comportamento de IPreferenceStore facultado porAbstractUIPlugin#getPreferenceStore()
não se ter alterado, actualizámos a especificação de IPreferenceStore para definir de forma explícita o comportamento que facultámos.
Escrever PropertyChangeEvents
Qualquer evento de alteração de propriedade de um IPreferenceStore terá de ter um valor antigo e novo do mesmo tipo que seja consistente com a chamada setValue que o possa gerar.
Por exemplo, se chamar IPreferenceStore#setValue(Nome de cadeia, valor longo)
os valores em PropertyChangeEvent gerados deste método serão ambos de tipo java.lang.Long
.
putValue
As chamadas de #putValue
não vão gerar PropertyChangedEvent
.
As chamadas para vários métodos #setValue
sim.
Relacionamento entre a Preferência de OSGI e um IPreferenceStore
O IPreferenceStore facultado por AbstractUIPlugin#getPreferenceStore()
é uma instância de ScopedPreferenceStore
que utiliza org.osgi.service.prefs.Preferences
como fundo.
org.osgi.service.prefs.Preferences
propaga os eventos de alteração apenas como Cadeias.
O ScopedPreferenceStore
translineia esses eventos de OSGI gerados por IPreferenceStore#setValue(Nome da cadeia, Valor da cadeia)
e um dos seus PropertyChangeEvents
e remete esse evento para os seus receptores.
Para outras implementações deIPreferenceStore#setValue
, o ScopedPreferenceStore
vai criar os seus próprios eventos do tipo correcto e não vai propagar os eventos das preferências de OSGI.
Os receptores de um ScopedPreferenceStore
devem estar preparados para os valores de tipo e de cadeia em eventos de alteração de nível, visto ser possível obter um evento através das preferências de OSGI (durante uma importação de preferência para a instância).
Os eventos de OSGI são sempre de tipo java.lang.String.
Sempre foi possível obter um org.eclipse.swt.widgets.Shell nulo do IWorkbenchWindows existente no Eclipse SDK. Agora definimos de forma explícita as condições em que isto ocorre, nomeadamente quando a shell não foi criada ou quando IWorkbenchWindow foi fechado.