我有一个链接到Java资源的自定义XML格式。为简单起见,我们假设我的XML文件如下所示:
<root>
<java-class>my.fully.qualified.class.name</java-class>
</root>
最终我的推荐会更复杂一些。它不会直接包含完全限定的类名,我需要一些逻辑来解析正确的类,但我想在这里尽可能简单地保持示例。
现在我希望它可以Strg +单击元素的文本,并希望IntelliJ将我带到.java文件,就像在Spring-XML文件中一样。在IDEA Plugin Development FAQ中有一个名为“How do I add custom references to Java elements in XML files?”的链接,这听起来就像我需要的那样。不幸的是,它链接到一个讨论,其中有人或多或少地完成了这样的事情,有一些小问题。不过我明白我可能需要编写接口com.intellij.psi.PsiReference的实现。谷歌搜索“PsiReference”和“IntelliJ”或“IDEA”遗憾的是没有提出任何关于如何使用它的教程,但我找到了有用的课程XmlValueReference。然而再次谷歌搜索“XmlValueReference”没有发现任何有用的如何使用该类。至少PSI Cookbook告诉我,我可以使用JavaPsiFacade.findClass()
找到Java类。我要感谢任何能够正确使用的教程,提示等等。
以上链接的讨论提到我需要调用registry.registerReferenceProvider(XmlTag.class, provider)
以便在我最终设法实现它之后注册我的提供程序,但是哪种类型是“注册表”以及我从哪里获取它?
答案 0 :(得分:5)
首先,这是几天前出现的nice tutorial,它解释了IntelliJ插件开发的基础知识(你应该看一下Reference Contributor部分。)
您可能需要定义自己的PsiReferenceContributor
,plugin.xml
会在<psi.referenceContributor implementation="com.yourplugin.YourReferenceContributor"/>
中引用,如下所示:
registerReferenceProviders(PsiReferenceRegistrar)
在您的参考撰稿人中,有一种方法registry.registerReferenceProvider(XmlTag.class, provider)
,您可以在其中拨打PsiReferenceProvider
。
最后,在JavaPsiFacade.findClass()
的实例中,您必须测试标记名称以过滤掉不包含类引用的标记,然后使用{{1}}查找the right Java class。< / p>
根据我的经验,获得IntelliJ插件开发帮助的最佳位置是JetBrains' forums.