Perguntas Mais Freqüentes da Migração do Plug-in Eclipse 3.1

  1. IPreferenceStore Possui API Mais Explícita
  2. IWorkbenchWindow#getShell() Possui API Mais Explícita

IPreferenceStore Possui API Mais Explícita

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.

IWorkbenchWindow#getShell() Possui API Mais Explícita

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.