O ponto de extensão das naturezas permite aos transcritores de natureza registarem a implementação da sua natureza com um nome simbólico, que depois é utilizado no interior da área de trabalho para encontrar e executar naturezas. O nome simbólico é o id da extensão da natureza. Ao definir uma extensão de natureza, os utilizadores são incentivados a incluir um valor legível por pessoas para o atributo "name", que identifique o seu significado e que possa ser, eventualmente, apresentado aos utilizadores.
As naturezas podem especificar restrições de relação com outras naturezas. A restrição "uma única natureza" especifica que num projecto só pode existir, em qualquer altura, uma natureza pertencente a um conjunto estabelecido. Isto aplica a exclusão mútua entre naturezas que não sejam compatíveis entre si. A restrição "requisito de natureza" especifica uma dependência de outra natureza. Quando se adiciona uma natureza a um projecto, têm de ser adicionadas todas as naturezas necessárias. As naturezas são configuradas e desconfiguradas de forma a que as suas naturezas necessárias sejam sempre configuradas primeiro do que elas e desconfiguradas depois delas. Por este motivo, não são permitidas dependências cíclicas entre naturezas.
Não é possível adicionar ou remover naturezas de um projecto, caso essa alteração viole quaisquer restrições anteriormente cumpridas. Caso se configure uma natureza um projecto e, mais tarde, se verifique que as suas restrições não são cumpridas, essa natureza e todas as outras que dela necessitam são marcadas como desactivadas, mas permanecem no projecto. Esta situação pode verificar-se quando, por exemplo, falta uma natureza necessária na instalação. As naturezas que faltem na instalação e as naturezas envolvidas em ciclos de dependência são também marcadas como desactivadas.
As naturezas também podem especificar quais os construtores incrementais de projectos, caso exista algum, que irão configurar. Com estas informações, a área de trabalho irá garantir que os construtores só serão executados quando a sua natureza correspondente estiver presente e activada no projecto em construção. Caso seja removida uma natureza de um projecto, mas o método de desconfiguração da natureza não conseguir remover os seus construtores correspondentes, a área de trabalho irá remover automaticamente esses construtores da especificação. Não é permitido a duas naturezas especificarem o mesmo construtor incremental de projectos na sua marcação.
As naturezas também possuem a capacidade de proibir a criação de recursos ligados em projectos aos quais estão associados. Ao definir o atributo allowLinking
como "false", uma natureza pode declarar que os recursos ligados não devem nunca ser criados. Esta característica é nova da edição 2.1.
A partir da edição 3.1, as naturezas podem declarar afinidade com tipos de conteúdo arbitrário, afectando a forma como é feita a determinação de tipos de conteúdo para ficheiros na área de trabalho. Em caso de conflitos (dois ou mais tipos de conteúdos considerados igualmente adequados para um ficheiro estabelecido), será escolhido o tipo de conteúdo que possua afinidade com qualquer uma das naturezas configuradas para o projecto correspondente.
<!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>
Caso estas extensões tenham sido definidas num plug-in com o id "com.xyz.coolplugin", o nome totalmente qualificado destas naturezas serão "com.xyz.coolplugin.fireNature", "com.xyz.coolplugin.waterNature" e "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 e outros.
Todos os direitos reservados. Este programa e os materiais que o acompanham estão disponíveis sob os termos da Eclipse Public License v1.0, que acompanha esta distribuição, e estão disponíveis em http://www.eclipse.org/legal/epl-v10.html