Intellijプラットフォームのプラグインの作成(IntelliJ IDEA、RubyMine、WebStorm、PhpStorm、PyCharm、AppCode)

こんにちは、Habr!

このトピックでは、IntelliJ IDEAおよびPyCharm用のシンプルなプラグインを作成する方法を説明します。 すべてのIDEにはプラグインを操作するための同じインターフェースが含まれているため、直接開発のプロセスとは異なり、他のシステム用に変更するために大きな労力( more )は必要ありません。



独自のプラグインを作成することを決定した場合、期待される結果は計画とあまり一致しないか、かなりの時間がかかることを警告します。 何がうまくいったのか、どれだけの時間を費やしたのかがわかれば、それはほとんどありませんでした。



プラグインはJavaで記述され、UIはSWINGで作成されます。 プラグイン開発の ドキュメント は、ほんの数ページといくつかのサンプルで構成されています。 インターネットでは、このトピックはまったく反映されていません。 わずかに役立つ唯一のことは、いくつかの既に作成されたプラグインのソースコードの可用性です。



最初は、標準のpythonライブラリの説明をすばやく便利に選択できるウィンドウを作成したかったのですが、結果はひどいものでした。 少なくともPythonドキュメントを検索してハイライト表示することができます。 昔ながらの方法でブラウザを使用する方が簡単ですが、終了することは望みません。







それでは始めましょう:

1)環境の準備



IDEのプラグインはIDEで記述されています。 インストールと構成が必要になります。



ツールのインストール:


必要なもの:

-Java(開発者は1.6を推奨);

-IntelliJ IDEA Community EditionまたはUltimate(最初のものを無料で使用しました。 ここからダウンロードできます)



ツールのセットアップ:


Java SDKおよびIntelliJ IDEAプラグインSDKを構成する必要があります。

-IntelliJ IDEAを起動します

-[ファイル]メニュー項目を開きます| プロジェクト構造

-[SDK]タブを選択し、プラス記号をクリックして、Javaへのパスを選択します



-[プロジェクト]タブを選択します

-[新規]、[IntelliJ IDEAプラグインSDK]の順にクリックし、開いたメニューで-IntelliJ IDEAへのパスを選択します







これで、プラグインプロジェクトを作成できます。



2)プラグインの作成



プラグインは、IDEと対話するために特別なオープンインターフェイスを使用する通常のJavaプログラムです(openと呼ばれるだけです。closeapiを呼び出す方が良いでしょう)。 プラグインには、ユーザーアクション(AnAction)、サービス(Service)、他のプラグインの拡張機能(Extension)、およびコンポーネントのみがあります。 ドキュメントの詳細。 そして、単一のプラグインを拡張しませんでしたが、構成ファイルに登録しました。



プラグインプロジェクトを作成する


ファイル| 新規プロジェクト:名前を入力し、プラグインモジュールタイプを選択し、手順1で構成したSDKを選択して、プロジェクトを作成します。









さらに、開発中のプラグインに応じて、アクションは個別になります。 プラグインの作成方法について説明します。 基礎として、私はドキュメントからプラグインの例を取り上げました-ツールウィンドウ。 そのソースコードと他の例のコードを取得するには、IDEソースコードをダウンロードする必要があります。



plugin.xmlの編集


プロジェクトを作成すると、プラグイン構造とメインの構成ファイル-plugin.xmlが表示されました。







その中で、クラスを登録し、カスタマイズを行います。 このファイルの詳細については、ドキュメントをご覧ください。

ファイルコード:

<idea-plugin version="2"> <name>DocPy</name> <description>Python standard documentation</description> <version>1.0</version> <vendor>YourCompany</vendor> <!-- please see http://confluence.jetbrains.net/display/IDEADEV/Build+Number+Ranges for description --> <idea-version since-build="107.105"/> <application-components> <!-- Add your application components here --> </application-components> <project-components> <!-- Add your project components here --> </project-components> <actions> <!-- Add your actions here --> </actions> <extensions defaultExtensionNs="com.intellij"> <!-- Add your extensions here --> </extensions> </idea-plugin>
      
      







プラグイン用に、次の2行を追加しました。



idea-pluginセクション:

