Хотя я согласен, что кажется странным, что редактор по умолчанию отличается для одного и того же файла в зависимости от открытой перспективы, вот как вы могли бы это сделать.
- Создание двух новых расширений типа контента
- Зарегистрируйте свой первый редактор в качестве редактора по умолчанию для 1-го нового типа контента
- Зарегистрируйте второй редактор в качестве редактора по умолчанию для второго нового типа контента
- Для каждого типа контента у вас есть «описатель типа контента». В этих классах дескрипторов пусть он проверяет страницу активной рабочей среды на предмет текущего идентификатора перспективы и, если он соответствует ожидаемому значению, тогда VALID, если идентификатор перспективы не совпадает, возвращает INVALID.
- Для обоих редакторов вам необходимо связать эти редакторы с типом контента, а не с расширением файла или именем файла
- Теперь только один тип контента будет соответствовать одновременно, в зависимости от того, какая перспектива открыта. Убедитесь, что один из типов контента является «по умолчанию», поэтому он всегда будет совпадать, если у пользователя открыта какая-то другая перспектива.
В обновление № 1 добавлено несколько примеров
Для этого есть несколько онлайн учебных пособий . Но вот пример кода, чтобы было легче увидеть, какая работа требуется. Вот как вы объявляете свои типы контента (вам понадобится два из них)
<plugin>
<extension
point="org.eclipse.core.contenttype.contentTypes">
<content-type
base-type="org.eclipse.core.runtime.xml"
describer="com.liferay.ide.core.FirstContentTypeDescriber"
id="com.liferay.ide.core.contentType1"
name="First Content Type"
priority="normal">
</content-type>
</extension>
</plugin>
Тогда в классе Describer вы выполняете логику сопоставления. Затем в точке расширения редактора вы ссылаетесь на тип содержимого вместо имени файла или расширения, например:
<extension
point="org.eclipse.ui.editors">
<editor
class="com.liferay.ide.ui.FirstEditor"
default="false"
id="com.liferay.ide.ui.editor1"
name="My First Editor">
<contentTypeBinding
contentTypeId="com.liferay.ide.core.firstContentType">
</contentTypeBinding>
</editor>
</extension>