MPS 2023.3 ヘルプ

プラグイン

プラグインは、コードを MPS IDE 機能と統合する方法です。

jetbrains.mps.lang.plugin および jetbrains.mps.lang.plugin.standalone 言語は、プラグインで使用できるいくつかのルート概念を提供します。この章では、それらすべてについて説明します。

プラグインのインスタンス化

プラグインを開発している間、プラグインを保持するソリューションがあり、その効果を確認するために各変更の後に MPS を再起動する必要がないようにプラグインクラスを自動的に再ロード可能にします。開発フェーズを正しく設定するには、次の手順に従います。

  1. プラグイン用の新しいソリューションを作成する

  2. このソリューションで <solution_name> .plugin という名前のモデルを作成します

  3. jmlang.plugin および jmlang.plugin.standalone 言語をソリューションとモデルにインポートします

  4. モデルにルート StandalonePluginDescriptor を作成します (これは jmlang.plugin.standalone 言語から来ています)

  5. Java タブでソリューションのコンパイルとクラス読み込みをカスタマイズして、MPS に拡張機能を提供する通常の MPS モジュールにします。

    MPS_plugin0.png

    プラグインモデルを編集して、生成直後に現在の MPS インスタンスに適用された変更を確認できます。また、ソリューションを配布して、プラグインをユーザーに正常に機能させることもできます。

アクションとアクショングループ

アクションおよびアクショングループエンティティを使用して、MPS の任意のメニューにカスタムアクションを追加できます。

アクションは 1 つの具体的なアクションを表します。アクショングループは、他のグループや MPS グループ(メニュー自体を表す)に追加してポップアップメニューにまとめることを目的とした、アクションの構造化を目的としたアクションのリストです。動的に変化する内容を持つグループを作成することもできます。

既存のグループに新しいアクションを追加する方法

既存のグループに新しいアクションを追加するには、次のことを実行する必要があります。

  1. 行動を説明する

  2. 記述されたアクションはグループにまとめられるべきです

  3. これらのグループは既存のグループに追加する必要があります(MPS メニューに新しいアクションを追加するために事前定義された MPS グループなど)。

事前定義された MPS グループは jetbrains.mps.ide.actions モデルに保存されます。これは jetbrains.mps.lang.plugin 言語のアクセサーリモデルであるため、モデルに明示的にインポートする必要はありません。

アクション構造

アクションのプロパティ

名前 - アクションの名前。任意の名前を付けることができます。唯一の明らかな制約は、名前がモデルのスコープ内で一意である必要があることです。

ニーモニック - ニーモニックが指定されている場合、このアクションを含むグループが表示されると、alt + ニーモニックショートカットを介してアクションを使用できます。ニーモニック(指定されている場合)は、アクションのキャプションの文字の 1 つである必要があることに注意してください。ニーモニックは、アクションのキャプションに下線付きの記号として表示されます。

必要なアクセス - は、MPS がアクションに提供するアクセス制御を指定します。

  • none - アクセス制御は提供されず、最終的なロックはすべてアクションによって手動で実行する必要があります。このアクションは、UI をロックするリスクなしに UI 操作を実行できます。

  • 読み取り - 読み取りアクセスが許可されます。このアクションは、UI をロックするリスクなしに UI 操作を実行できます。

  • コマンド - MPS モデルのすべての操作はコマンド内で実行されます。コマンドは元に戻すリストの項目であるため (手動で制御するのではなく、MPS が自動的に実行します)、ユーザーはアクションの実行によってモデルに加えられた変更を元に戻すことができます。また、コマンドで実行されるすべてのコードには、モデルへの読み取り / 書き込みアクセス権があります。問題は、コマンド内からユーザーに視覚的なダイアログを表示すると、読み取り / 書き込みロックを保持したままブロックすることでデッドロックが発生する可能性があることです。アクションで UI を使用しない場合にのみ、このオプションを使用することをお勧めします。

  • エディターコマンド - 上記のオプションと同様に、アクションは取り消し可能なコマンドのコンテキストで実行され、読み取りおよび書き込みアクセスが許可されます。コマンドはエディターコンテキストから取得されるため、アクションのコンテキストパラメーターの 1 つとしてエディターコンテキストを指定する必要があります。

