Плагин IntelliJ IDEA: перейти к объявлению пользовательского xml

У меня есть компонентное приложение. Все компоненты определены в XML. Компоненты могут быть определены в разных XML-файлах.

<!-- filename: components.xml -->

<components>
   <component type="x" name="y">
      <property1 attribute="attr"/>
      <property2 attribute="attr"/>
   </component>
   <component type="a" name="b">
      <property1 attribute="attr"/>
      …
   </component>
 </components>


<!-- filename: extra-components.xml -->
<components>
    <component type="x" name="z" extends="x:y">  <!-- this extends component x:y -->
        <property3 attribute="attr"/>
    </component>
</components>

Прямо сейчас я пытаюсь написать плагин, чтобы я мог переходить от дочерних компонентов к родительскому компоненту. В приведенном выше примере тип компонента «x» и имя «z» расширяет тип компонента «x» и имя «y».

Просматривая некоторые исходники из разных плагинов, я смог добавить пункт меню и захватить содержимое под курсором.

Скажем, если мой курсор находится под «x: y» во втором компоненте, я могу убрать x и y, чтобы, по крайней мере, я мог знать тип компонента и имя компонента для поиска.

Но я хочу подчеркнуть содержимое под расширениями, то есть «x: y», когда я нажимаю Ctrl и ищу компонент, и переходить к объявлению компонента, когда Ctrl + щелчок, как мы переходим к объявлению класса.

Мне нужно руководство, например, какой класс я должен искать, как мне идти или аналогичная реализация.

Спасибо


person darkapple    schedule 06.12.2013    source источник


Ответы (1)


Я думаю, что вы ищете справочника.

См. этот ответ для получения более подробной информации о том, как настроить участника. Как только этот вкладчик будет создан, я думаю, у вас будет два способа найти, к какому XML-элементу относится x:y:

  • проанализируйте каждый потенциальный файл XML и попытайтесь найти тег с правильными атрибутами, а затем верните соответствующий PsiElement
  • создайте индекс каждого component тег и поиск x:y в этом индексе (требуется гораздо больше работы)
person Bastien Jansen    schedule 23.01.2014