MPS 2023.2 では BaseLanguage のラムダ生成、JUnit 5 のサポート、型システムの推論ルールのオーバーライドなどが改善されています。
MPS のテストが JUnit 5 テストとして生成されるようになりました。 JUnit 4 のサポートも引き続き限定的に提供されています。
BTestCase
NodeTestCase
EditorTestCase
MigrationTestCase
PatternTest
GeneratorTest
以下の要素をサポートする新しい launchtests
Ant タスクを使用できます。
library
macro
プラグイン
testmodules
JUnit 3 を除くすべてのテストアーティファクトの実行をサポートし、テスト構成ビルド部分の新しいターゲットとして機能します。
この API を使用すると、MPS で使用できるテストの種類を拡張し、テストセッションにリスナーを実装できます。
MPS テストプラットフォーム API には、以下の jetbrains.mps.baseLanguage.unitTest.platform
のクラスが含まれます。
TestPlatform | MPS テストプラットフォームの API を定義します。 |
TestDescriptor | MPS テストプラットフォームの単一のテストを表します。 |
TestSource | SNode などのテストソースを表します。 |
TestSession | テストセッションを表します。 |
TestDiscoveryParticipant | テスト検出プロセスの関連付けを有効にします。 |
TestSessionListener | テストセッションから通知を受け取れるようにします。 |
JUnit 5 ではカスタムエンジンで実行されるテストの実行がサポートされるようになりました。 このようなエンジンのよくある例には、プロパティベースの jqwik テストフレームワークがあります。
スーパーコンセプトで定義されているルールを型システムルールでオーバーライドできる機能が最近追加されました。 これは、サブコンセプトがスーパーコンセプトを含んでいる言語を拡張する言語で定義されている場合に可能です。 この機能は推論
ルールでサポートされています。
MPS の前のアップデートでは、メソッド参照と Java ラムダへのクロージャの変換のサポートが強化されました。 このバージョンでは多数の小規模な機能とバグ修正により、このサポートの範囲を拡張しています。
コレクション演算で使用されるクロージャが Java のラムダとして生成されるようになりました。これは当初、Java インターフェースを使用する通常の関数呼び出しでのみ可能となっていました。 下位互換性を維持するため、以下の場合は引き続きクロージャは匿名クラスとして生成されます。
この対応により、全体的に生成されるコードの品質が改善されます。ラムダは可読性が高いだけでなく、誤って生成される可能性が比較的低いためです。 一方、MPS では raw 型を使った機能が許可されていますが、Java ではそのようなインスタンスの検出がまだ困難であるため、許可されていません。 そのため、raw 型が使用されている場所では生成に失敗する可能性があります。
従来のクロージャパラメーターには ~param
、<type> param
、param
、var param
といったさまざまな形式がありました。 型を省略してパラメーターを追加するのは面倒でした。 このリリースでは ~param
形式の使用を廃止し、単純な型なしのパラメーターを使用するようにしました。現在は、この形式がデフォルトで挿入されるようになっています。 また、クロージャが関数呼び出しで挿入される場合、必要な関数の型のデフォルトパラメーターが挿入されます。 最後になりますが、ソースコードで型が省略されている場合は生成されるパラメーターでも型が省略されるようになります。これにより、コンパイルの品質がさらに向上します。
MPS ではシーケンスが広範に使用されていますが、Java ストリームを使用する必要がある場合もあります。 このアップデートでは推論を改善することで、Stream API が使用する複合メソッドに関連する型システムの問題を緩和しています。 ストリームとシーケンスをブリッジする以下の 2 つの演算を追加しました。
<stream>.asSequence
: シーケンスをストリームに変換します。<sequence>.toStream(parallel=…)
: 上記と逆の操作を行います。これにより、使用する API を選択できるだけでなく、シーケンスのメリット(繰り返しが可能)とストリームのメリット(各種のコレクター、より多くの演算子)を組み合わせることが可能です。
BaseLanguage
コンストラクターにはすでにダイアモンド演算子(new ArrayList<>()
)が導入されていましたが、コレクションクリエーターはこの改善の対象外となっていました。 このアップデートでは以下のように新しいコレクションから型パラメーターを省略し、コーディングプロセスを単純化できるようになりました。
var myList = new arraylist<> {myInitialValue}
map<int, string> myMap = new hashmap<>
また、コレクションでの変性のサポートが改善されました。 たとえば、? extends Number
表記を割り当てられなくなっています。 ただし、このような境界型が有効な場合に型システムがその使用についてエラーを発しなくなりました。 sequence<>
型はデフォルトで共変性のままとなります。その型ではない要素のシーケンスには挿入できないため、危険な結果をもたらさないからです。 これにより、従来は危険なコードが検出されなかった場所で新たな型チェックの問題が発生する可能性があります。 このような問題は、境界型 list<? extends node<>>
またはシーケンス型 sequence<node<>>
のいずれかで解決可能です。
Settings(設定)| Project Settings(プロジェクト設定)| Make に新しい Disable Make On Startup(起動時に Make を無効化する)オプションが追加されました。 このオプションが選択されている場合、MPS は起動時にプロジェクトのすべてのモジュールを作成しません。 これは、最初の作成プロセスに時間がかかりすぎる場合や、プロジェクトが正常に作成される前に手動構成が必要なために作成プロセスが失敗する可能性がある場合に起動速度を速めたい場合に役立ちます。
モジュールプロパティダイアログの Java タブに新しい Edit(編集)オプションが追加されました。 見つけにくいですが、非常に便利なオプションです。 モジュールの jar ライブラリのセットを変更したい場合、この新しいオプションを使用すればエントリを削除して追加するという面倒な手順が不要になります。
IGenericComment
概念を拡張すると、カスタム言語でコメントを表す概念を MPS の TODO 機能に関連付けることができます。 TODO を表すコメントは TODO Finder によって収集され、TODO Viewer にリストされ、コミットプロセス中にチェックされます。
アスペクトモデルでのインスタンス作成については、MPS はこれまで名前またはフラグで順序付けされたルート化可能な非抽象的な概念を伴う一般的なロジックに従ってきました。 このバージョンからはオプションの構成をアスペクト宣言と共に指定できるようになったため、言語デザイナーがユーザーにどの概念を提示するかだけでなく、そのグループ化と順番付けを制御できるようになりました。
混乱を招くこの警告は、ClassConcept
が別のモジュールの ClassConcept
を拡張したか、その使用箇所が公開されている場合に表示されていました。 バージョン 2023.2 より古い MPS はモジュール記述子に指定されたモジュール依存関係を頼りに依存関係グラフを構築していました。 このバージョンの MPS は実際のジェネレーターとモデルの変換に関わる言語に基づいて依存関係情報を作成するようになっているため、このような依存関係を明示的に指定する必要がなくなり、結果的にチェックする必要がなくなりました。
コミュニティには物事を共有できるという有益な特徴があります。 以下の機能は商用 MPS ユーザーから資金援助を受け、そのリクエストに基づいて実装されたものです。 誰もがこれらの便利な追加機能をフル活用できるようになりました。
モデルチェッカーが並列ハードウェアを効率よく利用できるようになりました。これにより、モデルチェックのプロセスが高速化されました。 Settings(設定)| Tools(ツール)| Model Checker(モデルチェッカー)の設定に応じて、このプロセスを起動する際に複数のスレッドを生成することができます。
FilePerRootDataSource.getStreamByName()
メソッドが最適化され、モデルデータを読み込む際のパフォーマンスが改善されました。 File-per-root(ルートごとのファイル)永続性を使用して大きめのモデルを保存すると、違いがはっきりと分かります。
既存の Find text in project(プロジェクト内でテキストを検索)アクションが改善され、名前付きノードの参照を検索して追加の関連結果も表示するようになりました。 検索ダイアログで結果を直接確認できるプレビューパネルも追加されています。 HTML コンテンツを含むテキストが旧バージョンのような HTML ではなく、プレーンテキストで表示されるようになりました。
MPS が提供する Ant タスクを使ってプロジェクトを移行する際に依存関係が適切に移行されない場合があります。 このような場合でもプロジェクトの移行を続行するためのフラグを追加しました。 移行されない依存関係が検出された際に移行プロセスを停止する動作はデフォルトのままです。 このフラグを使用するには、migrate
Ant タスクに haltOnDependencyError="false"
を追加してください。
バージョン 2023.2 では IDE 全体を拡大・縮小し、すべての UI 要素のサイズをまとめて増減できるようになりました。 メインメニューから View(表示)| Appearance(外観)を選択し、IDE の表示倍率を調整します。 また、Settings(設定)/Preferences(環境設定)| Keymap(キーマップ)| Main Menu(メインメニュー)| View(表示)| Appearance(外観)で、これらのアクションを呼び出すためのカスタムショートカットを割り当てることが可能です。
MPS 2023.2 では、サイドツールウィンドウの幅を統一するか、レイアウトのカスタマイズに合わせてサイズを自由に調整する機能を保持する新しいレイアウトオプションを導入しました。 新しい Remember size for each tool window(各ツールウィンドウのサイズを記憶する)チェックボックスは、Settings(設定)/ Preferences(環境設定)| Appearance & Behavior(外観と動作)| Appearance(外観)| Tool Windows(ツールウィンドウ)にあります。 新しい UI と以前の UI でこの設定がどのように動作するかについては、こちらのブログ記事をご覧ください。
Settings(設定)/ Preferences(環境設定)| Editor(エディター)| Inspections(インスペクション)のコードサンプルで構文がハイライトされるようになりました。インスペクションのトリガー元を把握し、そのインスペクションを有効または無効にするかを決めやすくなっています。
Markdown ファイルで Fill Paragraph(段落の整形)エディターアクションがサポートされ、長いテキストを長さが同じ複数の行に分割できるようになりました。 これを行うには、編集する段落内にキャレットを置いて Find Action(アクションを検索)(Ctrl+Shift+A)を使って Fill Paragraph(段落の整形)コマンドを検索します。
Branches(ブランチ)ポップアップのユーザビリティを改善しました。 たとえば、ブランチが展開可能なリストにグループ化されて保管されるようになり、ブランチ間の移動操作がより簡単になっています。
MPS 2023.2 では、Create New Branch(新規プロジェクトの作成)ポップアップに自動補完が実装されています。 新しいブランチの名前を入力し始めると、IDE が既存のローカルブランチの名前を基に関連性のある接頭辞を提案します。
各メジャーリリースでは、旧バージョンの MPS から円滑に移行するための手順が用意されています。 必要な手順をよく確認してください。