IntelliJ IDEAのプラグインを作成し、コードエディターに機能を追加しています

IntelliJ IDEAで動作し始めて、Eclipseで使用する便利なキーの組み合わせ(Ctrl + Alt + Up)がないことを発見しました。 この組み合わせにより、選択したテキストまたは行のブロックがコピーされ、カーソルがコピーされたブロックの先頭に移動します。

Ideaには、ブロックをコピーするCtrl + Dのデフォルトアクション(EclipseではCtrl + Alt + Down)がありますが、同様のアクションを追加することはできません。 グーグルで検索した後、Q&Aで質問がありましたが、 回答はありませんでした。 ジェットブレインで発行。 これらのアクションはすべて答えを出さなかったため、Ideaの小さなプラグインを作成することにしました。



開始する



まず、次のように、IDEのコミ​​ュニティバージョンのソースコードをダウンロードする必要があります。 かなりの時間がかかり、合計サイズは約1.6 GBです。

Gitリポジトリ:

git://git.jetbrains.org/idea/community.git







このアクションはオプションですが、非常に望ましいです。 ここでは、興味のあるクラスとメソッドのJavaドック、および完成したプラグインのソースコード(以下で説明するほとんどすべてのコード)を見つけます。



プロジェクト作成



一般に、プラグインの開発にはIntelliJ IDEAのみが必要です。 私は商用版を使用したので、すべてのアクションはさらに実行されます。 コミュニティエディションとの大きな違いはありません。

プラグインプロジェクトを作成します。ファイル->新規プロジェクト...

IntelliJ Platform Pluginを選択



Project SDKがない場合は、[新規...]をクリックして、Ideaがインストールされているフォルダーを指定します。

完了をクリックします。



Javaドックの追加



オプションのステップ。

IDEソースをダウンロードした後、[ファイル]-> [プロジェクト構造]をクリックし、[ソースパス]タブでソースへのパスを指定します。



これで、プラグインの開発とデバッグが簡単になります。

たとえば、次のとおりです。



になりました:





プラグインの構造



Ideaのプラグイン構造については、 こちらをご覧ください

Ideaのプラグインはすべて、META-INFフォルダーのplugin.xml構成ファイルと、プラグインを担当するコードを含む.jarファイルです。



plugin.xmlにいくつかのデータを入力する必要があります。 この段階では、完了するのは難しいことではありません。

plugin.xml
 <idea-plugin version="2"> <id>org.idea.plugin.duplicatelines</id> <name>Duplicate lines</name> <version>1.0</version> <vendor email="test@yourcompany.com">mobileDeveloper</vendor> <description><![CDATA[ Plugin for intellij idea to allow copy lines<br> and block of code like Eclipse IDE (Ctrl+Alt+Up and Ctrl+Alt+Down). ]]></description> <idea-version since-build="107.105"/> <actions></actions> <extensions defaultExtensionNs="com.intellij"> <!-- Add your extensions here --> </extensions> </idea-plugin>
      
      







アクション



アイデアは、いわゆるアクションシステムを実行します。 プラグインは、アクションをメニュー、ツールバーなどに追加できます。 アクションはグループに編成され、グループには他のグループが含まれる場合があります。 各アクションには一意の識別子があります。 ほとんどの標準識別子はIdeActions.javaファイルで定義されてます



Actionは、抽象AnActionクラスを継承する通常のJavaクラスです。 より具体的なEditorAction



から継承します。

グラフからアクションを作成できます。 インターフェース:pr。 パッケージ上のマウス->新規->アクション:



必要なグループを選択したら、必要に応じて、新しいアクションのキーの組み合わせを設定できますAnAction



クラスが作成され、plugin.xmlで、Actionクラスの説明が<actions />セクションに追加されます。

ActionクラスにCopyLineUpActionという名前を付けましょう。

これで、plugin.xmlファイルのタグ内に次のコードが含まれます。

アクションの説明
 <actions> <action id="CopyLineUpAction" class="org.idea.plugin.duplicatelines.CopyLineUpAction" text="Copy line(s) up." description="Copy line(s) up."> <add-to-group group-id="EditorActions" anchor="last"/> <keyboard-shortcut first-keystroke="control alt UP" keymap="$default"/> </action> </actions>
      
      