com.intellij.modules.lang



このプラグインがPyCharmeで動作するために、依存関係を指定しない場合、プラグインはIntelliJ IDEAでのみ動作します。 このセクションでは、プラグインが機能するために必要な依存関係も指定できます。



拡張機能セクションで:

-IDEの開始時にクラスを開始し、その最初の場所:anchor-ウィンドウの位置、factoryClass-クラス



要約すると:

 <idea-plugin version="2"> <name>DocPy</name> <description>Python standard documentation</description> <version>1.0</version> <vendor>YourCompany</vendor> <idea-version since-build="107.105"/> <depends>com.intellij.modules.lang</depends> <application-components> </application-components> <project-components> </project-components> <actions> </actions> <extensions defaultExtensionNs="com.intellij"> <toolWindow id="PythonDoc" secondary="true" anchor="right" factoryClass="MainPanel" > </extensions> </idea-plugin>
      
      





クラスとグラフィカルインターフェイスを作成する


シンプルなグラフィカルウィンドウがあるため、Gui Formテンプレートからクラスを作成します。これにより、便利なグラフィカルエディターを使用してインターフェイスを作成できます。 必要な要素を追加します。





結果はこのクラスです:

 public class MainPanel { private JPanel panel1; private JTabbedPane tabbedPane1; private JTextArea MainText; private JList FileList; private JPanel FilesTab; private JPanel TextTab; private JScrollPane TextPane; }
      
      





ここには、ファイルの最初のリストとこのファイルの2番目のテキストに2つのタブがあるパネルがあります。

ToolWindowFactoryインターフェイスでこのクラスを拡張します。 これを使用して、私のクラスをIDEの一部にし、標準コントロール(アイコン、任意の場所に配置する機能、スケーリングなど)を追加できます。



このインターフェイスについてどうやって知りましたか? -お願いします。

まだ不明で、どこにも書かれていない例からコピーしました。その方法の1つは、他のプラグインのソースを調べることです。



このインターフェイスに必要なメソッドcreateToolWindowContentを実装します。これは、ウィンドウの作成時に呼び出されます。 興味深いのは、最後の3行のみです。



 @Override public void createToolWindowContent(Project project, ToolWindow toolWindow) { final String[] FilesMas = getFileList("python-3.2.3-docs-text\library\"); FileList.setListData(FilesMas); //    FileList.addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { MainText.setText(readFileToStr("python-3.2.3-docs-text\library\" + FilesMas[FileList.getSelectedIndex()])); //     MainText.setSelectionStart(0); MainText.setSelectionEnd(0); //    TextPane.getVerticalScrollBar().setValue(0); //    tabbedPane1.setSelectedIndex(1); } }); MainText.setText(readFileToStr("A:\downloads\python-3.2.3-docs-text\library\sqlite3.txt")); //   ContentFactory contentFactory = ContentFactory.SERVICE.getInstance(); // ()   GUI Content content = contentFactory.createContent(panel1, "", false); //  IDE toolWindow.getContentManager().addContent(content); }
      
      







さらに2つの関数(ファイルのリストを取得し、ファイルから読み取る)を追加すると、プラグインは次のステップに進むことができます。



3)プラグインをビルドする



プラグインを使用するには、特定の方法でビルドする必要があります。

ビルド| 展開のためのプラグインモジュールPyDocの準備



プロジェクトディレクトリに、プロジェクトの名前を持つjarファイルを取得します。



4)プラグインをIDEにインストールします



[設定]-> [プラグイン]-> [ディスクからダウンロード](前の手順で取得したjarを選択)を使用するか、jarファイルをプラグインフォルダーにコピーします。



結論



残念ながら、人気のあるIDEラインの開発者とコミュニティは、プラグインの作成プロセスについてほとんど書いていないため、プラグインの外観と開発に寄与していません。 結局のところ、それは単一の光源なしで部屋から抜け出す方法を見つけるようなものです。 私の投稿がこの方向に弾みをつけることを願っています。



ほとんどすべてを盲目的に行わなければならなかったので、どこかでミスをしたかもしれません。 コメントまたはPMで正しければ感謝します。



詳細はこちらをご覧ください

私のプロジェクトのソースコード。



All Articles