IntelliJ IDEA插件:跳转到自定义xml的声明

时间:2013-12-06 02:54:36

标签: java xml intellij-idea intellij-plugin

我有基于组件的应用程序。所有组件都以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 + click就像我们跳转到类的声明一样。

我想要指导我应该看哪个课程,我应该怎么做或类似的实施。

由于

1 个答案:

答案 0 :(得分:2)

我认为你要找的是reference contributor

有关如何设置贡献者的详细信息,请参阅this answer。创建此贡献者后,我认为您将有两种方法可以找到x:y引用的XML元素:

  • 解析每个潜在的XML文件并尝试查找具有正确属性的标记,然后返回相应的PsiElement
  • 为每个component代码创建index,并在此索引中查找x:y(需要更多工作)