Selv om virkemåten
for IPreferenceStore, som kommer fra AbstractUIPlugin#getPreferenceStore()
, ikke er endret,
har vi oppdatert spesifikasjonen for IPreferenceStore
slik at det eksplisitt definerer den virkemåten vi har fremskaffet.
Type for PropertyChangeEvents
En hvilken som helst egenskapsendringshendelse fra et IPreferenceStore, må ha en gammel og ny verdi av samme type som er konsistent med setValue-kallet som genererte den.
Hvis du for eksempel sender kall til
IPreferenceStore#setValue(String name, long value)
, vil begge verdiene i
PropertyChangeEvent som er generert fra denne metoden, være av typen java.lang.Long
.
putValue
Kall til #putValue
genererer ikke en
PropertyChangedEvent
. Kall til de ulike
#setValue
-metodene gjør det.
Forholdet mellom OSGI-preferansen og en IPreferenceStore
IPreferenceStore, som er fremskaffet av AbstractUIPlugin#getPreferenceStore()
,
er en forekomst av ScopedPreferenceStore
, som bruker org.osgi.service.prefs.Preferences
som bakgrunn. org.osgi.service.prefs.Preferences
distribuerer
endringshendelser bare som strenger.
ScopedPreferenceStore
bruker
disse OSGI-hendelsene som er generert av IPreferenceStore#setValue(String name, String value)
og
en av sine egne PropertyChangeEvents
, og videresender denne hendelsen til
lytterne. For de andre implementeringene av
IPreferenceStore#setValue
, vil ScopedPreferenceStore
opprette sine egne
hendelser av den riktige typen, og ikke distribuere hendelsene fra
OSGI-preferansene.
Lyttere til et ScopedPreferenceStore
bør være forberedt på både type- og strengverdier i endringshendelsene siden det fremdeles er mulig å
få en hendelse via OSGI-preferansene (for eksempel under en preferanseimport). OSGI-hendelser er
alltid av typen java.lang.String
.
Det har alltid vært mulig å få et null-org.eclipse.swt.widgets.Shell fra den eksisterende IWorkbenchWindows i Eclipse SDK. Nå definerer vi eksplisitt betingelsene der dette forekommer, nemlig når skallet ikke er opprettet eller når IWorkbenchWindow er lukket.