外部コマンドを実行 - (このオプションは、required access を優先して徐々に放棄する必要があります。true に設定すると、required access プロパティの設定をオーバーライドします) MPS モデルでのすべての操作は、コマンド内で実行されます。コマンドは元に戻すリストの項目であるため (手動で制御するのではなく、MPS が自動的に実行します)、ユーザーはアクションの実行によってモデルに加えられた変更を元に戻すことができます。また、コマンドで実行されるすべてのコードには、モデルへの読み取り / 書き込みアクセス権があります。問題は、コマンド内からユーザーに視覚的なダイアログを表示すると、読み取り / 書き込みロックを保持したままブロックすることでデッドロックが発生する可能性があることです。アクションで UI を使用しない場合にのみ、コマンドの外部実行オプションを false に設定することをお勧めします。それ以外の場合は、true に設定し、読み取りアクションとアクション内のコマンドステートメントを使用して適切な読み取り / 書き込みアクセスロックを手動で実行する必要があります。

MPS_plugin1.png

でも利用可能 - 現在のところ、これは "everywhere" にしか設定できません。つまり、アクションはコンテキスト内でのみ使用可能になるわけではなく、完了メニューから呼び出すことができますが、他のコンテキストでも呼び出すことができます。例: 何らかのアクションがエディターのコンテキストメニューグループに追加されたが、フォーカスが論理ビュー内にあるとき、すべてのエディターが閉じられたときにそれを利用可能にしたい場合は、"available in" も "everywhere" に設定する必要があります。

キャプション - メニューの動作を表す文字列

説明 - この文字列(指定されている場合)は、このアクションがアクティブなときにステータスバーに表示されます。(任意のメニューで選択)

アイコン - このアイコンは、すべてのメニューのアクションの近くに表示されます。アイコンファイルを選択するか、DSL を使用してアイコンを記述することができます。アイコンファイルは言語の近くに配置する必要があることに注意してください (アイコンファイルはイメージとしてではなく、言語のルートからの相対パスとして保存されるため)。

ビルドパラメーター

各アクションは、構築パラメーターを使用して構築時にパラメーター化できます。これは、アクションの動作を決定する任意のデータです。構成パラメーターを使用する単一のアクションは、複数の異なる動作を表すことができます。アクションを管理しキーマップを処理するために、MPS はアクションによって表されるそれぞれの具体的な振る舞いのためのユニークな識別子を必要とします。そのため、toString 関数が各構築パラメーターに対して導入されました(インスペクタで確認できます)。プリミティブ型の場合、この関数を明示的に指定する必要はありません - MPS は自動的にそれを行うことができます。より複雑なパラメーターの場合は、アクションの具体的な動作ごとに toString() 関数から返される値のセットが異なるように、この関数を明示的に記述する必要があります。

動作制御を有効 / 無効にする

無効な状態でもアクションを表示したい場合(現在のコンテキストでアクションが適用されない場合)は常に見えるフラグ - 、これを true に設定します。それ以外の場合は false に設定します。

コンテキストパラメーター - は、アクションを実行できるようにするために現在のコンテキストにどの項目が存在する必要があるかを指定します。これらは、アクションのメソッドが実行される前にコンテキストから抽出されます。コンテキストパラメーターには、関連付けられた条件があります。requiredcustom および d id は、最も頻繁に使用される 3 つです。一部の必須パラメーターが抽出されなかった場合、アクション状態は無効に設定され、isApplicable/update/execute メソッドは実行されません。必要なアクションパラメーターがすべて抽出されている場合は、その値をすべてのアクションメソッドで使用できます。カスタムコンテキストパラメーターでは、提供された関数を使用して、コンテキストパラメーターが必須かどうかをケースバイケースで決定するオプションが提供されます。is 条件は、取得したオブジェクトを指定されたクラスに対してテストします。

アクションパラメーターには、単純アクションパラメーターと複雑アクションパラメーターの 2 種類があります。

  • シンプルなアクションパラメーター (ActionDataParameterDeclaration で表されます) を使用すると、現在のデータコンテキストから利用可能なすべてのデータを簡単に抽出できます。データは「キーによって」提供されるため、宣言で名前キーを指定する必要があります。パラメーターの型は自動的に設定されます。

  • 複雑なアクションパラメーター(ActionParameterDeclaration で表される)が導入され、頻繁に使用されるチェックと型キャストが実行されました。現在、この型のコンテキストパラメーターに使用できる型は 3 つあります。

    • 指定された概念のインスタンスで現在選択されているノード、- ノード <概念>。選択したノードがこの概念のインスタンスでない場合、アクションは有効になりません。

    • nlist <概念> - 現在選択されたノード。すべてのノードがコンセプトのインスタンスであることがチェックされます(指定されている場合)。ノード <概念> と同様に、チェックが失敗した場合、アクションは有効になりません。

    • モデル - 現在のモデルが選択されたノードを保持しています

