MPS 2019.2ヘルプ

実行設定

導入

実行構成により、ユーザーは自分の言語で書かれたプログラムの実行方法を定義できます。

既存の実行設定は、メインツールバーにある実行設定ボックスから実行できます。

runConfig1(英語)

メインメニューのファイル名を指定して実行メニュー項目

runConfig7(英語)

または実行/デバッグポップアップ(Alt + Shift + F10 / Alt + Shift + F9)を使用します。

runConfig6(英語)

実行構成は、ノード、モデル、モジュール、およびプロジェクトに対して実行/作成することもできます。例:JUnitの実行設定では、選択したプロジェクト、モジュール、またはモデル内のすべてのテストを実行できます。独自の実行構成に対してそのような動作を実装する方法については、生産者を参照してください。

runconfig3(英語)
runconfig4(英語)
runconfig5(英語)

まとめると、実行構成は次のことを定義します。

  • 作成段階では:
    • 構成名、キャプション、アイコン。

    • 構成の種類

    • ノード、モデル、モジュール、プロジェクトから構成を作成する方法。

  • 構成段階では:
    • 永続パラメータ

    • 永続パラメータ用のエディター。

    • 永続パラメータの妥当性のチェッカー

  • 実行段階では:
    • 実際に実行されるプロセス

    • すべてのタブ、アクションボタン、および実際のコンソールウィンドウを備えたコンソール。

    • この構成をデバッグするために必要なもの(可能な場合)

MPSの実行構成をサポートするために、以下の言語が導入されました。

  • jetbrains.mps.execution.common (共通言語) - 他の実行言語で利用されている概念を含みます。

  • jetbrains.mps.execution.settings (設定言語) - さまざまな設定エディターを定義するための言語。

  • jetbrains.mps.execution.commands (コマンド言語) - Javaからの呼び出しを処理します。

  • jetbrains.mps.execution.configurations (構成言語) - 実行構成定義。

設定

設定言語は設定エディターを作成し、互いに統合することを可能にします。設定エディターに必要なものは次のとおりです。

  • 編集するフィールド

  • フィールドの正当性の検証

  • エディターのUIコンポーネント。

  • UIコンポーネントから設定を適用したり、UIコンポーネント内の設定を保存状態にリセットしたりするための関数の適用/リセット。

  • 不要になったUIコンポーネントを破棄する関数

ご覧のとおり、設定にはUIコンポーネントがあります。通常、1つのUIコンポーネントが複数の設定インスタンスに対して作成されます。設定では、言語設定は通常「設定」と呼ばれ、そのUIコンポーネントは「エディター」と呼ばれます。

設定言語の主な概念は PersistentConfigurationTemplateです。次の節があります。

  • 永続プロパティー - このセクションでは、編集中の実際の設定について説明します。これらの設定を永続化し(xmlへの書き込み/ xmlからの読み取り)、クローンを作成したいため、それらの型には制限があります。それぞれのプロパティーは CloneableString、または任意のプリミティブ型のいずれかであるべきです。 template persistent propertyという特別な種類のプロパティーもありますが、それらについては後で説明します。

  • エディター -このセクションでは、構成のエディターについて説明します。次の関数を保持します: create , apply to , reset from , dispose。セクションは、エディターのいくつかのオブジェクトを格納するフィールドを定義することもできます。 create 関数は、スイングコンポーネント(エディターのメインUIコンポーネント)を返す必要があります。 apply to / reset from 関数は、パラメーターとして指定された構成との間でエディターの設定を適用またはリセットします。 dispose 関数はエディターを破棄します。

  • check - このセクションでは永続的なプロパティーが正しいかどうかチェックされます。一部のプロパティーが無効な場合は、report error ステートメントを使用できます。基本的に、この文は RuntimeConfigurationExceptionをスローします。

  • 追加の方法 - このセクションは設定で使用される方法のためのものです。基本的に、これらのメソッドは構成インスタンスメソッドです。

永続的なプロパティー

永続プロパティーは Cloneable または String のいずれか、または任意のプリミティブ型になることができると上記で説明しました。しかし、実行設定内で設定言語を使用する場合、それらのプロパティーはxml永続性もサポートする必要があります。文字列とプリミティブは通常どおり永続化されます。オブジェクトにとって、永続性はさらに複雑です。オブジェクトには、パブリックインスタンスフィールドと、setXXXおよびgetXXXメソッドを持つプロパティーの2種類のプロパティーが保持されています。永続プロパティーに複雑な型を使用したい場合は、すべての重要なフィールドをパブリックにするか、永続化したいものすべてにsetXXXおよびgetXXXメソッドを提供する必要があります。