デフォルトのキーボードショートカットCtrl + Alt + Upが定義されていることに注意してください。 標準のEclipseの組み合わせを使用しました。 私はそれに慣れました。 アイデアの設定では、この組み合わせを再定義できます。



コード



guiを使用してActionを作成した場合、 CopyLineUpAction



クラスは指定されたパッケージに既に存在します。それ以外の場合は、手動で作成する必要があります。

アクションのロジックは非常に単純です。キーの組み合わせを押して、コピーしたテキストを決定し、このテキストを現在の行の上に貼り付けて、コピーしたブロックの先頭にカーソルを移動します。

実際、CopyLineUpActionコード自体は少しですが、私の意見では、十分に明確です。 Actionクラスには、パラメーターなしのコンストラクター(既定のコンストラクター)を含める必要があることのみを追加します。

CodeLineUpAction.java
 package org.idea.plugin.duplicatelines; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.editor.*; import com.intellij.openapi.editor.actionSystem.EditorAction; import com.intellij.openapi.editor.actionSystem.EditorActionHandler; import com.intellij.openapi.editor.actionSystem.EditorWriteActionHandler; import com.intellij.openapi.util.TextRange; public class CopyLineUpAction extends EditorAction { public CopyLineUpAction(EditorActionHandler defaultHandler) { super(defaultHandler); } public CopyLineUpAction() { this(new UpHandler()); } private static class UpHandler extends EditorWriteActionHandler { private UpHandler() { } @Override public void executeWriteAction(Editor editor, DataContext dataContext) { Document document = editor.getDocument(); if (editor == null || document == null || !document.isWritable()) { return; } // CaretModel used to find caret position CaretModel caretModel = editor.getCaretModel(); // SelectionModel used to find selection ranges SelectionModel selectionModel = editor.getSelectionModel(); // get the range of the selected characters TextRange charsRange = new TextRange(selectionModel.getSelectionStart(), selectionModel.getSelectionEnd()); // get the range of the selected lines (block of code) TextRange linesRange = new TextRange(document.getLineNumber(charsRange.getStartOffset()), document.getLineNumber(charsRange.getEndOffset())); // range of the duplicated string TextRange linesBlock = new TextRange(document.getLineStartOffset(linesRange.getStartOffset()), document.getLineEndOffset(linesRange.getEndOffset())); // get the string to duplicate String duplicatedString = document.getText().substring(linesBlock.getStartOffset(), linesBlock.getEndOffset()); duplicatedString += "\n"; // insert new duplicated string into the document document.insertString(linesBlock.getStartOffset(), duplicatedString); // select duplicated block editor.getSelectionModel().setSelection(linesBlock.getStartOffset(), linesBlock.getStartOffset()); // move cursor to the start of copied block caretModel.moveToOffset(linesBlock.getStartOffset()); editor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE); } } }
      
      









デバッグ



IdeaのJavaアプリケーションと同じように、新しく作成されたプラグインをデバッグできますが、唯一の違いは、実行/デバッグ構成->新規構成の追加ウィンドウで、プラグインを指定する必要があります。 実行/デバッグを選択すると、プラグインがすでにインストールされた状態で、Ideaの新しいコピーが起動します。

スクリーンショット








プラグインの組み立てとインストール



プラグインをビルドするには、メニューから[ビルド]-> [デプロイメント用のプラグインモジュール 'プラグイン名'の準備]を選択します。 .jarファイルがプロジェクトディレクトリに作成されます。

プラグインのインストールは、ファイル->設定...-> IDE設定->プラグイン->ディスクからプラグインをインストール...

キーマップ設定では、次の行が表示されます。



確認して、新しい機能をお楽しみください。



更新しました。 自己記述Range



をcomに置き換えました。 intellij.openapi.util.TextRange



、ヒントenDalに感謝



便利なリンク



ソースへのリンク

プラグイン開発ドキュメント

アイデアプラグインチュートリアル

オープンAPIとプラグイン開発 -ここでは、Ideaのプラグインに関する多くの質問に対する答えを見つけることができます。



All Articles