Az Eclipse inkompatibilis módon változott a 3.0 és 3.1 verzió között, és ez hatással van a bedolgozókra. Az alábbi bejegyzések leírják a módosított területeket, és útmutatást biztosítanak a 3.0 verziószámú bedolgozók átállításához a 3.1 verzióra. Ezeket csak akkor kell megtekintenie, ha problémája van a 3.0 verziószámú bedolgozó futtatásával a 3.1 verzión.
Befolyásolt elemek: A bedolgozók, amelyek a
Plugin#initializeDefaultPreferences
felülírásával
inicializálják bedolgozó-beállításaikat vagy beállításváltozás-figyelőket
használnak.
Leírás: Eclipse 3.1 rendszeren az
org.eclipse.jface.preference.IPreferenceStore
objektum az
org.eclipse.ui.plugin.AbstractUIPlugin#getPreferenceStore
elemből kerül lekérésre, amely az org.eclipse.core.runtime
bedolgozó által biztosított új 3.0 Eclipse beállítási keretrendszeren
működéshez került átállításra.
Szükséges teendő: Ennek eredményeképp a beállítás alkalmazás programozási felületeket használó ügyfeleknek két lehetséges problémát kell leellenőrizniük:
karaktersorozat
vagy egy típusos objektum. Emiatt a
beállításváltozási figyelőknek kezelniük kell tudni mindhárom lehetséges
helyzetet.org.eclipse.ui.plugin.AbstractUIPlugin#initializeDefaultPreferences
elemet használja, akkor az org.eclipse.core.runtime.compatibility
bedolgozót tartalmaznia kell a szükséges bedolgozók listájának, mert ez a
függőség eltávolításra került az org.eclipse.ui.workbench
bedolgozóból.További részletek a beállítástároló dokumentációjában találhatók.
Befolyásolt elemek: Bedolgozók, amelyek IPath objektumokat hoznak létre, kezelnek vagy tárolnak.
Leírás: Az Eclipse 3.0 változatában az IPath számos olyan megszorítással rendelkezett az útvonalak szegmenseivel kapcsolatban, amelyek nagyobb korlátozást jelentettek, mint az alapul szolgáló operációs rendszer. Ezek az alábbiak:
Ezen megszorítások eltávolításra kerültek az Eclipse 3.1 változatában, amikor a platform adathelye (munkaterület) olyan fájlrendszeren található, amely nem rendelkezik ezen korlátozásokkal.
Szükséges teendő: Az útvonalak kibővített tartományának megfelelő kezelésének lehetővé tétele érdekében a Path és IPath elemek bedolgozókban használatát át kell tekinteni az alább leírtak szerint. A legtöbb nem módosított bedolgozó pontosan úgy fog viselkedni, ahogy a 3.0 változatban a megfelelő útvonalak esetén. Ha azonban az előírt módosítások nem kerülnek végrehajtásra, akkor valószínűleg meg fognak hiúsulni azon útvonalak esetén, amelyek a 3.1 változatban megfelelőek, de a 3.0 változatban illegálisak.
Azon bedolgozók, amelyek az elérési utakat karaktersorozatként tárolják olyan formátumban, amelynek különböző platformokon kell olvashatónak lennie, át kell térniük az új Path.fromPortableString gyári metódusra. Ez a metódus egy IPath példányt állít elő egy platformfüggetlen formátumból. Az útvonal ilyen karaktersorozatos ábrázolása az IPath.toPortableString metódus használatával hozható létre. Az érintett metaadatfájlok példái olyan fájlokat tartalmaznak, amelyek az Eclipse munkaterület-projektjeiben (.project, .classpath, stb.) és a beállítástárolóban (org.eclipse.core.runtime.preferences.IPreferencesService) lévő összes elérési útban kerülnek tárolásra.
Megjegyzés: A fromPortableString helyesen fog beolvasni minden olyan útvonal-karaktersorozatot, amely az Eclipse 3.0 IPath.toString metódusával, nem pedig az Eclipse 3.1 toString metúdusával került létrehozásra. Így a legtöbb esetben nincs szükség a meglévő metaadatfájlok fortmátumának módosítására, azonban az útvonalakat ezentúl a toPortableString metódussal kell írni és a fromPortableString metódussal kell olvasni.
Azon bedolgozókat át kell állítani, amelyek olyan beégetett karaktersorozat-literálokból hoztak létre útvonalakat, amelyek a ':' és '\' karaktereknek speciális jelentést tulajdonítottak minden platformon. A legegyszerűbb megoldás a karaktersorozatos útvonalliterálok azon részhalmazra korlátozása, amely minden platformon támogatott (kerülje el a kettőspont és fordított törtvonal karakterek használatát). Az útvonalliterálok támogatják az érvényes Unix útvonalak teljes halmazát a Path.toPortableString által előállított hordozható karaktersorozatos útvonalformátum használatával. Ez a formátum az első egyedülálló kettőspontot (':') eszközelválasztóként, az osztásjelet ('/') szegmenselválasztóként és a dupla kettőspontot ("::") literál kettőspont karakterként értelmezi. Például a new Path("c:/temp") kód Unix platformokon egy relatív útvonalat fog létrehozni két szegmenssel. Ehhez hasonlóan a new Path("a\\b") kód egy útvonalat fog létrehozni egyetlen szegmenssel Unix platformokon és egy útvonalat két szegmenssel Windows platformokon.
Azon bedolgozók kódját frissíteni kell, amelyek az IPath.append(String) metódust használják az útvonalak összeállításához, amely a ':' és '\' karaktereknek speciális jelentést tulajdonít minden platformon. Az Eclipse 3.1 változatában ez a metódus az operációs rendszerre jellemző eszköz- és szegmenshatárolókat használja a megadott útvonal-karaktersorozat értelmezéséhez. Például az append("a\\b") Unix platformon meghívásával egyetlen szegmens, míg Windows esetén két szegmens fog hozzáfűzésre kerülni.
A platform által olvasott és értelmezett adatfájlok a továbbiakban a ':' és '\' karaktert egyik platformon sem kezelik speciális karakterként. A több platformon olvasható adatfájlokban tárolt elérési utakat hordozható formában kell megadni. Az ikonfájlok elérési útjaiban és a plugin.xml egyéb elérési útjaiban például csak '/' használható elérési út szegmenselválasztóként.
Befolyásolt elemek: Azon bedolgozók, amelyek az Eclipse platform
bedolgozójából vagy kiterjesztés-nyilvántartásából származó
IExtensionPoint
, IExtension
és
IConfigurationElement
objektumokat kezelik vagy őrzik.
Leírás: A 3.0 változat előtt a kiterjesztés-nyilvántartásból (ami a
korábbi bedolgozó-nyilvántartáshoz tartozott) megszerzett objektumok örökre jók
voltak. Olyan módosítások történtek az Eclipse 3.0 változatában, amelyek
lehetővé teszik a bedolgozók dinamikus hozzáadását vagy eltávolítását az
Eclipse újraindítása nélkül. Amikor egy bedolgozó újraindítás nélkül kerül
eltávolításra, akkor a kiterjesztés-nyilvántartásban lévő bejegyzései
szükségszerűen érvénytelenné válnak. Ez azt jelenti, hogy azon másik bedolgozó
érvénytelen objektumot tartalmaz, amely a törölt bedolgozó
kiterjesztés-nyilvántartási bejegyzéséből korábban megszerzett objektumot
tárolja. Az IRegistryChangeEvent
figyelése lehet az egyetlen tipp,
amit az ügyfél kaphat.
A probléma az Eclipse 3.0 változata óta létezett, de gyakorlatban ritkán
fordult elő, mert nagyon szokatlan egy bedolgozó eltávolítása az Eclipse
újraindítása nélkül.
Ez a probléma a 3.1 változatban került megoldásra az alábbiak szerint:
IExtensionPoint
, IExtension
és
IConfigurationElement
felületekben létező metódusok azt határozzák
meg, hogy az InvalidRegistryObjectException
kivétel akkor kerül
dobásra, ha az objektum érvénytelen. A kivétel ellenőrizetlen, így a
dinamikusan nem tudatos ügyfelek nem kényszerülnek a leellenőrzésére.isValid()
metódus került hozzáadásra ezen felületekhez,
így az ügyfél el tudja dönteni, hogy egy objektum érvényes-e még.Szükséges teendő: Ha a bedolgozónak dinamikusan tudatosnak kell
lennie (pl.: a bedolgozó menet közbeni hozzáadásának vagy eltávolításának
kezelése), akkor a valamely másik bedolgozóból származó
IExtensionPoint
, IExtension
és
IConfigurationElement
objektumot kezelő kódot módosítani kell az
IRegistryChangeEvent
esemény elfogásához pontosan úgy, mintha az
egy ellenőrzött kivétel lenne. Az isValid()
előellenőrzés helyett
a kivétel elfogása az egyetlen biztos módszer egy párhuzamos szál által
eltávolított bedolgozó esetének kezelésére.
Befolyásolt elemek: Azon bedolgozók, amelyek programból érik el a Java kódformázó beállításokat.
Leírás: Az Eclipse 3.0 változatában az
org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants#FORMATTER_TAB_CHAR
kódformázó beállítás értékei csak TAB
vagy SPACE
értékek lehettek. A specifikáció nem tett konkrét említést arról, hogy az
értéktípus egy felsorolás, amely a későbbi kiadásokban kibővülhet. Az Eclipse
3.1 változatában egy harmadik lehetséges érték (MIXED
) került
hozzáadásra a
73104 számú
hiba kijavítása érdekében. A specifikáció úgy változott, hogy ezen új értéket
tartalmazza és lehetővé teszi további értékek hozzáadását a későbbiekben.
Szükséges teendő: Az új harmadik érték figyelembe vétele és annak biztosítása érdekében, hogy a kód olyan módon legyen megírva, hogy elegánsan hiúsuljon meg, ha valaha is váratlan beállítási értékkel találkozik, azon ügyfeleknek le kell ellenőrizniük a kódot, akik programból olvassák vagy állítják be ezt a kódformázó beállítást.
Befolyásolt elemek: Azon bedolgozók, amelyek az
org.eclipse.ant.core.AntCorePreferences
osztályt
továbbszármaztatják vagy példányosítják.
Leírás: Az Eclipse 3.0 változatában az
org.eclipse.ant.core.AntCorePreferences
osztály nem volt
megjelölve arra, hogy az ügyfelek nem példányosíthatják vagy nem
származtathatják tovább.
Ez egy tévedés volt, amely az Eclipse 3.1 változatában
került kijavításra azzal, hogy az osztály meg lett jelölve úgy, hogy nem
származtatható tovább és nem példányosítható.
Szükséges teendő: Az
org.eclipse.ant.core.AntCorePreferences
osztály példányát
programból létrehozó ügyfeleknek át kell állítaniuk a kódot a beállítások
org.eclipse.ant.core.AntCorePlugin.getPreferences()
használatával
lekéréséhez.Az összes alosztályt át kell dolgozni úgy, hogy ne legyenek az
org.eclipse.ant.core.AntCorePreferences
alosztályai.
Befolyásolt elemek: Azon RCP alkalmazások, amelyek felülbírálják a munkaterület által beállított JFace naplót.
Leírás: Az Eclipse 3.0 változatában a munkaterület állította be a
munkaterület naplóját a JFace hibák naplózására a munkaterület-bedolgozó
naplójának org.eclipse.jface.util.Policy.setLog(ILog)
elemhez
közvetlen átadásával. A 3.1 változatban az ILog
felülettel
kapcsolatos függőség eltávolításra került a JFace eszközből annak lehetővé
tétele érdekében, hogy az önálló alkalmazások az SWT és JFace eszközöket az
Eclipse futási környezetén kívül használhassák. Egy új felület
(ILogger
) került bevezetésre a JFace szükségleteinek
kielégítésére. A munkaterület módosult egy ILogger
felület
biztosításával, amely a munkaterület ILog
felületét helyettesíti.
További részletek a
88608 számú
hiba leírásában találhatók.
Szükséges teendő: A legtöbb RCP alkalmazásnak nem kell felülbírálnia
a munkaterület által beállított naplót, ha azonban korábban a
Policy.setLog(ILog)
hívást használták, akkor ehelyett az
ILogger
felületet kell átadniuk.
Befolyásolt elemek: Azon RCP alkalmazások, amelyek nem nullértékű alapértelmezett perspektívát várnak.
Leírás: Annak lehetővé tétele érdekében, hogy az RCP alkalmazások egy
olyan üres ablakkal induljanak, amelyben nincs nyitott perspektíva
(71150
bővítése), a WorkbenchAdvisor.getInitialWindowPerspectiveId()
és
IPerspectiveRegistry.getDefaultPerspective()
metódusok módosításra
kerültek úgy, hogy nullérték visszaadását is engedélyezzék. Az integrált
fejlesztői környezetben minden esetben van egy alapértelmezett perspektíva, így
az IPerspectiveRegistry.getDefaultPerspective()
metódus nem fog
nullértéket visszaadni. Ehhez hasonlóan, ha egy meglévő RCP alkalmazás korábban
nem nullértékkel tért vissza a
WorkbenchAdvisor.getInitialWindowPerspectiveId()
metódusból, akkor
az IPerspectiveRegistry.getDefaultPerspective()
metódus szintén
nem nullértéket fog visszaadni.
Szükséges teendő: Az ügyfeleknek nem kell semmit tenniük.
Befolyásolt elemek: Az org.eclipse.ui.IViewLayout
elemet
megvalósító bedolgozók.
Leírás: Az Eclipse 3.0 változatában az
org.eclipse.ui.IViewLayout
osztály nem volt megjelölve arra, hogy
az ügyfelek nem valósíthatják meg. Ez egy tévedés volt, amely az Eclipse 3.1
változatában került kijavításra azzal, hogy az osztály meg lett jelölve úgy,
hogy az ügyfelek nem valósíthatják meg.
Szükséges teendő: Az összes megvalósító osztályt át kell dolgozni
úgy, hogy ne valósítsák meg az org.eclipse.ui.IViewLayout
felületet.
Befolyásolt elemek: Az
org.eclipse.jdt.launching.IVMInstall
elemet megvalósító
bedolgozók.
Leírás: Az Eclipse 3.0 változatában az
org.eclipse.jdt.launching
osztály nem volt megjelölve arra, hogy
az ügyfelek nem valósíthatják meg közvetlenül. Ez egy tévedés volt, amely az
Eclipse 3.1 változatában került kijavításra azzal, hogy az osztály meg lett
jelölve úgy, hogy az ügyfelek nem valósíthatják meg közvetlenül. Bináris
kompatibilitás fenntartásához az ügyfelek a felületet közvetlenül is
megvalósíthatják, de ajánlatos inkább az
org.eclipse.jdt.launching.AbstractVMInstall
alosztályát
létrehozni. Az IVMInstall
elemet megvalósító ügyfeleknek az új nem
kötelező org.eclipse.jdt.launching.IVMInstall2
felületet is
meg kell valósítaniuk, amelyet jelenleg az AbstractVMInstall
valósít meg. A klienseknek ajánlatos megvalósítaniuk az új
IVMInstall2
felületet, a 73493-as hibában megemlített
probléma elkerülése érdekében. Az ajánlott átállítás az
AbstractVMInstall
alosztályának létrehozása.
Szükséges teendő: Az összes olyan megvalósító osztályt át kell
dolgozni, amely még nem származtatja tovább az
org.eclipse.jdt.launching.AbstractVMInstall
osztályt, hogy az
org.eclipse.jdt.launching.AbstractVMInstall
osztályt
származtassa tovább.
Befolyásolt elemek: Az
org.eclipse.ui.SelectionEnabler.SelectionClass
elemet használó
bedolgozók.
Leírás: Az Eclipse 3.0 változatában az
org.eclipse.ui.SelectionEnabler.SelectionClass
beágyazott
megvalósítási osztály nyilvános volt és nem volt a használatára vonatkozó
megszorítás. Ez egy tévedés volt, amely az Eclipse 3.1 változatában került
kijavításra azzal, hogy az osztály csak a csomagban látható.
Szükséges teendő: Az összes olyan osztályt át kell dolgozni,
amely példányosítja vagy kiterjeszti az
org.eclipse.ui.SelectionEnabler.SelectionClass
osztályt, hogy
ne hivatkozzon erre az osztályra.
Befolyásolt elemek: Azon bedolgozók, amelyek a
getParent()
metódust hívják meg az
org.eclipse.jface.action.ContributionItem
valamely alosztályában.
Leírás: Az Eclipse 3.0 változatában az
org.eclipse.jface.action.ContributionItem.getParent()
metódus úgy
volt meghatározva, hogy nem adhat vissza nullértéket. Ez egy tévedés volt,
amely az Eclipse 3.1 változatában került kijavításra a metódus számára egy
Javadoc megadásával, amely tisztázza, hogy az mikor adhat vissza nullértéket.
További részletek a
92777 számú
hiba leírásában találhatók.
Szükséges teendő: Az összes olyan kódnak tudnia kell kezelnie a nullértékű eredményt, amely meghívja a ContributionItem.getParent() metódust.
Befolyásolt elemek: Az
org.eclipse.ui.views.properties.IPropertySource
vagy
IPropertySource2.
elemet megvalósító bedolgozók.
Leírás: Az Eclipse 3.0 változatában az
org.eclipse.ui.views.properties.IPropertySource.isPropertySet(boolean)
metódus meghatározása helytelenül került módosításra annak megadásához, hogy
true értéket kell visszaadnia, ha a megadott tulajdonság nem rendelkezik
jelentéssel bíró alapértelmezett értékkel. A korábbi változatokban false érték
visszaadására volt meghatározva az ilyen esetben. Ez egy gondatlan API
módosítás volt, bár a megvalósítás ugyanúgy működött, mint azelőtt, ha a
tulajdonságforrás megvalósította az IPropertySource
felületet és
az IPropertySource2
felületet nem. Ez kijavításra került a 3.1
változatban azzal, hogy az IPropertySource.isPropertySet(boolean)
metódus visszaállításra került a korábbi specifikációra (ahol false értéket
kell visszaadnia az említett esetben és az
IPropertySource2.isPropertySet(boolean) felülbírálta ezt azzal, hogy true érték
visszaadását határozta meg erre az esetre). További részletek a
21756 számú
hiba leírásában találhatók.
Szükséges teendő: Annak biztosítása érdekében, hogy a megfelelő érték kerüljön visszaadásra az isPropertySource(boolean) hívásakor, az összes olyan osztályt le kell ellenőrizni, amely megvalósítja az IPropertySource vagy IPropertySource2 felületet, ahol némely tulajdonság nem rendelkezik jelentéssel bíró alapértelmezett értékkel. Az ügyfeleknek le kell ellenőrizniük, hogy a Tulajdonságok nézetben az Alapértelmezett érték visszaállítása gomb a várt módon működik-e a tulajdonságforrásokhoz.
Érintett elem: Az org.eclipse.ui.commands
Eclipse
3.0 kiterjesztési pontban bevezetett kísérleti
handlerSubmission
elemet használó bedolgozók.
Leírás: Az Eclipse 3.0 változat
org.eclipse.ui.commands
kiterjesztési pontjában egy kísérleti
elem került bevezetésre. Az elem célja, hogy a kezelőket be lehessen
jegyezni XML-en keresztül. Azóta egy sokkal jobb mechanizmus, az
org.eclipse.ui.handlers
kiterjesztési pont került
bevezetésre. Mivel az elem kísérleti elem volt, eltávolításra került.
Szükséges teendő: A handlerSubmission
elemet megadó
bedolgozóknak át kell térniük az org.eclipse.ui.commands
kiterjesztési pontra.
Befolyásolt elemek: A TeamUI GLOBAL_IGNORES_CHANGED mezejét beállító bedolgozók.
Leírás: Az Eclipse 3.0 verzióban a GLOBAL_IGNORES_CHANGED mező hozzáadásra került a TeamUI osztályhoz. Ez a mező egy konstans, amelyet a tulajdonságmódosítási esemény használ annak jelzéséhez, hogy a Csapat bedolgozó által fenntartott globális figyelmen kívül hagyások lista megváltozott. Ez a mező a 3.0 vezrióban nem volt véglegesként jelölve, de annak kellett volna lennie. A 3.1 verzióban lett véglegesítve.
Szükséges teendő: A fenti mezőt beállító bedolgozók a továbbiakban nem tudják ezt megtenni.
Befolyásolt elemek: A bedolgozók, amelyek a FillLayout elemet helytelenül használják.
Leírás: Az Eclipse 3.0 verzióban a FillLayout elemhez nem kerültek hozzárendelésre elrendezési adatok, és ha egy alkalmazás a FillLayout által kezel leszármazotthoz elrendezési adatot rendelt, akkor ez figyelmen kívül maradt. Az átméretezési teljesítmény javítása érdekében az Eclipse 3.1 verzió már támogatja, hogy a FillLayout ideiglenesen eltárolja a méretinformációkat. Az ideiglenes tárolt adatok a FillLayout átal kezelt leszármazottokhoz rendelt FillData objektum tárolja. Ha egy alkalmazás helytelenül rendelt elrendezésadatokat egy leszármazotthoz, akkor a computeSize szülőn meghívásakor ClassCastException kivétel történik.
Szükséges teendő: Keresse meg a FillLayoutban azokat a leszármazottakat, amelyekhez elrendezési adatok vannak rendelve és szüntesse meg az adatok hozzárendelését.
Befolyásolt elemek: Bedolgozók, amelyek a felületi elemek létrehozása során kivételt észlelnek.
Leírás: Ha az Eclipse 3.0 verzióban egy felületi elem megszüntetett szülővel került létrehozásra, akkor nem történik kivétel és a felületi elem egy későbbi ponton meghiúsul, vagy a "Widget Is Disposed" szövegű SWTException kivétel történik. Ha az Eclipse 3.1 változatban egy felületi elem megszüntetett szülővel kerül létrehozásra, akkor a konstruktor "Argument not valid" szövegű IllegalArgumentException kivételt dob.
Szükséges teendő:A kódnak, amely a felületi elem létrehozásakor az SWTExceptiont kezeli, az IllegalArgumentExceptiont is kezelnie kell.