2013-01-08 6 views
5

JavaリソースにリンクするカスタムXML形式があります。簡略化のための私のXMLファイルは次のようになりますと仮定しましょう:XMLファイルのJava要素へのリンクをIntelliJに認識させる

<root> 
    <java-class>my.fully.qualified.class.name</java-class> 
</root> 

結局私の参照は多少複雑になります。それは完全に修飾されたクラス名を直接含んでいませんし、正しいクラスを解決するためにいくつかのロジックが必要ですが、ここではできるだけ単純な例を保ちたいと思います。

これで、SpringのXMLファイルと同じように、要素のテキストをStrg +クリックし、IntelliJで.javaファイルに移動させたいと考えています。 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をご覧ください)。あなたはおそらく、このようなあなたのplugin.xmlに参照される独自のPsiReferenceContributor、定義する必要があります

:あなたの参照の貢献者で

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

を、あなたはregistry.registerReferenceProvider(XmlTag.class, provider)を呼び出すことができるようになります方法registerReferenceProviders(PsiReferenceRegistrar)があります。

最後に、PsiReferenceProviderのインスタンスでは、クラス参照を含まないタグを除外するには、JavaPsiFacade.findClass()を使用してthe right Java classを検索する必要があります。

私の経験から、IntelliJプラグインの開発に関する助けを得るには、JetBrains' forums.

関連する問題