Embora o comportamento do IPreferenceStore fornecido por AbstractUIPlugin#getPreferenceStore()
não tenha sido alterado, atualizamos a especificação do IPreferenceStore
para definir explicitamente o comportamento que fornecemos.
Tipos de PropertyChangeEvents
Qualquer evento de alteração de propriedade de um IPreferenceStore deve ter um valor antigo e um novo do mesmo tipo que seja consistente com a chamada setValue que o gerou.
Por exemplo, se você chamar IPreferenceStore#setValue(String name, long value)
ambos os valores no PropertyChangeEvent gerados nesse método serão do tipo
java.lang.Long
.
putValue
Chamadas para #putValue
não gerarão um PropertyChangedEvent
.
Enquanto chamadas para os vários métodos #setValue
gerarão.
Relacionamento entre a Preferência de OSGI e um IPreferenceStore
O IPreferenceStore fornecido pelo AbstractUIPlugin#getPreferenceStore()
é uma instância do ScopedPreferenceStore
que utiliza org.osgi.service.prefs.Preferences
como um backend. org.osgi.service.prefs.Preferences
propaga eventos de alteração apenas como Cadeias.
O ScopedPreferenceStore
agrupa esses eventos de OSGI gerados
por IPreferenceStore#setValue(String name, String value)
e um
de seus próprios PropertyChangeEvents
e encaminha esse evento
para seus listeners. Para as outras implementações do IPreferenceStore#setValue
o ScopedPreferenceStore
criará seus próprios eventos de tipo correto
e não propagará os eventos da preferências de OSGI.
Listeners para um ScopedPreferenceStore
devem estar preparados para valores digitados e de Cadeia em seus eventos de alteração, pois ainda é possível obter um evento
por meio das preferências de OSGI (durante uma importação de preferência para a instância). Eventos de OSGI sempre são do tipo java.lang.String.
Tem sido sempre possível obter um org.eclipse.swt.widgets.Shell nulo do IWorkbenchWindows existente no SDK Eclipse. São definidas agora explicitamente as condições onde isso ocorre, isto é, quando a shell não tiver sido criada ou quando IWorkbenchWindow tiver sido fechado.