O ponto de extensão das naturezas permite aos escritores registrar as suas implementações de natureza sob um nome simbólico que é então utilizado de dentro da área de trabalho para encontrar e configurar as naturezas. O nome simbólico é o id da extensão de natureza. Ao definir uma extensão de natureza, os usuários são incentivados a incluir um valor legível para os usuários para o atributo "name" que identifique seu significado e potencialmente possa ser apresentado a usuários.
As naturezas podem especificar restrições de relacionamentos com outras naturezas. A restrição "alguma natureza" especifica que pelo menos uma natureza pertencente a um conjunto específico pode existir em um projeto em um determinado momento. Isso reforça a exclusão mútua entre naturezas que não são compatíveis. A restrição "natureza requerida" especifica uma dependência em outra natureza. Quando uma natureza é incluída em um projeto, todas as naturezas requeridas também devem ser incluídas. Há garantias de que as naturezas requeridas nas naturezas configuradas e desconfiguradas dessa forma serão sempre configuradas antes delas e desconfiguradas depois delas. Por essa razão, as dependências cíclicas entre naturezas não são permitidas.
As naturezas não podem ser incluídas ou removidas de um projeto se essa alteração violar qualquer restrição atendida anteriormente. Se uma natureza for configurada em um projeto e, posteriormente, achar que suas restrições não são satisfatórias, essa natureza e todas as naturezas que as exigem serão marcadas como desativadas, mas permanecerão no projeto. Isso pode acontecer, por exemplo, quando uma natureza requerida está ausente na instalação. As naturezas ausentes na instalação e as naturezas envolvidas nos ciclos de dependência também são marcadas como desativadas.
As naturezas também podem especificar quais construtores de projetos incrementais, se houver algum, são configurados por elas. Com essa informação, a área de trabalho garantirá que os construtores serão executados apenas quando suas naturezas correspondentes estiverem presentes e ativadas no projeto que está sendo criado. Se uma natureza for removida de um projeto, mas o método de desconfiguração da natureza falhar ao remover seus construtores correspondentes, a área de trabalho removerá automaticamente esses construtores da especificação. Não é permitido que duas naturezas especifiquem o mesmo construtor de projeto incremental em suas marcações.
As naturezas também podem desaprovar a criação de recursos vinculados a projetos aos quais elas estão associadas. Definindo o atributo allowLinking
como "false", uma natureza pode declarar que os recursos vinculados não devem ser criados nunca. Esse recurso é novo no release 2.1.
A partir do release 3.1, as naturezas podem declarar afinidade com tipos de conteúdo arbitrários, afetando a determinação do tipo do conteúdo do modo que acontece com arquivos no espaço de trabalho. Em caso de conflito (dois ou mais tipos de conteúdo considerados igualmente adequados para um determinado arquivo), o tipo de conteúdo que tem afinidade com qualquer uma das naturezas configuradas para o projeto correspondente será escolhido.
<!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>
Se esta extensão foi definida em um plug-in com id "com.xyz.coolplugin", o nome completo destas naturezas seria "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>
Direitos Autorais (c) 2002, 2005 IBM Corporation e outros.
Todos os direitos reservados.
Este programa e os materiais que o acompanham são disponibilizados
sob os termos da Eclipse Public License v1.0 que acompanha esta
distribuição e estão disponíveis no endereço http://www.eclipse.org/legal/epl-v10.html