該当 / 更新あり - このメソッドは、コンテキストパラメーターと連携して、アクションの有効 / 無効状態を制御します。次の 2 つのオプションのいずれかを選択できます。

  • isApplicable メソッドはアクションの新しい状態を返します

  • update メソッドは、状態を手動で更新するように設計されています。event.getPresentation() を介してアクションのプレゼンテーションにアクセスすることにより、アクションのプロパティ(キャプション、アイコンなど)を更新することもできます。アクションで setEnabledState() メソッドを呼び出して、手動で有効または無効にします。

これらのメソッドは、必要なすべてのコンテキストパラメーターがコンテキストから正常に抽出された場合にのみ実行されます。

注: このキーワードは現在のアクションを参照します。action<...> を使用して、コードから表示されているアクションを取得します。

実行 - このメソッドは、アクションが実行されるときに実行されます。同じイベントに対するアクションの更新メソッドがアクションをアクティブ状態のままにし(または isApplicabletrue を返した)、必要なすべてのコンテキストパラメーターが現在のコンテキストに存在し、入力された場合にのみ実行されることが保証されます。

メソッド - このセクションでは、ユーティリティメソッドを宣言できます。

グループ構成

グループは一連のアクションを記述し、他のグループを現在のグループで変更する方法に関する情報を提供します。

プレゼンテーション

お名前 - グループの名前。好きな名前を付けることができます。唯一の明らかな制約は、名前がモデルの範囲内で一意でなければならないことです。

これが当てはまる場合、ポップアップです - はポップアップメニューを表し、そうでない場合はアクションのリストを表します。

「is popup」が正しい場合

  • ポップアップメニューの名前として表示されるキャプション - 文字列

  • ニーモニック - ニーモニックが指定されている場合、ポップアップメニューは、それを含むグループが表示されたときに、alt + ニーモニックショートカットを介して使用できます。 ニーモニック(指定されている場合)は、caption の文字の 1 つでなければならないことに注意してください。ニーモニックは、ポップアップメニューのキャプションに下線付きの記号として表示されます。

  • 無効にすると見えなくなります - が true に設定されている場合、有効なアクションがないか、update() メソッドで手動で無効にされている場合、グループは表示されません。アクショングループで enable()/disable() メソッドを呼び出して、手動で有効または無効にします。

内容

グループの内容を説明する 3 つの可能性があります。

要素リスト - これは、アクション、グループ、ラベルの単なる静的リストです(変更を参照)。利用可能な要素は以下のとおりです。

  • -> 名前 - アンカー。アンカーは、あるグループを別のグループで変更するために使用されます。詳細については、「ステートメントを追加」セクションを参照してください。

  • <---> - セパレーター

  • ActionName[parameters] - アクション

ビルド - この選択肢はグループで使用されるべきで、その内容は静的ですが、いくつかの初期条件に依存します - グループは一度構築され、それ以降は更新されません。ビルドブロック内に要素を追加するには、add ステートメントを使用します。

更新 - これは動的に変化するグループに適用されます。グループはレンダリングされる直前に毎回更新されます。

修正とラベル

位置 <位置> で <グループ> に追加 - このステートメントは、現在のグループを指定された位置の <group> に追加します。すべてのグループには <default> 位置があり、現在のグループをターゲットグループの最後に追加するように指示します。一部のグループは、いわゆるアンカーを自分たちに追加することで、追加の位置を提供できます。アンカーの追加については、コンテンツセクションで説明しています。アンカー自体は非表示であり、グループを挿入できる位置を表します。

登録されたグループにアクセスするために jetbrains.mps.lang.plugin 言語で使用できる特定の式(actionGroup < グループ > 式)があります。

内部です

このオプションはインスペクターで指定されます。「内部」としてマークされたグループは、MPS が「内部モード」で実行されている場合にのみ表示されます。

plugin.xml 経由で登録する

このオプションはインスペクターで指定されます。このフラグは、グループのアクションが plugin.xml ファイルを介して静的に登録されるか、グループのクラスを (再) ロードするときに動的に登録されるかを制御します。true に設定すると、グループをリストする (別名登録する) モデル内に IdeaComponent.xml (IdeaConfigurationXml の概念) のインスタンスを提供する必要があります。

