2013-01-08 23 views
5

我有一種鏈接到Java資源的自定義XML格式。爲了簡單起見,我們假設我的XML文件如下所示:使IntelliJ知道指向XML文件中Java元素的鏈接

<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)爲了註冊我的提供者,一旦我最終設法實現它,但哪種類型是「註冊表」,我從哪裏得到它?

回答

4

首先,這是幾天前發佈的nice tutorial,它解釋了IntelliJ插件開發的基礎知識(您應該查看Reference Contributor部分)。

你可能需要定義自己的PsiReferenceContributor,這將在您的plugin.xml引用這樣的:

<psi.referenceContributor implementation="com.yourplugin.YourReferenceContributor"/> 

在大家參考貢獻者,有一個方法registerReferenceProviders(PsiReferenceRegistrar)在這裏您將能夠調用registry.registerReferenceProvider(XmlTag.class, provider)

最後,在您的PsiReferenceProvider實例中,您必須測試標記名稱以過濾掉不包含類別引用的標記,然後使用JavaPsiFacade.findClass()找到the right Java class

從我的經驗來看,獲得IntelliJ插件開發幫助的最佳地點是JetBrains' forums.

相關問題