Eclipse on muuttunut versioiden 3.0 ja 3.1 välillä yhteensopimattomilla tavoilla, jotka vaikuttavat lisäosiin. Seuraavat määritykset kuvaavat muuttuneita alueita. Lisäksi niissä on ohjeita 3.0-lisäosien siirtämisestä versioon 3.1. Huomaa, että näitä tietoja tarvitsee tutkia vain, jos 3.0-lisäosan ajossa 3.1-versiossa ilmenee ongelmia.
Mitä muutos koskee: Lisäosia, jotka alustavat lisäosan oletusasetusten oletusarvot ohittamalla Plugin#initializeDefaultPreferences
-metodin tai käyttävät oletusasetusten muutosten kuuntelutoimintoja.
Kuvaus: Eclipse 3.1 -versiossa org.eclipse.jface.preference.IPreferenceStore
-objekti, joka on saatu org.eclipse.ui.plugin.AbstractUIPlugin#getPreferenceStore
-metodista, on siirretty org.eclipse.core.runtime
-lisäosan toimittaman uuden 3.0 Eclipse -oletusasetuskehyksen päälle.
Edellytetty toimi: tämän seurauksena oletusasetussovellusohjelmaliittymiä käyttävien asiakkaiden tulisi tarkastaa kaksi mahdollista ongelmaa:
String
-olio tai tyypitetty olio. Näin ollen oletusasetusten muutosten kuuntelutoimintojen tulisi pystyä käsittelemään kaikkia näitä kolmea mahdollista tilannetta.org.eclipse.ui.plugin.AbstractUIPlugin#initializeDefaultPreferences
-lisäosaa,
org.eclipse.core.runtime.compatibility
-lisäosa on
sisällytettävä lisäosan pakollisten lisäosien luetteloon, sillä tämä
riippuvuus on poistettu org.eclipse.ui.workbench
-lisäosasta.Lisätietoja on myös tämän oppaan suositeltuja muutoksia koskevassa osiossa luvussa JFace-oletusarvovarastot.
Mitä muutos koskee: Lisäosia, jotka luovat, käsittelevät tai tallentavat IPath-objekteja.
Kuvaus: Eclipse 3.0 -versiossa IPath-rajapinnalla oli monia polun osia koskevia rajoituksia, jotka olivat rajoittavampia kuin pohjalla olevan käyttöjärjestelmän rajoitukset. Tällaisia rajoituksia olivat esimerkiksi seuraavat:
Nämä rajoitukset on poistettu Eclipse 3.1 -versiossa, kun ympäristön tietosijainti (työtila) sijaitsee tiedostojärjestelmässä, jossa ei ole näitä rajoituksia.
Edellytetty toimi: Jotta laajennettua polkujen alaa voitaisiin käsitellä oikein, kaikki Path-luokan ja IPath-rajapinnan käyttö lisäosien sisällä tulisi käydä läpi ja päivittää alla kuvatulla tavalla. Useimmat muuttamattomat lisäosat toimivat edelleen täysin samoin kuin versiossa 3.0 kaikissa poluissa, jotka ovat luvallisia versiossa 3.0. Ellei näitä muutoksia kuitenkaan tehdä, ne todennäköisesti aiheuttavat virheen tapauksissa, joissa on versiossa 3.1 luvallisina pidettyjä polkuja, jotka eivät olleet sallittuja versiossa 3.0.
Lisäosat, jotka tallentavat merkkijonomuotoisia polkujen esityksiä muodossa, jonka tulee olla luettavissa eri ympäristöissä, tulee siirtää uuteen Path.fromPortableString-factory-metodiin. Tämä metodi tuottaa IPath-ilmentymän ympäristöstä riippumattomassa muodossa. Tämän polkujen merkkijonomuotoisen esityksen voi luoda IPath.toPortableString-metodilla. Esimerkkejä metatietotiedostoista, joita muutos koskee, ovat tiedostot, jotka on tallennettu Eclipse-työtilaprojektien sisään (.project, .classpath jne.), ja kaikki polut, jotka on tallennettu oletusarvojen varastoon (org.eclipse.core.runtime.preferences.IPreferencesService).
Huomautus: fromPortableString lukee oikein kaikki polkumerkkijonot, jotka on luotu Eclipse 3.0 -version IPath.toString-metodilla, mutta ei Eclipse 3.1 -version toString-metodilla. Näin useimmissa tapauksissa metatietotiedostojen muotoa ei tarvitse muuttaa lukuun ottamatta polkujen kirjoituksen toPortableString-metodilla ja polkujen luvun fromPortableString-metodilla aloitusta varten.
Lisäosat, jotka loivat polkuja pysyväiskoodatuista merkkijonoliteraaleista, jotka olettivat merkeillä ":" ja "\" olevan erityismerkitys kaikissa ympäristöissä, on siirrettävä uuteen versioon. Helpoin ratkaisu on rajoittaa merkkijonopolkuliteraalit alijoukkoon, joka on tuettu kaikissa ympäristöissä (vältä kaksoispisteitä ja kenoviivoja). Polkuliteraalit voivat tukea kaikkia kelvollisia Unix-polkuja käyttämällä siirrettävää polkujen merkkijonomuotoa, jonka tuottaa Path.toPortableString. Tämä muoto tulkitsee ensimmäisen yksittäisen kaksoispisteen (":") laitteen erottimeksi, vinoviivan (/) osan erottimeksi ja kaksi kaksoispistettä (:) literaaliksi kaksoispistemerkiksi. Esimerkiksi koodi new Path("c:/temp") luo nyt Unix-ympäristössä suhteellisen polun, jossa on kaksi osaa. Vastaavasti new Path("a\\b") luo nyt Unix-ympäristössä polun, jossa on yksi osa, ja Windows-ympäristössä polun, jossa on kaksi osaa.
Sellaisten lisäosien koodi on mahdollisesti päivitettävä, jotka muodostavat polkuja IPath.append(String)-metodilla, joka oletti merkeillä ":" ja "\" olevan erityismerkitys kaikissa ympäristöissä. Eclipse 3.1 -versiossa tämä metodi käyttää käyttöjärjestelmäkohtaisia laitteen ja osien erottimia toimitetun polkumerkkijonon tulkinnassa. Esimerkiksi metodin append("a\\b") kutsu Unix-ympäristössä liittää nyt yhden osan, kun taas Windowsissa se jatkaa liittämään kaksi osaa.
Ympäristön lukemat ja tulkitsemat tietotiedostot eivät enää käsittele merkkejä ':' ja '\' erikoismerkkeinä kaikissa ympäristöissä. Kaikkien datatiedostoihin tallennettujen polkujen, joita voidaan lukea useissa ympäristöissä, on oltava siirrettävässä muodossa. Esimerkiksi plugin.xml-tiedoston kuvaketiedostojen polkujen ja muiden polkujen tulee käyttää ainoastaan merkkiä "/" polun osien erottimena.
Mitä muutos koskee: Lisäosia, jotka käsittelevät tai pidättävät IExtensionPoint
-, IExtension
- ja IConfigurationElement
-objekteja Eclipse-ympäristön lisäosa- tai laajennusrekisteristä.
Kuvaus: Versiota 3.0 edeltäneissä versioissa kaikki laajennusrekisteristä (tai entisestä lisäosarekisteristä) poimitut objektit olivat ikuisesti käyttökelpoisia. Eclipse 3.0 -versiossa tehtiin muutoksia, joiden avulla lisäosia pystyi dynaamisesti lisäämään ja poistamaan joutumatta aloittamaan Eclipse-ympäristöä uudelleen. Kun lisäosa poistetaan ilman uudelleen aloitusta, sen merkinnät laajennusrekisterissä muuttuvat väistämättä virheellisiksi. Tämä tarkoittaa sitä, että toinen lisäosa, joka pidättää poistetun lisäosan laajennusrekisterin merkinnästä aiemmin poimitun objektin, jäisi pitelemään kelvotonta objektia. Ainoan vihjeen, jonka asiakas voisi saada, tulisi IRegistryChangeEvent
-rajapinnan kuuntelusta.
Ongelma on ollut olemassa Eclipse 3.0 -versiosta alkaen, mutta se kohdataan harvoin käytännössä, sillä on erittäin epätavallista, että lisäosa poistetaan aloittamatta Eclipse-ympäristöä uudelleen.
Ongelmaa on käsitelty versiossa 3.1 seuraavasti:
IExtensionPoint
-, IExtension
- ja IConfigurationElement
-rajapintojen olemassa olevat metodit määrittävät nyt, että InvalidRegistryObjectException
-poikkeus tuotetaan, kun objekti on kelvoton. Poikkeuksen valinta poistetaan niin, että dynaamisia tietämättömiä asiakkaita ei pakoteta tarkistamaan sitä.isValid()
-metodi on lisätty näihin rajapintoihin niin, että asiakas voi selvittää, onko objekti edelleen kelvollinen.Edellytetty toimi: jos lisäosan pitää olla tietoinen dynamiikasta (eli pystyä käsittelemään lisäosien lisäystä tai poistoa lennossa), toisesta lisäosasta saatua IExtensionPoint
-, IExtension
- ja IConfigurationElement
-objektia käsittelevä koodi on muutettava sieppaamaan IRegistryChangeEvent
aivan kuin se olisi tarkistettu poikkeus. Poikkeuksen sieppaus (isValid()
-esitarkistuksen sijaan) on ainoa varma tapa käsitellä tapausta, jossa samanaikainen säie poistaa lisäosan (ja jos näin käy, se melko varmasti on).
Mitä muutos koskee: Lisäosia, jotka käsittelevät ohjelmallisesti Java-koodin muotoilutoiminnon asetuksia.
Kuvaus: Eclipse 3.0 -versiossa koodin muotoilutoiminnon asetuksen org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants#FORMATTER_TAB_CHAR
arvona saattoi olla ainoastaan TAB
taitai SPACE
. Määrityksessä ei mainittu erikseen, että arvon laji oli luettelo, joka saattaa kasvaa tulevissa laitoksissa. Eclipse 3.1 -versiossa kolmas mahdollinen arvo MIXED
lisättiin korjauksena virheeseen 73104. Määritystä on muutettu sisältämään tämä uusi arvo ja mahdollistamaan uusien arvojen lisäys tulevaisuudessa.
Edellytetty toimi: Asiakkaiden, jotka lukevat tai asettavat tämän koodin muotoilutoiminnon asetuksen ohjelmallisesti, tulisi tarkistaa koodinsa ottamaan uusi kolmas arvo huomioon ja varmistamaan, että se on kirjoitettu vakaalla tavalla, joka siirtyy virhetilaan siististi kohdatessaan odottamattoman asetuksen arvon.
Mitä muutos koskee: Lisäosia, jotka ovat org.eclipse.ant.core.AntCorePreferences
-luokan aliluokkia tai luovat sen ilmentymiä
Kuvaus: Eclipse 3.0 -versiossa org.eclipse.ant.core.AntCorePreferences
-luokassa ei ollut merkintää, että asiakkaat eivät voi eritellä sitä tai olla sen aliluokkia.
Tämä laiminlyönti on korjattu Eclipse 3.1 -versiossa merkitsemällä luokkaan, että sillä ei ole tarkoitus olla aliluokkia eikä sitä ole tarkoitus eritellä.
Edellytetty toimi: Asiakkaiden, jotka luovat ohjelmallisesti org.eclipse.ant.core.AntCorePreferences
-luokan ilmentymän, tulisi siirtää koodinsa noutamaan oletusarvot org.eclipse.ant.core.AntCorePlugin.getPreferences()
-metodilla.
Mahdolliset aliluokat tulee käsitellä uudelleen niin, että ne eivät ole enää org.eclipse.ant.core.AntCorePreferences
-luokan aliluokkia.
Mitä muutos koskee: RCP-sovelluksia, jotka ohittavat työympäristön asettaman JFace-lokin.
Kuvaus: Eclipse 3.0 -versiossa työympäristö asetti työympäristön lokin JFace-virheiden kirjaamiseen käytettäväksi lokiksi välittämällä työympäristön lisäosan lokin suoraan org.eclipse.jface.util.Policy.setLog(ILog)
-metodiin. Versiossa 3.1 ILog
-riippuvuus on poistettu JFace-kehyksestä mahdollistamaan Eclipse-ajoympäristön ulkopuolella ajettavat itsenäiset SWT:tä ja JFacea käyttävät sovellukset. Uusi rajapinta ILogger
on lisätty JFacen tarpeisiin. Työympäristö on muutettu toimittamaan ILogger
-rajapinta, joka kierrättää työympäristön ILog
-rajapinnan. Lisätietoja on virheessä 88608.
Edellytetty toimi: Useimpien RCP-sovellusten ei pitäisi tarvita ohittaa työympäristön asettamaa lokia, mutta jos ne ovat aiemmin kutsuneet Policy.setLog(ILog)
-metodia, ne tulee muuttaa välittämään sen sijaan ILogger
-rajapinta.
Mitä muutos koskee: RCP-sovelluksia, jotka odottavat oletusperspektiiviä, jonka arvo ei ole null.
Kuvaus: Jotta RCP-sovellukset voisivat aloittaa tyhjästä ikkunasta, jossa ei ole avoimia perspektiivejä (laajennus 71150), WorkbenchAdvisor.getInitialWindowPerspectiveId()
ja IPerspectiveRegistry.getDefaultPerspective()
on muutettu sallimaan null-arvon palautus. Kehitysympäristössä on aina oletusperspektiivi, joten IPerspectiveRegistry.getDefaultPerspective()
ei palauta null-arvoa. Vastaavasti jos olemassa oleva RCP-sovellus on aiemmin palauttanut muun kuin null-arvon WorkbenchAdvisor.getInitialWindowPerspectiveId()
-metodista, IPerspectiveRegistry.getDefaultPerspective()
palauttaa edelleen arvon, joka ei ole null.
Edellytetty toimi: asiakkailta ei pitäisi edellyttää mitään toimia.
Mitä muutos koskee: Lisäosia, jotka toteuttavat org.eclipse.ui.IViewLayout
-rajapinnan
Kuvaus: Eclipse 3.0 -versiossa luokassa org.eclipse.ui.IViewLayout
ei ollut merkintää, että asiakkaiden ei tule toteuttaa sitä. Tämä laiminlyönti on korjattu Eclipse 3.1 -versiossa merkitsemällä luokkaan, että asiakkaiden ei ole tarkoitus toteuttaa sitä.
Edellytetty toimi: toteuttavat luokat tulee käsitellä uudelleen niin, etteivät ne enää toteuta org.eclipse.ui.IViewLayout
-rajapintaa.
Mitä muutos koskee: Lisäosia, jotka toteuttavat org.eclipse.jdt.launching.IVMInstall
-rajapinnan.
Kuvaus: Eclipse 3.0 -versiossa luokassa org.eclipse.jdt.launching.IVMInstall
ei ollut merkintää, että asiakkaat eivät saa toteuttaa suoraan. Tämä laiminlyönti on korjattu Eclipse 3.1 -versiossa merkitsemällä luokkaan, että asiakkaiden ei ole tarkoitus toteuttaa sitä suoraan. Binaarisen yhteensopivuuden ylläpitämistä varten asiakkaiden on annettu edelleen toteuttaa rajapinta suoraan, mutta on erittäin suositeltavaa, että asiakkaat ovat sen sijaan org.eclipse.jdt.launching.AbstractVMInstall
-luokan aliluokkia. IVMInstall
-rajapinnan toteuttavien asiakkaiden tulisi toteuttaa myös uusi valinnainen rajapinta org.eclipse.jdt.launching.IVMInstall2
, jonka AbstractVMInstall
nyt toteuttaa. Asiakkaiden suositellaan toteuttavan uusi rajapinta IVMInstall2
, jotta vältyttäisiin virheessä 73493 ilmoitetulta häiriöltä. Suositeltu siirto on AbstractVMInstall
-luokan aliluokka.
Edellytetty toimi: kaikki toteuttavat luokat, jotka eivät jo ole org.eclipse.jdt.launching.AbstractVMInstall
-luokan aliluokkia, tulisi siirtää org.eclipse.jdt.launching.AbstractVMInstall
-luokan aliluokiksi.
Mitä muutos koskee: Lisäosia, jotka käyttävät org.eclipse.ui.SelectionEnabler.SelectionClass
-luokkaa.
Kuvaus: Eclipse 3.0 -versiossa sisäkkäinen toteutusluokka org.eclipse.ui.SelectionEnabler.SelectionClass
oli julkinen, eikä sen käytölle ollut rajoituksia. Tämä laiminlyönti on korjattu Eclipse 3.1 -versiossa tekemällä luokasta paketissa näkyvä.
Edellytetty toimi: Kaikki luokat, jotka luovat org.eclipse.ui.SelectionEnabler.SelectionClass
-luokan ilmentymiä tai laajentavat sen, on muokattava niin, etteivät ne enää viittaa tähän luokkaan.
Mitä muutos koskee: Lisäosia, jotka kutsuvat getParent()
-metodin org.eclipse.jface.action.ContributionItem
-luokan aliluokassa.
Kuvaus: Eclipse 3.0 -versiossa org.eclipse.jface.action.ContributionItem.getParent()
-metodi ei määrittänyt, että se voi palauttaa null-arvon. Tämä laiminlyönti on korjattu Eclipse 3.1 -versiossa metodin Javadocilla, joka erittelee, milloin se voi palauttaa null-arvon. Lisätietoja on virheessä 92777.
Edellytetty toimi: Kaiken koodin, joka kutsuu ContributionItem.getParent()-metodia, on varmistuttava, että se voi käsitellä null-tulosta.
Mitä muutos koskee: Lisäosia, jotka toteuttavat org.eclipse.ui.views.properties.IPropertySource
- tai IPropertySource2
-rajapinnan.
Kuvaus: Eclipse 3.0 -versiossa metodinorg.eclipse.ui.views.properties.IPropertySource.isPropertySet(boolean)
määritystä oli muutettu virheellisesti määrittämään, että arvo true tulee palauttaa, jos määritetyllä ominaisuudella ei ollut merkityksellistä oletusarvoa. Aiemmissa versioissa se määritti, että tällaisessa tapauksessa tulee palauttaa arvo false. Tämä oli tahaton keskeyttävä sovellusohjelmaliittymän muutos, vaikka toteutus toimi samalla tavalla kuin aiemmin, jos ominaisuuden lähde toteutti IPropertySource
-rajapinnan eikä IPropertySource2
-rajapintaa.
Tämä on korjattu versiossa 3.1 siten, että IPropertySource.isPropertySet(boolean)
on palautettu takaisin aiempaan määritykseen (että arvo false palautetaan tässä tapauksessa) ja IPropertySource2.isPropertySet(boolean) ohittaa tämän ja määrittää, että tässä tapauksessa palautetaan arvo true. Lisätietoja on virheessä 21756.
Edellytetty toimi: kaikki luokat, jotka toteuttavat IPropertySource- tai IPropertySource2-rajapinnan, joissa joillain ominaisuuksilla ei ole merkityksellisiä oletusarvoja, tulee tarkistaa ja varmistaa, että ne palauttavat oikean arvon isPropertySource(boolean)-metodille. Asiakkaiden tulee tarkistaa, että Ominaisuudet-näkymän Palauta oletusarvo -painike toimii odotetulla tavalla ominaisuuden lähteen osalta.
Mitä muutos koskee: Lisäosia, jotka käyttivät kokeellista handlerSubmission
-elementtiä, joka lisättiin org.eclipse.ui.commands
-laajennuspisteeseen Eclipse 3.0 -versiossa.
Kuvaus: Eclipse 3.0 -versiossa org.eclipse.ui.commands
-laajennuspisteeseen lisättiin kokeellinen elementti. Tämän elementin tarkoituksena oli rekisteröidä käsittelytoiminnot XML:n avulla. Tämän jälkeen on lisätty paljon parempi mekanismi, org.eclipse.ui.handlers
-laajennuspiste. Koska elementti oli merkitty kokeelliseksi, se on nyt poistettu.
Edellytetty toimi: kaikki lisäosat, jotka määrittävät handlerSubmission
-elementin, tulee siirtää org.eclipse.ui.commands
-laajennuspisteeseen.
Mitä muutos koskee: Lisäosia, jotka asettivat TeamUI-luokan kentän GLOBAL_IGNORES_CHANGED.
Kuvaus: Eclipse 3.0 -versiossa GLOBAL_IGNORES_CHANGED-kenttä lisättiin TeamUI-luokkaan. Tämä kenttä on vakio, jota käytetään osoittamaan, että ryhmälisäosan ylläpitämä yleisten ohitusten luettelo on muuttunut. Tätä kenttää ei ollut merkitty lopulliseksi versiossa 3.0, vaikka olisi pitänyt. Se on muutettu lopulliseksi versiossa 3.1.
Edellytetty toimi: lisäosat, jotka asettivat edellä mainitun kentän, eivät enää voi tehdä sitä.
Mitä muutos koskee: Lisäosia, jotka käyttävät FillLayout-luokkaa virheellisesti.
Kuvaus: Eclipse 3.0 -versiossa FillLayout-luokkaan ei ollut liitetty mitään asettelutietoja, ja jos sovellus osoitti asettelutiedot FillLayout-luokan hallitsemalle aliobjektille, ne ohitettiin. Eclipse 3.1 -versiossa on lisätty FillLayout-luokan tuki välimuistin koon tiedoille koon muuton suorituskyvyn lisäämistä varten. Välimuistissa olevat tiedot tallennetaan FillData-objektiin, joka liittyy kuhunkin FillLayout-luokan hallitsemaan aliobjektiin. Jos sovellus on virheellisesti määrittänyt asettelutiedot aliobjektiin, ClassCastException-poikkeus tuotetaan, kun pääobjektissa kutsutaan computeSize.
Edellytetty toimi: Etsi FillLayout-luokan aliobjektit, joille on määritetty asettelutietoja, ja lopeta asettelutietojen määritys.
Mitä muutos koskee: Lisäosia, jotka sieppaavat poikkeuksia widget-objektien luonnin aikana.
Kuvaus: Jos Eclipse 3.0 -versiossa luotiin widget-objekti, jonka pääobjekti oli poistettu, poikkeusta ei tuotettu ja widget-objektin koodi epäonnistui myöhemmin, tai tuotettiin SWTException-poikkeus, jossa oleva teksti ilmoitti, että widget-objekti on poistettu. Jos Eclipse 3.1 -versiossa luodaan widget-objekti, jonka pääobjekti on poistettu, konstruktori tuottaa IllegalArgumentException-poikkeuksen, jossa oleva teksti ilmoittaa, että argumentti ei ole kelvollinen.
Edellytetty toimi:koodin, joka käsittelee SWTException-poikkeuksen widget-objektin luonnin yhteydessä, tarvitsee käsitellä myös IllegalArgumentException.