MPS 2019.2ヘルプ

カスタム持続クックブック

このドキュメントでは、MPSにバンドルされているxmlPersistenceサンプルを使用して、独自の永続化形式を定義、デプロイ、および使用する方法を説明します。

カスタム永続性とは何ですか?

MPSは通常、モデルを独自のXMLベースの形式で保存します。ただし、独自の形式でモデルファイルをロードまたは保存する場合があります。
たとえば、MPSを活用して既存の言語の1つを記述したいとします。たとえば、BaseLanguageはJavaの優れた説明です。そのような場合、その元の言語用に作成されたライブラリーは、MPS内からアクセスできる必要があります。このようなライブラリーのスタブモデルを作成するのに役立つのは、言語のスタブの側面です。次に、スタブモデルを使用してMPSの外部のコードを参照します。
別の便利な例-MPSで必要なのは、MPSエディターを使用して独自のDSLのファイルを編集するだけである場合、テキストエディターで編集できるようにモデルをテキスト形式で保存すると便利です。

サンプルプロジェクトを見回す

xmlPersistenceサンプルプロジェクトを開くと、3つの主なソリューションが得られ、それぞれがパズルの中で別のロールを果たします。

cp1

xmlPersistenceモジュールは実際の永続ロジックを定義し、xmlPersistence.buildにはビルドスクリプトが含まれ、xmlPersistence.ideaPluginにはカスタマイズされたプラグイン記述子が含まれます。通常、ビルドスクリプトはそれ自体で妥当なプラグイン記述子を提供しますが、今回は記述子をカスタマイズする必要があるため、明示的にプロジェクトに含めます。

永続化形式を定義する

xmlPersistenceモジュールは、永続化ロジックを実装します。MPSの永続性タイプはモデルごとのレベルで設定されます。単純化されたケースでは、サンプルは、jetbrains.mps.core.xml言語の単一のXMLFileルート要素に制限されているモデルをプレーンなXMLドキュメントに保存できます。実際のXML解析ロジックはXmlConverterクラスにありますが、XmlModelPersistenceクラスはMPSの内部動作にフックするための重要なインターフェースを実装しています。

cp2

getFormatTitle()メソッドは、ここで特にメンションする価値があります。返される文字列は、将来のユーザーにストレージ形式を表すために使用されるためです。

さらに、getFileExtension()メソッドは、.xmlファイルのカスタム永続性を登録します。

プラグイン ID

また、モジュールのモジュールプロパティーのアイデアプラグインタブでプラグイン IDが設定されていることにも注意してください。

cp3

識別子は、xmlPersistence.ideaPluginソリューション内のプラグイン(xml)記述子で宣言されたプラグイン識別子と一致する必要があります。IDEAプラグイン識別子をxmlPersistenceソリューションのプロパティーに追加して、ソリューションがプラグインの一部であり、プラグインのクラスを参照(または実行時にロード)できることを指定します。

MPSプラグインをビルドする

xmlPersistencePluginビルドスクリプトは、3つのモジュールをIDEA / MPSプラグインに圧縮する標準のビルドスクリプトです。

cp4

プラグイン記述子は、標準のプラグイン情報を提供し、jetbrains.mps.persistence.XmlModelPersistenceクラスをmps.ModelFactoryProvider。として登録します。これは、明示的なプラグイン記述子を提供する必要がある追加ビットです。

cp5

再構築後、ビルドスクリプトを実行し、プラグインを生成できるようになります。

cp6

これによりプラグインが作成され、ユーザーに配布できます。

IntelliJ IDEAプラグインをビルドする

IntelliJ IDEAプラグインの構築は、MPSプラグインの構築とそれほど違いはありません。あなただけのビルド・スクリプトでMPSからmpsPluginへの依存を変更し、MPSのIDEAのプラグインがデプロイされているどこにアーティファクトの場所を設定する必要があります。

cp7

プロジェクトをリビルドしてビルドスクリプトを実行した後、IDEAにデプロイするプラグインを取得します。

MPSでカスタム永続プラグインを使用する

生成されたプラグインをMPSにインストールした後、新しいモデルを作成するときに、XML ファイル永続性プロバイダーを指定できます。

cp8

XmlModelPersistence.createEmpty()メソッドで指定したように、新しいモデルにはjetbrains.mps.core.xml言語が使用言語として追加され、空のルートノードが追加されます。

cp9

cp10

ルートノードに入力するものは何でも、対応するxmlファイルにすぐに保持されます。基になるxmlファイルへの変更は、エディターで開くとモデルに反映されます。

cp11
cp12

IntelliJ IDEAでカスタム永続プラグインを使用する

IDEAプラグインは、MPSベースのプロジェクションエディターでXMLドキュメントを編集し、プレーンなxmlファイルに永続化することもできます。.xmlファイルはIDEAのXMLエディターに関連付けられているため、XMLファイルをクリックすると、デフォルトのIDEAのエディターが開きます。

cp20

ただし、sample.xmlファイルは構成済みのMPSモデルルートにあるため、MPSはカスタム永続プラグインを呼び出して、そこからモデルを構築します。Control + N / Cmd + Nを押して名前でクラスを開くと、サンプルモデルを開くオプションが表示されます。

cp21

次に、プロジェクションエディターで編集し、変更を元のxmlファイルに保持します。

cp22

プラグインのデバッグ

MPSは、MPSで直接、新鮮な永続化実装をすぐにテストしたい場合にも役立ちます: プラグインをデプロイするテンプレートから実行構成を作成するだけです:

cp13

次に、実行構成によってデプロイされるプラグインを指定します(プロジェクトを再構築してビルドスクリプトを再実行した後)。

cp14

最後に、構成を実行してプラグインをMPSにインストールします(MPSが再始動します)。

cp15

この手順の後、モデルのカスタム永続性プロバイダーを使用して、期待どおりに動作することをテストできます。

プラグインは、Windowsのホームフォルダーの.MPS3xサブディレクトリー、またはMacの$HOME / ライブラリー / Application Support / MPS3xにインストールされます。プラグインマネージャー UIを使用するか、プラグインを手動で削除することにより、プラグインをアンインストールまたは無効にすることができます。

最終更新日: 2019年8月30日