5

JavaリソースにリンクするカスタムXML形式があります。簡単にするために、私のXMLファイルは次のようになっていると仮定しましょう。

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

最終的に、私の参照はやや複雑になります。完全修飾クラス名が直接含まれることはなく、正しいクラスを解決するためのロジックが必要になりますが、ここでは例をできるだけ単純にしておきたいと思います。

ここで、要素のテキストをStrg +クリックして、Spring-XMLファイルで可能であるのと同じように、IntelliJで.javaファイルに移動できるようにします。IDEAプラグイン開発FAQには、「 XMLファイルのJava要素へのカスタム参照を追加するにはどうすればよいですか? 」というリンクがあります。これはまさに私が必要としているもののように聞こえます。残念ながら、それは誰かが多かれ少なかれこのような何かを実装し、いくつかの小さな問題を抱えているという議論にリンクしています。それにもかかわらず、私はおそらくインターフェースcom.intellij.psi.PsiReferenceの実装を書く必要があることを理解しました。「PsiReference」と「IntelliJ」または「IDEA」をグーグルで検索しても、残念ながらその使用方法に関するチュートリアルは表示されませんでしたが、クラスXmlValueReferenceが見つかりました。便利そうですね。さらに、「XmlValueReference」をグーグルで検索しても、クラスの使用方法に役立つものは何も見つかりませんでした。少なくともPSIクックブックには、を使用してJavaクラスを見つけることができると書かれていJavaPsiFacade.findClass()ます。正しい使い方を教えてくれるチュートリアルやヒントなどをいただければ幸いです。

上記のリンクされたディスカッションでは、registry.registerReferenceProvider(XmlTag.class, provider)最終的にプロバイダーを実装できたら、プロバイダーを登録するために電話をかける必要があると述べていますが、どのタイプの「レジストリ」で、どこから入手できますか?

4

1 に答える 1

10

まず最初に、IntelliJ プラグイン開発の基本を説明する、数日前に公開された素敵なチュートリアルがあります (リファレンス コントリビューターのセクションを参照してください)。

PsiReferenceContributor次のように参照される独自の を定義する必要がある可能性がありますplugin.xml

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

参照コントリビューターには、registerReferenceProviders(PsiReferenceRegistrar)を呼び出すことができるメソッドがありますregistry.registerReferenceProvider(XmlTag.class, provider)

最後に、 のインスタンスでPsiReferenceProvider、タグ名をテストしてクラス参照を含まないタグを除外し、を使用して適切な Java クラスJavaPsiFacade.findClass()を見つける必要があります。

私の経験から、IntelliJ プラグインの開発に関するヘルプを得るのに最適な場所は、JetBrains のフォーラムです。

于 2013-01-17T10:25:35.420 に答える