IdeaComponent.xml

IntelliJ プラットフォームの要求に応じて、生成されたコンポーネント .xml ファイルを通じて、グループ、ブートストラップグループ、およびキーマップを静的に登録します。

Bootstrap グループ

Bootstrap グループは、MPS の外部で定義されたアクショングループ(たとえば、IDEA または一部の IDEA プラグインによって提供されたグループ)を操作する方法です。

この場合、ブートストラップグループは MPS で定義され、その内部 ID は外部グループの ID に設定されます。これを行った後、通常のブートストラップグループと同じようにブートストラップグループを操作できます。グループに挿入したり、その逆を行ったりできます。

通常のユーザーがブートストラップグループを使用する必要はめったにありません。

インスペクターplugin.xml オプションによる登録は、通常のグループの場合と同じ意味を持ち、上で説明されています。

MacOS で Bar サポートをタッチ

カスタムユーザーアクションアクショングループは、事前定義された InterfaceGroups の 1 つに追加することにより、タッチバーに追加できます。

  • IDEATouchBarDefault

  • IDEATouchBarDefault_alt

  • IDEATouchBarDefault_cmd

  • IDEATouchBarDefault_cmd_alt

  • IDEATouchBarDefault_shift

  • IDEATouchBarDebug

進行状況インジケーターの表示

長期にわたるアクションは、そのアクティビティと進捗状況をユーザーに示す必要があります。進行状況バー、キャンセルの許可、バックグラウンドでの実行アクションの有効化の詳細については、進捗インジケーターページを参照してください。

キーマップの変更

KeymapChangesDeclaration の概念により、プラグインは主要なショートカットを個々のアクションに割り当て、ショートカットスキームにグループ化できます。

どのアクションにも、複数のキーボードショートカットを設定できます。これは、KeyMapChanges コンセプトを使用して指定できます。複数の「インスタンス」(パラメーター値ごとに 1 つのインスタンス) を持つパラメーター化されたアクションの場合、異なるパラメーター値に対して異なるショートカットを返す関数を指定できます。

MPS には、いくつかの「デフォルトのキーマップ」があり、設定 -> キーマップで確認できます。キーマップのセクションでは、KeyMapChanges 定義が適用されるキーマップを指定できます。たとえば、MacOS と Windows キーマップで同じアクションに異なるショートカットを設定できます。

プラグインによって追加されたすべてのアクションは設定 - > キーマップ設定 - > メニューとツールバーに表示されます。つまり、どのユーザーもすべての MPS アクションに使用されるショートカットをカスタマイズできます。

MPS_plugin2.png


MPS_plugin3.png

A キーマップの変更は、モデル内で一意の名前を指定する必要があり、それが変更されているキーマップを指定する(またはすべてのキーマップを変更するには、デフォルト)、次に 1 を持つべきアクションにキーストロークを割り当てる必要があります。キーストロークは、直接指定されたキーストロークを使用した SimpleShortcutChange、またはパラメーター化されたアクションを処理する機能を提供する ParametrizedShortcutChange のいずれかです。

インスペクターplugin.xml オプションによる登録は、通常のグループの場合と同じ意味を持ち、上で説明されています。

NonDumbAwareActions

アクションでプラットフォームインデックスを使用している場合(これは非常にまれです)、NonDumbAwareActions に追加します。これらのアクションは、インデックスの作成中に自動的に無効になります。

エディタータブ

概念宣言を見れば、確かにエディターの下部にあるタブに気づくでしょう。あなたの言語からの概念に同じ機能を追加することができます。

これらのタブの意味は何でしょうか ? 答えは非常に簡単です。これらのタブには、「ベース」ノードのいくつかの側面のエディターが含まれています。各タブは、単一タブ (つまり、エディタータブなど、1 つのノードのみが表示されます) または複数タブ (ベースノードのこの側面に対して複数のノードを作成できる場合、たとえば型システムタブを参照) のいずれかになります。

ノードのエディターはどのように作成されますか? いくつかのノードを開くとき、N と呼びます。MPS は N の「ベース」ノードを見つけようとします。ベースノードがない場合、MPS は選択したノードのエディターを開くだけです。ノードが見つかった場合(B と呼ぶ)、MPS はそのノードのいくつかのタブを開き、いくつかの従属ノードのエディターを含みます。次に、N のタブを選択し、B に対応する上部のアイコンとキャプションを設定します。