構成を互いに統合する

設定言語の2つの基本機能の1つは、ある設定を別の設定に簡単に統合できることです。そのために template persistent properties が使われています。

テンプレート・パラメーター

設定言語の2番目の基本機能はテンプレートパラメータです。これらはjavaのコンストラクターパラメータに多少似ています。例:ノードを選択するための設定を作成する場合、彼はノードの概念を使用して設定をパラメータ化したいと思うかもしれません。この場合、概念は永続的なパラメータではありません。ユーザーによって選択されることはありません。これは構成作成時に指定されたパラメーターです。

コマンド

Commands言語を使用すると、コマンドラインから実行する方法でコードからプロセスを起動できます。言語の主な概念は CommandDeclarationです。宣言では、コマンドパラメータとこのパラメータで処理を開始する方法を指定します。また、コマンドはデバッガパラメータといくつかのユーティリティメソッドを持つことができます。

実行コマンドセクション

各コマンドは複数の execute セクションを持つことができます。このセクションのそれぞれはいくつかの実行パラメータを定義します。必須とオプションの2つのタイプのパラメーターがあります。オプションのパラメーターはデフォルト値を持つことができ、コマンドの開始時に省略することができますが、requiredはデフォルト値を持つことはできず、それらは必須です。コマンドの任意の2つの実行セクションには、必須パラメーターの(タイプごとに)異なるリストがなければなりません。ある実行セクションが別の実行セクションを呼び出すことができます。各実行セクションは、process または ProcessHandler 型のいずれかの値を返す必要があります。

ProcessBuilder式

コマンド実行セクションから処理を開始するには、ProcessBuilderExpression が使用されます。コマンド部分の簡単なリストです。各部分は、string または list<string>型の式で構成される ProcessBuilderPart、またはキー付きのパラメータを表す ProcessBuilderKeyPart(「-classpath /path/to/classes」など)です。 ProcessBuilderExpression から生成されたコードが呼び出されると、各部分はNULLまたは空であるかどうかがテストされ、そうでない場合は省略されます。その後、各部分はスペースで複数の部分に分割されます。そのため、コマンド部分にスペースを入れて、それを分割したくない場合(たとえば、スペースを含むファイルパスがある場合)、それを二重引用符( ")で囲む必要があります。作成されたプロセスのインスペクターで指定することができます。

デバッガ統合

コマンドをデバッガと統合するには、2つのことを指定する必要があります。

  • 統合する特定のデバッガ

  • プロセスのコマンドライン引数

デバッガを指定するには、DebuggerReferencejetbrains.mps.debug.apiLangdebugger 型の式)を使用して、特定のデバッガを参照します。デバッガ設定は、タイプ IDebuggerSettingsのオブジェクトでなければなりません。

構成

設定言語は実行設定を作成することを可能にします。実行構成を作成するには、onで RunConfiguration のインスタンス(基本的には設定言語からの構成)を作成し、それに RunConfigurationExecutor を提供する必要があります。この構成の種類を指定する RunConfigurationKind、ノード、モデル、モジュールからこの構成を作成する方法を指定する RunConfigurationProducer、および実行前に構成を準備する方法を指定する BeforeTask も必要になる場合があります。

執行者

Executorはノードであり、この実行構成に対してプロセスがどのように開始されるかを記述しています。ユーザーが入力した設定を受け取り、そこからプロセスを作成します。そのため、エグゼキュータのexecuteメソッドは、process型のインスタンスを返すべきです。これは StartProcessHandlerStatementを介して行われます。型 process または ProcessHandler を持つものはすべてそれに渡すことができます。 process は3つの異なる方法で作成できます。

  1. コマンド経由。

  2. ProcessBuilderExpression 経由(コマンド内でのみ使用することをお勧めします)。

  3. ProcessHandlerクラスの新しいインスタンスを作成します。この方法は、リモートデバッグ用の実行構成を作成していて、実際にプロセスを開始する必要がない場合など、上記の2つが適切ではない場合にのみ推奨されます。

