Armazenamentos de Preferências do JFace

A partir do release 3.1 o org.eclipse.jface.preference.IPreferenceStore retornado do AbstractUIPlugin#getPreferenceStore será uma instância do org.eclipse.ui.preferences.ScopedPreferenceStore. O ScopedPreferenceStore utiliza a nova API de tempo de execução do núcleo para gerenciar preferências. No 3.0 ele utilizou a camada de compatibilidade para a interface com uma instância de org.eclipse.core.runtime.Preferences.

No 3.1 removemos a ambigüidade do IPreferenceStore para ser mais específico sobre os tipos dos valores enviados em eventos alterados de preferência. O IPreferenceStore do AbstractUIPlugin#getPreferenceStore tem o mesmo comportamento de antes - todos que foram alterados são aqueles que foram especificados mais claramente.

Digitando: org.eclipse.jface.util.IPreferenceChangeListeners incluído em um IPreferenceStore potencialmente podem ser obtidos dois tipos de valores antigos e novos - representações digitadas ou de Cadeia. Qualquer evento gerado por uma chamada para uma API PreferenceStore digitada (como setValue(String key, boolean value) gerará um evento digitado. No entanto, também é possível que os eventos sejam propagados das preferências de tempo de execução do núcleo que geram um evento não digitado (por exemplo, em uma importação de preferência). Os listeners de preferência precisam ser preparados para os dois. Observe também que os eventos digitados não estarão propagando tipos primitivos, portanto, uma chamada para setValue(String key, boolean value) resultará em um evento em que o oldValue e o newValue são Booleanos.

putValue: IPreferenceStore.putValue(String key, String value) não gerará um evento de alteração. Essa API cujo propósito é ser utilizada para preferências privadas, para a qual nenhum listener deseja reagir.

initializeDefaultPreferences. Essa API foi desaprovada no Eclipse 3.0, pois será disparada apenas se a camada de compatibilidade for utilizada. Como a maioria dos plug-ins conta com o AbstractUIPlugin#getPreferenceStore para obter seu armazenamento de preferências, isso estava sendo disparado na inicialização do plug-in anteriormente. Se o plug-in não acessar ele mesmo a camada de compatibilidade, esse método não poderá ser disparado. É recomendável que você crie um org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer para manipular a inicialização de suas preferências.