MPS 2018.3の新機能

BaseLanguage

コンセプトのオーバーライド済み/実装済みアイコン

MPSはコンセプトにオーバーライド済み/実装済みアイコンを付け、現在のコンセプトのスーパーコンセプトやサブコンセプトに移動しやすくしています。

BaseLanguageクラス用のカスタムパッケージ

これまで長い間、生成されたクラスのJavaパッケージは、含まれているモデルの名前で管理するしかありませんでした。 しかし、新しい分類子のプロパティ 'packageName' を使用すれば、生成したクラスのJavaパッケージを管理することができます。 このプロパティはルート分類子でも使用できます。

BaseLanguage拡張機能向けの新しい生成ファシリティ

BaseLanguageは常に多数の拡張機能でカスタマイズすることが想定されていました。 しかし、一部の拡張機能では適切なジェネレータの実装が困難な場合があります。 今回、BaseLanguageで複数の新しい生成時間のコンセプトを提供し、拡張機能のジェネレータを書きやすくしました。

Lvalue式の生成

Lvalue式は値で読み取り、または書き込み可能な変数に評価されます。 場合によっては、Lvalue式の生成が困難な場合があります。なぜなら、その式が使用されているコンテキストの種類に依存している可能性があるからです。 今回、新しい 'generic lvalue-expression' 生成時間のコンセプトを利用してジェネレータを簡単に、かつコンテキストに沿って作成できるようになりました。

幸いにも新バージョンでは、任意のlvalue式を '@byRef' 式でラップすることができます。 BaseLanguageジェネレータはその後、ラップされた式を 'Reference <T>' 型の式に変換し、ラップされた変数にget操作やset操作を実行できるようにします。

これらの新しく導入された生成時間のコンセプト両方に関する詳細は、こちらの記事をお読みください。

Lvalueの参照への変換

一部の式は他のLvalue式を集約し、集約した式により生成された変数(追加代入、インクリメント、getなどの式)で複合操作を行います。 かつてはこのような構文に適切なジェネレータを書くのが困難であったため、このようなセマンティクスを持つ新しい式を導入するのは不可能でした。

BaseLanguageでのdefaultメソッドのサポート

MPSバージョン2018.3では、BaseLanguageのインターフェースで 'default' メソッドを作成できます。 'default' キーワードはDefaultModifierコンセプトで実装されており、BaseLanguageのModifierコンセプトを拡張します。 DefaultModifierは、jetbrains.mps.baseLanguage.jdk8 言語に含まれています。 つまり、インターフェースで 'default' メソッドを作成するには、jdk8言語をインポートする必要があります。

ジェネレータ

ジェネレータ言語

$INCLUDE$ マクロは非推奨となったため、そのインスタンスを $CALL$ に置き換える移行が用意されています。 前者は引数付きのテンプレートをサポートしていなかったため、テンプレートを呼び出すために両方の仕組みを残す理由が見つかりませんでした。

$WEAVE$ マクロと織り込み(weaving)ルールで、引数付きのテンプレートを呼び出せるようになりました。 解釈されたテンプレートが「コンパイル済み」のジェネレータからの外部テンプレートを織り込むと、それ以上は解釈されなくなりますが、コンパイル済みのテンプレートコードは引き続き実行されます。 「コンパイル済みの」テンプレートが、解釈されたテンプレートを織り込めるようになりました。

Java reflectionは、QueriesGeneratedとしても知られるテンプレートモデルからのクエリの集合にアクセスする目的では使用されません。

UI/UX

MacBook Touch Bar

デフォルトのコンテキストにはアプリケーションの実行・ビルド・デバッグ用のコントロールが含まれており、新しい実行/デバッグ構成をすばやく選択または作成できます。 「Preferences | Appearance & Behavior | Menus and Toolbars」に、アクションをカスタマイズするための新しいTouch Barページを用意しています。

また、拡張することもできます! 必要なアクションを特別なMPS 'InterfaceGroup' に追加するだけで結構です。

ハイコントラストなUIテーマ

新しいハイコントラストテーマに対応しました。これは、「Preferences -> Appearance & Behavior」のThemeオプションからドロップダウンリストを使用してアクセスできます。

非推奨コードを発見する新しいアクション

Find Usages of Deprecatedアクションを使用すると、非推奨要素の使用箇所すべてを発見することができます。 発見された使用箇所のレポートでは、コードの削除が望ましいバージョンごとにエントリがグループ化されます。これにより、簡単に重大度を認識し、最初に削除すべきコードに優先順位を付けることができます。

オーバーライド済みまたは実装済みのbehaviorメソッド用の新しいアイコン

behaviorメソッドに新しいアイコンが割り当てられました。 以下のスクリーンショットに、選択したメソッドをオーバーライドまたは実装している getPresentation() メソッドの一覧を表示しています。また、ここからそれらの各メソッドに遷移することができます。