タブ付きエディターを作成するときには、実際に次の規則を指定します。

  • ベースノードを見つける

  • 下位ノードを見つける

  • オプションで従属ノード作成のアルゴリズム

要求された基本概念に一致するタブが、それぞれの順序制約セクションで指定されている相対順序規則に従って表示および編成されています。

エディタータブの構造

お名前 - ルールの名前。好きな名前を付けることができます。唯一の明らかな制約は、名前がモデルの範囲内で一意でなければならないことです。

アイコン - このアイコンはタブのヘッダーに表示されます。アイコンファイルを選択するか、DSL を使用してアイコンを記述することができます。アイコンファイルは言語の近くに配置する必要があることに注意してください (アイコンファイルはイメージとしてではなく、言語のルートからの相対パスとして保存されるため)。

ショートカット文字 - キーボードを使用してタブにすばやく移動するための文字

順序の制約 - Order コンセプトのインスタンス。順序は、現在のタブが他のタブと比較して表示される順序を指定します。外部オーダーを参照するか、インプレースで指定することができます。

基本ノードの概念 - このためのベースノードの概念とすべての関連タブ。

ベースノード - これは、既知のノードを指定してベースノードを検索するためのルールです。ベースノードが見つからない場合、またはこの TabbedEditor を適用できない場合は、null を返す必要があります。

該当します - 指定されたベースノードにタブを使用できるかどうかを示します

getNode/getNodes - はこのタブで編集するノードまたはノードのリストを返します

command - ノードの作成をコマンドとして実行するかどうか、つまり元に戻すことができるかどうか、ユーザーとの追加の UI インタラクションを使用しないかどうかを示します。

getConcepts - このタブを編集に使用できるノードの概念を返します

作成 - が指定されている場合、これはユーザーがこのタブから新しいノードを作成するように要求したときに実行されます。要求された概念とベースノードがパラメーターとして与えられます。

順序

順序ルートの概念を使用すると、エディタータブの順序付けルールを作成できます。詳細については、上の章を参照してください。

ツール

ツールは、グラフィック表示を備え、特定のタスクを実行することを目的としたツールです。例: 使用状況ビュー、Todo ビューアー、モデルおよびモジュールの依存関係ビューアーはすべてツールです。MPS にはツールの豊富な UI サポートがあり、ウィンドウの端から端へドラッグアンドドロップでツールを移動したり、非表示にしたり表示したり、その他多くのアクションを実行したりできます。

ツールは「プロジェクトごとに」作成されます。それらはクラスの再ロード時に初期化 / 破棄されます (言語生成後、"reload all" アクションなど)

ツール構造

名前 - ツールの名前。任意の名前を付けることができます。唯一の明らかな制約は、名前がモデルのスコープ内で一意である必要があることです。

キャプション - この文字列はツールのヘッダーとツールペインのツールのボタンに表示されます

番号 - を指定すると、alt + number がこのツールを表示するためのショートカットになります (利用可能な場合)

アイコン - ツールのボタンに表示されるアイコン。アイコンファイルを選択するか、DSL を使用してアイコンを記述することができます。アイコンファイルは言語の近くに配置する必要があることに注意してください (アイコンファイルはイメージとしてではなく、言語のルートからの相対パスとして保存されるため)。

位置 - 上 / 下 / 左 / 右の上にツールを追加して目的の MPS ツールバーに追加します

その中に - はここでツールインスタンスを初期化します

処分 - はすべてのツールリソースをここに配置します

getComponent - は、ツールのウィンドウ内に表示するために Swing コンポーネント(JComponent を拡張するクラスのインスタンス)を返す必要があります。ツールにタブを作成する予定で、IDEA のツールフレームワークに精通している場合は、IDEA のタブのサポートを使用することをお勧めします。このフレームワークを使用すると、タブの機能と UI が大幅に向上します。

フィールドとメソッド - の通常のフィールドとメソッド。ツールや外部コードで使用できます。

ツール操作

あるプロジェクトのツールに簡単にアクセスするための操作(GetToolInProjectOperation の概念)を追加しました。project.tool <toolName> として使用します。ここで、project は IDEA プロジェクトです。jetbrains.mps.lang.plugin.standalone 言語をインポートして使用できるようにすることを忘れないでください。

例: TODO ツールウィンドウを開くには、アクションで次のコードを使用します。

TODOToolOpen.png

タブ付きツール

