FAQ relative alla migrazione dei plugin di Eclipse 3.1

  1. IPreferenceStore presenta API più esplicite
  2. IWorkbenchWindow#getShell() presenta API più esplicite

IPreferenceStore presenta API più esplicite

Anche se il comportamento di IPreferenceStore fornito da AbstractUIPlugin#getPreferenceStore() non è stato modificato, sono state aggiornate le specifiche di IPreferenceStore per definire in modo esplicito il comportamento fornito.

Tipologia di PropertyChangeEvents

Ogni evento di modifica proprietà da IPreferenceStore deve disporre di un valore vecchio e uno nuovo dello stesso tipo che sia congruente con la chiamata setValue che lo ha generato.

Ad esempio, se si richiama IPreferenceStore#setValue(String name, long value), i valori in PropertyChangeEvent generati da questo metodo saranno entrambi del tipo java.lang.Long.

putValue

Le chiamate a #putValue non genereranno un PropertyChangedEvent. Le chiamate ai diversi metodi #setValue invece lo genereranno.

Relazioni tra la preferenza OSGI e un IPreferenceStore

IPreferenceStore fornito da AbstractUIPlugin#getPreferenceStore() è un'istanza di ScopedPreferenceStore che utilizza org.osgi.service.prefs.Preferences come back-end. org.osgi.service.prefs.Preferences propaga gli eventi di modifica solo come String.

ScopedPreferenceStore unisce gli eventi OSGI generati da IPreferenceStore#setValue(String name, String value) e uno dei propri PropertyChangeEvents ed inoltra l'evento ai listener. Per le altre implementazioni di IPreferenceStore#setValue, ScopedPreferenceStore creerà i propri eventi del tipo corretto e non propagherà gli eventi dalle preferenze OSGI.

I listener di ScopedPreferenceStore devono essere preparati per ricevere valori con tipo o String negli eventi di modifica, dal momento che è ancora possibile ricevere un evento tramite le preferenze OSGI (ad esempio, durante l'importazione delle preferenze). Gli eventi OSGI sono sempre di tipo java.lang.String.

IWorkbenchWindow#getShell() presenta API più esplicite

Già in precedenza era possibile ricevere un org.eclipse.swt.widgets.Shell null da un IWorkbenchWindow esistente in Eclipse SDK. Ora sono definite esplicitamente le condizioni in cui questo si verifica, quando la shell non è stata creata o quando IWorkbenchWindow è stato chiuso.