FAQ de Migração de Plug-ins do Eclipse 3.1

  1. IPreferenceStore tem uma API mais explícita
  2. IWorkbenchWindow#getShell() tem uma API mais explícita

IPreferenceStore tem uma API mais explícita

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.

IWorkbenchWindow#getShell() tem a API mais explícita

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.