Med naturutvidelsespunktet kan naturforfattere registrere naturimplementeringen under et symbolsk navn som så brukes fra innsiden av arbeidsområdet til å finne og kjøre naturer. Det symbolske navnet er IDen for naturutvidelsen. Ved definering av en naturutvidelse, blir brukerne oppfordret til å inkludere en lesbar verdi for attributtet "name" som identifiserer betydningen, og som kan presenteres for brukerne.
Naturer kan oppgi relasjonsbegrensninger i forhold til andre naturer. Begrensningen "one-of-nature" oppgir at det maksimalt kan finnes en natur som tilhører et gitt sett i et prosjekt på et hvilket som helst tidspunkt. Dette fremtvinger gjensidig utelukking mellom naturer som ikke er kompatible med hverandre. Begrensningen "requires-nature" oppgir en avhengighet med en annen natur. Når en natur blir lagt til et i prosjekt, må alle nødvendige naturer også legges til. Naturene blir garantert konfigurert og dekonfigurert slik at de nødvendige naturene alltid blir konfigurert før dem og dekonfigurert etter dem. Av denne grunnen er det ikke tillatt med sykliske avhengigheter mellom naturer.
Naturer kan ikke legges til i eller fjernes fra et prosjekt hvis denne endringen ville bryte eventuelle begrensninger som tidligere ble oppfylt. Hvis det er konfigurert en natur for et prosjekt, men det senere blir oppdaget at begrensningene ikke er oppfylt, vil denne naturen og alle naturer som krever den, bli merket som deaktivert, men de forblir i prosjektet. Dette kan for eksempel skje når en nødvendig natur mangler i en installasjon. Naturer som mangler i installasjonen, og naturer som er involvert i avhengighetssykluser, merkes også som deaktivert.
Naturer kan også oppgi hvilke trinnvise prosjektbyggere som eventuelt er konfigurert av dem. Med denne informasjonen vil arbeidsområdet sikre at byggere bare vil kjøre når den tilsvarende naturen finnes og er aktivert for prosjektet som blir bygd. Hvis en natur fjernes fra et prosjekt, men naturens dekonfigureringsmetode ikke fjerner de tilsvarende byggerne, fjerner arbeidsområdet disse byggerne automatisk fra spesifikasjonen. Det er ikke tillatt for to naturer å oppgi samme trinnvise prosjektbygger i kodingen.
Naturer kan også
forby opprettingen av linkede ressurser i prosjekter de er knyttet til. Ved å definere
attributtet allowLinking
til "false", kan en natur deklarere at det aldri
skal opprettes linkede ressurser. Denne funksjonen er ny i utgave 2.1.
Fra og med utgave 3.1 kan naturer deklarere affinitet med tilfeldige innholdstyper, noe som påvirker hvordan innholdstyper blir fastsatt for filer i arbeidsområdet. I tilfeller med konflikter (to eller flere innholdstyper som synes like passende for en gitt fil), velges den innholdstypen som har affinitet med en hvilken som helst av naturene som er konfigurert for det tilsvarende prosjektet.
<!ELEMENT extension (runtime , (one-of-nature | requires-nature | builder | content-type)* , options?)>
<!ATTLIST extension
point CDATA #REQUIRED
id CDATA #REQUIRED
name CDATA #IMPLIED>
<!ATTLIST run
class CDATA #REQUIRED>
<!ELEMENT parameter EMPTY>
<!ATTLIST parameter
name CDATA #REQUIRED
value CDATA #REQUIRED>
<!ELEMENT one-of-nature EMPTY>
<!ATTLIST one-of-nature
id CDATA #REQUIRED>
<!ELEMENT requires-nature EMPTY>
<!ATTLIST requires-nature
id CDATA #REQUIRED>
<!ELEMENT builder EMPTY>
<!ATTLIST builder
id CDATA #REQUIRED>
<!ELEMENT options EMPTY>
<!ATTLIST options
allowLinking (true | false) >
<!ELEMENT content-type EMPTY>
<!ATTLIST content-type
id CDATA #REQUIRED>
Hvis disse utvidelsene er definert i en plugin-modul med IDen "com.xyz.coolplugin", vil det fullt kvalifiserte navnet på disse naturene være "com.xyz.coolplugin.fireNature", "com.xyz.coolplugin.waterNature" og "com.xyz.coolplugin.snowNature".<extension id=
"fireNature"
name=
"Fire Nature"
point=
"org.eclipse.core.resources.natures"
>
<runtime>
<run class=
"com.xyz.natures.Fire"
/>
</runtime>
<one-of-nature id=
"com.xyz.stateSet"
/>
<options allowLinking=
"false"
/>
</extension>
<extension id=
"waterNature"
name=
"Water Nature"
point=
"org.eclipse.core.resources.natures"
>
<runtime>
<run class=
"com.xyz.natures.Water"
/>
</runtime>
<one-of-nature id=
"com.xyz.stateSet"
/>
</extension>
<extension id=
"snowNature"
name=
"Snow Nature"
point=
"org.eclipse.core.resources.natures"
>
<runtime>
<run class=
"com.xyz.natures.Snow"
>
<parameter name=
"installBuilder"
value=
"true"
/>
</run>
</runtime>
<requires-nature id=
"com.xyz.coolplugin.waterNature"
/>
<builder id=
"com.xyz.snowMaker"
/>
</extension>
Copyright (c) 2002, 2005 IBM Corporation and others.
All rights reserved. This program and the accompanying materials are made
available under the terms of the Eclipse Public License v1.0 which
accompanies
this distribution, and is available at
http://www.eclipse.org/legal/epl-v10.html