ツールウィンドウと同じですが、さらに複数のタブを含めることができます

ツール構造

名前 - ツールの名前。任意の名前を付けることができます。唯一の明らかな制約は、名前がモデルのスコープ内で一意である必要があることです。

キャプション - この文字列はツールのヘッダーとツールペインのツールのボタンに表示されます

番号 - を指定すると、alt + number がこのツールを表示するためのショートカットになります (利用可能な場合)

アイコン - ツールのボタンに表示されるアイコン。アイコンファイルを選択するか、DSL を使用してアイコンを記述することができます。アイコンファイルは言語の近くに配置する必要があることに注意してください (アイコンファイルはイメージとしてではなく、言語のルートからの相対パスとして保存されるため)。

位置 - 上 / 下 / 左 / 右の上にツールを追加して目的の MPS ツールバーに追加します

その中に - はここでツールインスタンスを初期化します

処分 - はすべてのツールリソースをここに配置します

フィールドとメソッド - の通常のフィールドとメソッド。ツールや外部コードで使用できます。

設定コンポーネント

MPS スタートアップの間にいくつかの設定(たとえばあなたのツールの設定)を編集して保存したいことがあるかもしれません。これらの目的のために、環境設定コンポーネントを導入しました。

各設定コンポーネントは、いくつかの設定ページといくつかの永続フィールドを含みます。設定ページは、ユーザー設定を編集するためのダイアログです。それらはファイル - > 設定を通してアクセス可能です。

永続フィールドは、プロジェクトが閉じられたときに .iws ファイルに保存され、プロジェクトが開いたときにそれらから復元されます。保存プロセスはリフレクションを使用するため、ほとんどの場合、シリアル化 / 逆シリアル化について気にする必要はありません。

設定コンポーネントの構造

名前 - コンポーネント名好きな名前を付けることができます。唯一の明らかな制約は、名前がモデルの範囲内で一意でなければならないことです。

fields - これらは永続的なフィールドです。それらは読み込みとページ作成の前に 初期化されるため、それらの値はそれらがアクセスされることができるあらゆる瞬間に正しいでしょう。デフォルト値も指定できます。

/ 書く前に - 読んだ後、これらのブロックはカスタムのシリアライゼーションと環境設定の適用 / 収集に使用されます。これらは対応する環境設定ページを持ちません。(たとえば工具寸法)

pages - 設定ページ

設定ページの構造

名前 - 設定ページでキャプションとして使用される文字列。名前はモデル内で一意である必要があります。

コンポーネント - 設定を編集するための UI コンポーネント (Java Swing クラス)。

icon - 設定ウィンドウに表示するアイコン。アイコンのサイズは最大 32x32 です。このアイコンは現在、MPS では使用されていません。

help topic - この設定ページのヘルプとして機能するドキュメントページの補助 ID。これは、JetBrains ドキュメント化システムが使用されている場合にのみ有効です。

reset - このメソッドが呼び出されたときに UI コンポーネントの設定値をリセットします。

commit - このメソッドでは、設定は UI コンポーネントから収集され、使用されている場所にコミットされます。

isModified - このメソッドが false を返すと、コミットは実行されません。これは一般的に、長期間コミット方法を使う設定ページに役立ちます。

PreferenceComponent 式

あるプロジェクトの PreferenceComponent に単純にアクセスするための式を追加しました。この概念は GetPreferencesComponentInProjectOperation という名前で、project.preferenceComponent<componentName> としてアクセスできます。ここで、project は IDEA プロジェクトです。これを使用するには、jetbrains.mps.lang.plugin.standalone 言語をインポートすることを忘れないでください。

カスタムプラグインパーツ (ProjectPlugin、ApplicationPlugin)

カスタムプラグインパーツは、プラグインの初期化 / 破棄時に実行されるカスタムアクションです。それらはプラグインとまったく同じように動作します。あなたの言語のために好きなだけカスタムプラグインを作成することができます。カスタムプラグインには、プロジェクトとアプリケーションのカスタムプラグインの 2 種類があります。プロジェクトカスタムプラグインはプロジェクトごとに 1 回インスタンス化されますが、アプリケーションカスタムプラグインはアプリケーションごとに 1 回インスタンス化されるため、プロジェクトパラメーターはありません。

IdeaInitializerDescriptor

IntelliJ プラットフォームにプラグインを登録するための plugin.xml ファイルを指定する便利な方法を提供します。

IdeaInitDesc1.png