【问题标题】:IntelliJ IDEA plugin : Jump to declaration for custom xmlIntelliJ IDEA 插件:跳转到自定义 xml 的声明
【发布时间】:2013-12-06 02:54:35
【问题描述】:

我有基于组件的应用程序。所有组件都在 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,这样至少我可以知道要查找的组件类型和组件名称。

但是当我按下 ctrl 并搜索组件时,我想在扩展下的内容下划线,即“x:y”,并在 ctrl+click 时跳转到组件的声明,就像我们跳转到类的声明一样。

我需要一些指导,比如我应该看哪个类、我应该怎么做或类似的实现。

谢谢

【问题讨论】:

    标签: java xml intellij-idea intellij-plugin


    【解决方案1】:

    我认为您正在寻找的是reference contributor

    有关如何设置贡献者的更多详细信息,请参阅this answer。创建此贡献者后,我认为您将有两种方法来查找 x:y 所指的 XML 元素:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-02
      • 2022-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      相关资源
      最近更新 更多