エグゼキュータ自体は、次のセクションで構成されています。

  1. このexecutorの対象となる構成、およびその別名が指定されている"for" セクション。

  2. この設定を実行/デバッグする機能が指定されている "can" セクション。このエグゼキュータでコマンドが使用されていない場合は、ここに DebuggerConfiguration のインスタンスを指定する必要があります。

  3. Makeなど、この構成の実行前に実行できるタスクの呼び出しを含む「before」セクション。

  4. プロセス自体が作成される "execute" セクション

デバッガ統合

コマンドを使用してプロセスを開始する場合は、設定をデバッグ可能として指定すること以外は何もしないでください(executorで "debug" を選択することによって)。ただし、カスタムデバッガ統合が必要な場合は、コマンド宣言と同じ方法で行われます。

生産者

実行構成のプロデューサーは、さまざまなノードまたはノードのグループ、モデル、モジュール、またはプロジェクトに対してこの構成を作成する方法について説明します。これにより、各プロデューサのコンテキストメニューに選択された項目の実行を提案するアクションが表示されるため、実行構成をユーザーにとって簡単に見つけることができます。また、最初に編集ダイアログを見ずに何かを実行するデフォルトの方法を提供するため、これは設定を単純化します。

各プロデューサーは、作成する実行構成を1つ指定します。構成の生成元となるソースの種類ごとに、セクションからの複数の生成元を持つことができます。このソースは、node <>、nlist <>、model、module、projectのいずれかになります。ソースとは別に、セクションからの各プロデュースには、作成セクション(ソースでパラメータ化された概念関数)があります。この関数は、作成された実行設定を返すか、何らかの理由で作成できない場合はnullを返します。

便利な例

このセクションでは、実行構成の使用箇所に関するいくつかの役立つヒントと例を見つけることができます。

パーソンエディター

この例では、"Person" のエディターが作成されています。このエディターは、人物の2つのプロパティー、名前とメールアドレスを編集します。

personEditor

PersonEditorは、次のようにjavaコードから使用できます。

public class SettingsEditorDialogTest { public static void main(string[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { // create PersonEditor template configuration<PersonEditor> personEditor = new PersonEditor(); // create dialog SettingsEditorDialog dialog = new SettingsEditorDialog(personEditor); // show dialog dialog.setVisible(true); // print name and email, specified by user System.out.println("name = " + personEditor.myName); System.out.println("email = " + personEditor.myEmail); } }); } }

実行コマンド

これは、特定の workingDirectory内の programParameters を使用して特定の executable を開始する単純なコマンドの例です。

exec

タスクの前にgccでコンパイルする

これは、gcc コマンドでソースファイルのコンパイルを実行する BeforeTask の例です。また、実行構成実行プログラムの外部でコマンドを使用する方法も示しています。

compilegcc

これは単なる例にすぎないことに注意してください。実際のシナリオでは、たとえばコンパイル中にタスクに進行状況ウィンドウが表示されるはずです。

Javaエグゼキュータ

これはMPSからのJava実行設定のための実際のexecutorです。

java

Javaプロデューサー

これはMPSからのJava実行設定のプロデューサーです。

producer

ここでは、3つの「プロデュース」セクションを見ることができます。Java実行構成は、ここで ClassConcept , StaticMethodDeclaration または IMainClassのノードから作成されます。

javaクラスに生成されたノードの実行

mainメソッドを使ってjavaクラスに生成される概念のノードがあり、このノードをMPSから実行したいとしましょう。この場合、実行設定を作成する必要はありませんが、次の手順を実行する必要があります。

  1. 実行したいコンセプトは jetbrains.mps.execution.util 言語から IMainClass コンセプトを実行するべきです。ノードをいつ実行できるかを指定するには、isNodeRunnable メソッドをオーバーライドします。

  2. そのためにユニット情報を生成する必要があります。実行するクラス名を正しく特定するためにユニット情報が必要です。MPSドキュメントのデバッガー セクションで、すべてのトレース情報と同様に、ユニット情報についてさらに読むことができます。この確認を確実にするために、以下の条件の1つが満たされていることを確認してください。
    1. ノードから jetbrains.mps.baseLanguage から ClassConcept が生成されます。

    2. ノードはテキストに生成され(言語は生成に textGen アスペクトを使用します)、ノードの概念は jetbrains.mps.traceableから UnitConcept インターフェースを実装します。

    3. ノードは、3つの指定された条件のうちの1つが満たされるという概念に分類されます。

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