Často kladené dotazy o migraci modulů plug-in do Eclipse 3.1

  1. IPreferenceStore má více explicitní rozhraní API
  2. IWorkbenchWindow#getShell() má více explicitní rozhraní API

IPreferenceStore má více explicitní rozhraní API

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.

IWorkbenchWindow#getShell() má více explicitní rozhraní API

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.