Le point d'extension des natures permet aux éditeurs de nature d'enregistrer leur implémentation de nature sous un nom symbolique qui est ensuite utilisé dans l'espace de travail pour trouver et configurer les natures. Ce nom symbolique est l'ID de l'extension de nature. Lors de la définition d'une extension de nature, les utilisateurs sont encouragés à inclure une valeur lisible pour l'homme pour l'attribut "name" qui identifie sa signification et qui peut être potentiellement présenté aux utilisateurs.
Les natures peuvent spécifier des contraintes de relation avec d'autres natures. La contrainte "one-of-nature" spécifie qu'une seule nature appartenant à un ensemble donné peut exister dans un projet, à un moment donné. L'exclusion mutuelle des natures qui ne sont pas compatibles les unes avec les autres est ainsi mise en oeuvre. La contrainte "requires-nature" spécifie une dépendance vis à vis d'une autre nature. Lorsqu'une nature est ajoutée à un projet, toutes les natures requises doivent également être ajoutées. Les natures sont configurées et déconfigurées, de manière à ce que les natures requises qui leur sont propres soient toujours configurées avant elles et déconfigurées après. Pour cette raison, les dépendances cycliques entre les natures ne sont pas autorisées.
Les natures ne peuvent être ni ajoutées ni supprimées d'un projet lorsqu'un tel changement enfreint une quelconque contrainte préalablement respectée. Si une nature est configurée dans un projet, et qu'il s'avère ultérieurement que les contraintes qui y sont associées ne sont pas respectées, ladite nature ainsi que toutes celles qui sont requises sont marquées comme étant désactivées, mais sont maintenues dans le projet. Ce cas de figure peut se présenter lorsque, par exemple, une nature requise n'apparaît pas dans le répertoire d'installation. Les natures absentes du répertoire d'installation ainsi que celles qui sont impliquées dans des cycles de dépendance sont également marquées comme étant désactivées.
Les natures peuvent également spécifier les éventuels générateurs de projets incrémentiels qu'elles configurent. Ces informations permettent à l'espace de travail de s'assurer que les générateurs sont uniquement exécutés lorsque la nature correspondante est présente et activée dans le projet généré. Si une nature est supprimée d'un projet, mais que la méthode de déconfiguration de la nature ne parvient pas à supprimer les générateurs correspondants, l'espace de travail supprime automatiquement ces générateurs de la spécification de génération. Deux natures ne peuvent pas spécifier le même générateur de projet incrémentiel dans leur marque.
Les natures ont également la possibilité d'interdire la création de
ressources liées sur des projets auxquelles elles sont associées. En
définissant l'attribut allowLinking
à "false", une
nature peut déclarer qu'il est interdit de créer des ressources liées. Il s'agit d'une nouvelle fonction de la version 2.1.
Au démarrage de la version 3.1, les natures peuvent déclarer une affinité avec des types de contenu arbitraires, ce qui affecte la manière dont la détermination du type de contenu a lieu pour les fichiers dans l'espace de travail. Dans le cas de conflits (lorsque plusieurs types de contenu conviennent pour un fichier donné), c'est le type de contenu ayant une affinité avec l'une des natures configurées pour le projet correspondant qui sera choisi.
<!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>
Si ces extensions étaient définies dans un plug-in avec l'ID "com.xyz.coolplugin", le nom qualifié complet de ces natures seraient "com.xyz.coolplugin.fireNature", "com.xyz.coolplugin.waterNature" et "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. Ce programme et les produits associés sont
distribués sous licence publique Eclipse v1.0 et disponibles à
l'adresse suivante :
http://www.eclipse.org/legal/epl-v10.html