Přestože se chování IPreferenceStore poskytovaného prostřednictvím AbstractUIPlugin#getPreferenceStore()
nijak nezměnilo, aktualizovali jsme specifikaci IPreferenceStore, aby bylo explicitně definováno chování, které poskytujeme.
Typování PropertyChangeEvents
Všechny události změny vlastnosti z IPreferenceStore musí mít starou a novou hodnotu stejného typu konzistentní s voláním setValue, které je vygenerovalo.
Například když voláte IPreferenceStore#setValue(String name, long
value)
, obě hodnoty v PropertyChangeEvent generované z této metody budou typu
java.lang.Long
.
putValue
Volání #putValue
nebude generovat PropertyChangedEvent
.
Opak platí pro volání různých metod #setValue
.
Vztah mezi OSGI Preference a IPreferenceStore
IPreferenceStore poskytovaný metodou AbstractUIPlugin#getPreferenceStore()
je instancí
ScopedPreferenceStore
, která používá org.osgi.service.prefs.Preferences
jako backend. org.osgi.service.prefs.Preferences
šíří události změn pouze jako řetězce.
ScopedPreferenceStore
obaluje tyto události OSGI generované metodou
IPreferenceStore#setValue(String name, String value)
a jednou ze svých vlastních
PropertyChangeEvents
a předává takovou událost svým listenerům.
U dalších implementací IPreferenceStore#setValue
vytvoří
ScopedPreferenceStore
své vlastní události správného typu a nebude události šířit z předvoleb OSGI.
Listenery na ScopedPreferenceStore
by ve svých událostech změn měly být připraveny na typové hodnoty i hodnoty typu řetězec, protože stále mohou dostat událost prostřednictvím předvoleb OSGI (například při importu předvolby). Události OSGI jsou vždy typu java.lang.String.
Vždy bylo možné získat hodnotu null org.eclipse.swt.widgets.Shell ze stávajícího IWorkbenchWindows v Eclipse SDK. Nyní explicitně definujeme podmínky, kdy k tomuto dochází, zejména pokud nebyla vytvořena nadstavba, nebo když bylo uzavřeno IWorkbenchWindow.