使IntelliJ能够识别XML文件中Java元素的链接

yan*_*kee 5 intellij-idea

我有一个链接到Java资源的自定义XML格式.为简单起见,我们假设我的XML文件如下所示:

<root>
  <java-class>my.fully.qualified.class.name</java-class>
</root>
Run Code Online (Sandbox Code Playgroud)

最终我的引用会更复杂一些.它不会直接包含完全限定的类名,我需要一些逻辑来解析正确的类,但我希望这里的示例尽可能简单.

现在我希望它可以Strg +单击元素的文本,并希望IntelliJ将我带到.java文件,就像在Spring-XML文件中一样.在IDEA插件开发常见问题中,有一个名为" 如何在XML文件中添加对Java元素的自定义引用? "的链接,这听起来就像我需要的那样.不幸的是,它链接到一个讨论,其中有人或多或少地完成了这样的事情,有一些小问题.不过我明白我可能需要编写接口com.intellij.psi.PsiReference的实现.谷歌搜索"PsiReference"和"IntelliJ"或"IDEA"遗憾的是没有提出任何关于如何使用它的教程,但我找到了听起来很有用的类XmlValueReference.然而再次谷歌搜索"XmlValueReference"没有发现任何有用的如何使用该类.至少PSI Cookbook告诉我,我可以通过使用找到Java类JavaPsiFacade.findClass().我会感谢任何指导正确用法的教程,提示等.

上面链接的讨论提到我需要调用registry.registerReferenceProvider(XmlTag.class, provider)才能在我最终设法实现它时注册我的提供程序,但是哪种类型是"注册表",我从哪里获取它?

Bas*_*sen 6

首先,这是几天前提出的一个很好的教程,它解释了IntelliJ插件开发的基础知识(你应该看看参考文献参考资料部分).

您可能需要定义自己的PsiReferenceContributor,这将在您的plugin.xml像这样引用:

<psi.referenceContributor implementation="com.yourplugin.YourReferenceContributor"/>
Run Code Online (Sandbox Code Playgroud)

在您的参考撰稿人中,有一种方法可以registerReferenceProviders(PsiReferenceRegistrar)让您打电话registry.registerReferenceProvider(XmlTag.class, provider).

最后,在你的情况下PsiReferenceProvider,你将不得不测试标签名称来过滤掉不含有类引用标签,然后找到合适的Java类使用JavaPsiFacade.findClass().

根据我的经验,获得IntelliJ插件开发帮助的最佳地点是JetBrains的论坛.