Точка расширения классификаторов позволяет создателям классификаторов регистрировать реализацию классификатора под символьным именем, которое затем используется в рабочей области для поиска и настройки классификаторов. Символьное имя - это идентификатор расширения классификатора. При определении расширения классификатора пользователям рекомендуется добавлять в атрибут "name" удобочитаемое значение, которое будет обозначать классификатор и может быть представлено другим пользователям.
Классификаторы могут задавать ограничения, связанные с другими классификаторами. Ограничение "единственный классификатор" означает, что в каждый момент в проекте может существовать не более одного классификатора из заданного набора. Это предотвращает появление несовместимых классификаторов. Ограничение "обязательный классификатор" задает зависимость от другого классификатора. При добавлении классификатора в проект вместе с ним должны быть добавлены и все обязательные классификаторы. Классификаторы гарантированно настраиваются и уничтожаются таким образом, что их обязательные классификаторы всегда настраиваются до них и уничтожаются после них. По этой причине, циклические зависимости между классификаторами запрещены.
Классификаторы нельзя добавлять в проект или удалять из проекта, если такое изменение вызовет нарушение соблюдавшихся ранее ограничений. Если классификатор настроен в проекте, но впоследствии он обнаружит, что его ограничения не соблюдаются, то этот классификатор и все классификаторы, для которых он является обязательным, помечаются как отключенные, хотя и остаются в проекте. Это может произойти, например, в случае, когда обязательный классификатор отсутствует с момента установки. Классификаторы, отсутствующие с момента установки, и классификаторы, участвующие в циклических зависимостях, также помечаются как отключенные.
Классификаторы могут также указывать, какие дополняющие компоновщики проекта, если они есть, были ими настроены. Благодаря этой информации рабочая область сможет запускать такие компоновщики только при условии, что соответствующие классификаторы существуют и включены в компонуемом проекте. Если классификатор удален из проекта, но уничтожающему методу классификатора не удается удалить его соответствующие компоновщики, то рабочая область автоматически удалит эти компоновщики из спецификации. Не допускается, чтобы два классификатора указывали один и тот же дополняющий компоновщик проектов в своем описании.
Классификаторы также могут запрещать создание связанных ресурсов в тех
проектах, с которыми классификаторы связаны. Присвоив атрибуту
allowLinking
значение "false", классификатор может
объявить, что создание связанных ресурсов запрещено. Эта возможность
впервые появилась в выпуске 2.1.
Начиная с выпуска 3.1, классификаторы могут объявлять связанность с произвольными типами содержимого, таким образом влияя на то, как происходит определение типа содержимого для файлов в рабочей области. В случае конфликта (два или больше типов одинаково подходят для файла), выбирается тип содержимого, имеющий связанность с любым из классификаторов, настроенных для соответствующего проекта.
<!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>
Если эти расширения были определены в модуле с идентификатором "com.xyz.coolplugin", то полными именами этих классификаторов будут "com.xyz.coolplugin.fireNature", "com.xyz.coolplugin.waterNature" и "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 и другие.
Все права защищены. Эта программа и сопутствующие материалы распространяются на условиях Eclipse Public License v1.0, поставляемой вместе с продуктом и доступной на Web-сайте http://www.eclipse.org/legal/epl-v10.html