Hoewel het gedrag van IPreferenceStore die wordt geleverd doorAbstractUIPlugin#getPreferenceStore()
niet is gewijzigd, is de specificatie van IPreferenceStore bijgewerkt om expliciet het gedrag te definiëren dat is geleverd.
Types van PropertyChangeEvents
Elk eigenschapwijzigingsevent van een IPreferenceStore moeten een nieuwe en een oude waarde hebben van hetzelfde type dat consistent is met de setValue-aanroep waarmee het is gegenereerd.
Als u bijvoorbeeld IPreferenceStore#setValue (tekenreeksnaam, lange waarde )
aanroept, zijn de waarden in de PropertyChangeEvent die met deze methode zijn gegenereerd beide van het type java.lang.Long
.
putValue
Met het aanroepen van #putValue
wordt geen PropertyChangedEvent
gegenereerd.
Met aanroepen naar de verschillende #setValue
methoden gebeurt dit wel.
Relatie tussen de OSGI-voorkeur en een IPreferenceStore
De IPreferenceStore die wordt geleverd door AbstractUIPlugin#getPreferenceStore()
is
een instance van ScopedPreferenceStore
die gebruikmaakt van org.osgi.service.prefs.Preferences
als backend.
org.osgi.service.prefs.Preferences
voert wijzigingsevents alleen als tekenreeksen door in onderliggende niveaus.
De ScopedPreferenceStore
verpakt die OSGI-events die zijn gegenereerd doorIPreferenceStore#setValue(tekenreeksnaam, tekenreekswaarde)
en een van de eigenPropertyChangeEvents
en stuurt die event door naar de listeners. Voor de andere implementaties van IPreferenceStore#setValue
maakt de ScopedPreferenceStore
eigen events van het juiste type en worden er geen events van de OSGI-voorkeuren doorgevoerd in onderliggende niveaus.
Listeners voor een ScopedPreferenceStore
moeten worden voorbereid voor de beide typen en tekenreekswaarden in hun wijzigingsevents omdat het nog steeds mogelijk is om een event via de OSGI-voorkeuren op te halen (tijdens een voorkeursimport bijvoorbeeld).
OSGI-events zijn altijd van het type java.lang.String.
Het is altijd mogelijk geweest om een null org.eclipse.swt.widgets.Shell op te halen van de bestaande IWorkbenchWindows in de Eclipse SDK. Nu worden expliciet de voorwaarden gedefinieerd als dit gebeurt, bijvoorbeeld als de shell niet is gemaakt of als het IWorkbenchWindow is gesloten.