Plugin-migrering i Eclipse 3.1 - Spørsmål og svar

  1. IPreferenceStore har mer eksplisitt API
  2. IWorkbenchWindow#getShell() har mer eksplisitt API

IPreferenceStore har mer eksplisitt API

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.

IWorkbenchWindow#getShell() har mer eksplisitt API

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.