オーバーライド済み/実装済みアイコンのさらなる強化

オーバーライド済み/実装済みのコンセプト/クラス/メソッドのポップアップ表示が非同期になり、MPSがバックグラウンドで検索結果をポップアップに入力するようになりました。 また、検索対象のオブジェクトの名前を使用して結果を絞り込めるようになりました。

Finderの変更

MPSが配布しているFinderが更新され、最適化されました。 Finderを非同期に実行するには、特別なOnEachNodeFoundByExpressionを使用する必要があります。これは、検出された各ノードに対して実行されるコールバックを使用して単純にFinderを呼び出すものです。 その結果、コンセプトのFind Usagesオプションも変更されました。 Derived ConceptsおよびConcept Ancestorsでオプションが拡張されました。これらはそれぞれ、サブコンセプトとスーパーコンセプトのリストを生成します。 また、behaviorメソッドのFind Usageオプションが「Overridden Methods」および「Overriding Methods」で拡張されました。

特定エラーの抑制

エラー抑制は、これまでは型システムチェッカーにより不適切に検出されたエラーをMPSに表示しないようにするために何とか使える程度のツールでした。 インテンション 'Suppress error for node ...' を使用してノードに 'SuppressErrorAnnotation' 属性の注釈が付けられている場合、当該ノードやその子孫ノードにはエラーメッセージが表示されていませんでした。

このバージョンからは、特定のエラーメッセージのみを抑制できるようになりました。 エラーメッセージはノードとその子孫ノードすべてに対して抑制されますが、それ以外のメッセージは引き続き表示されます。 詳細は、ドキュメントをご覧ください。

エディタ

再利用可能なcell action maps

既存アクションマップのCell action mapは、importによって新しいものに再利用できます。

ビルド言語

ヒントとトリック

MPSデフォルトのヒントとトリックをカスタマイズできるようになりました。 これは、ビルドスクリプトの新しいヒントとトリックのコンセプトで実行できます。 ヒントは一般的なMPSの配布物から再利用したり、ディレクトリやソリューションからインポートしたりできます。

ヒントとトリックの言語

ソリューションからヒントとトリックをインポートするには、モデルを使用してソリューションを作成してから言語 jetbrains.mps.build.tips をおよび jetbrains.mps.core.xml を追加し、使用言語をモデル化してください。 その後、複数のヒントを作成可能なMPSTipsAndTricksコンセプトのインスタンスを作成できるようになります。 各ヒントはHTML形式のテキストで、画像を1つだけ含めることができます。

ビルドパッケージオプション

BuildMps_IdeaPluginのカスタムパッケージオプションは非推奨となったため、今後は使用しないようにしてください。 BuildMpsLayout_Plugin構文で直接パッケージングを選択できるようになりました。

Auto(自動)パッケージングを使用すると、提供されているすべての言語とソリューションがプラグインルートディレクトリ配下の 'languages' フォルダに移されます。 いっぽう、Manual(手動)パッケージの場合は開発者が自らプラグインのレイアウト全体を提供しなければなりません。

ビルド言語の新しい構文

MPSのantテストを実行する際に読み込むべき追加のIntelliJ IDEAプラグインを指定するため、ビルド言語のテストモジュール設定が拡張されました。

テスト環境内で特定のプラグインが必要な場合がありますが、MPSビルド言語エンジンがテストを含むモジュールからそれらを推測できませんでした。 このバージョンから、MPSでAntテストを実行中に必要なプラグインが存在することを確認できるようになりました。

その他

完全にコンパイルされたデータ型

完全に生成されたデータ型を作成しました。 データ型に関して生成されたすべての情報は、SModel APIから取得できます。

移行データを注釈として保存

MPSは、移行データを転送するための新しい仕組みに対応しました。この仕組みは、新たに作成した移行に強く推奨されます。 データを含む生成ノードは、データが関連する場所に十分に近い任意のノードに所属させる必要があります。

データを含むノードを生成する移行スクリプトでは、そのようなノードのコンセプトを宣言し、putData() 構文を使用して、そのような各注釈をモデルに挿入する必要があります。

データを含むノードの取得方法は、以前とまったく同じです。

競合の解消を改善

これまでは、ローカルとリモートの両方の変更を適用することはできませんでした。片方の変更を適用すると、もう一方の変更を単純に拒否することになっていたからです。

複数の役割を果たす子の場合、両方の変更を適用するのは実用的ではありません。 このため、競合の片方から変更を適用したあと、もう一方の競合している変更が変換され、変更グループの最後に追加されるようになりました。 これは、それらの変更を個別に適用または無視するために必要です。

競合箇所の左側のバージョンを適用したあと、右側の行を続けて適用または無視できます。