MPS の新機能

MPS 2018.3の新機能

BaseLanguage

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

MPSは、コンセプトをオーバーライド/実装されたアイコンでマークし、現在のコンセプトのスーパーコンセプトまたはサブコンセプトに簡単にナビゲートすることができます。

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

長い間、生成されたクラスのJavaパッケージを管理する唯一の方法は、含むモデルの名前を使用することでした。ただし、新しいClassifierプロパティー 'packageName'を使用すると、生成されたクラスのJavaパッケージを管理できます。このプロパティーはルート分類子でも使用できます。

BaseLanguage拡張のための新世代の機能

BaseLanguageは、多くの拡張機能でカスタマイズされることを常に意図していました。しかし、いくつかの拡張では、適切なジェネレータを実装するのは難しいことがあります。今、BaseLanguageは、拡張機能のジェネレータを簡単に書くために、いくつかの新しい世代の概念を提供しています。

Lvalue式の生成

LValue 式は、値で読み書きできる変数に評価されます。場合によっては、式が使用されるコンテキストの種類に依存する可能性があるため、LValue 式の生成は困難です。新しいジェネリックLValue 式の生成時の概念を使用して、ジェネレータを簡単にしてコンテキストを認識しないようにすることができます。

幸いにも、新しいリリースでは、任意のLValue 式を '@byRef'式でラップすることができます。次に、BaseLanguageジェネレータは、ラップされた式を、'Reference <T>'型の式に変換します。これは、ラップされた変数に対するgetおよびset操作を提供します。

これらの新しく導入された生成時概念の両方は、この記事(英語)でさらに詳しく説明されています。

Lvaluesを参照に変換する

いくつかの式は、他のLvalue式を集約して、集約された式から生成された変数(たとえば、代入やインクリメント、式の取得)で複合演算を行います。そのような意味論を持つ新しい表現を導入することは、そのような構造のための適切なジェネレータを書くことが困難であったため、実行可能ではなかった。

デフォルトメソッドはBaseLanguageでサポートされています

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

生成プログラム

ジェネレータ言語

$INCLUDE$マクロは推奨されなくなりました。そのインスタンスを$CALL$に置き換える移行があります。前者は引数付きのテンプレートをサポートしていなかったため、両方のメカニズムでテンプレートを呼び出す理由はありませんでした。

$WEAVE$マクロおよびウィービングルールは、引数付きのテンプレートを呼び出すことができるようになりました。解釈されたテンプレートが 'コンパイルされた'ジェネレータからの外部テンプレートを織り込むと、解釈されなくなりますが、コンパイルされたテンプレートコードはまだ実行されます。'コンパイルされた'テンプレートは、インタープリットされたテンプレートを織り込むことができます。

Javaリフレクションは、QueriesGeneratedとも呼ばれるテンプレートモデルからのクエリの集合にアクセスするためには使用されません。

UI/UX

MacBook タッチバー

デフォルトのコンテキストには、アプリケーションの実行、ビルド、およびデバッグのためのコントロールが含まれています。新しい実行/デバッグ設定をすばやく選択または作成できます。ここでは、Preferences | Preferencesでアクションをカスタマイズする新しいTouch Barページが追加されました。外観と行動|メニューとツールバー。

そしてはい、それは拡張可能です!必要なアクションを特別なMPS 'InterfaceGroup'に追加するだけです。

高コントラストUIテーマ

Preferences - > Appearance&Behaviorのテーマオプションからドロップダウンリストを使用してアクセスできる新しい高コントラストテーマのサポートを追加しました。

廃止予定のコードを見つける新しいアクション

アクション廃止予定の使用箇所の検索は、廃止された要素のすべての使用箇所を見つけることができます。発見された使用箇所の報告は、コード除去の期待されるバージョンによってエントリーをグループ化するので、その重症度を認識し、最初に除去するものに優先順位を付ける方が簡単です。

オーバーライドまたは実装された振る舞いーメソッドの新しいアイコン

振る舞いメソッドには新しいアイコンが用意されています。次のスクリーンショットは、選択したものを上書きまたは実装するgetPresentation()メソッドのリストを示しており、そこからそれらに移動することができます。

オーバーライド/実装されたアイコンのさらなる機能拡張

オーバーライド/実装されたコンセプト/クラス/メソッドのポップアップは非同期になり、バックグラウンドではMPSがポップアップに検索結果を入力します。また、検索オブジェクトの名前を使用してフィルタリングできるようになりました。

ファインダーの変更

MPSによって配布されるファインダーは、更新され最適化されています。ファインダを非同期に実行するには、検出されたノードごとに実行されるコールバックを使用した簡単なファインダ呼び出しを表す特殊なOnEachNodeFoundByExpressionを使用する必要があります。その結果、コンセプトの検索用途のオプションが変更されました。オプションはDerived ConceptsとConcept Ancestorsで拡張され、サブコンセプトとスーパーコンセプトのリストがそれぞれ生成されます。また、振る舞いメソッドのfind usagesオプションは、"Overridden Methods"および "Overriding Methods"で拡張されています。

特定のエラーを抑制する

エラー抑制は、MPSがタイプシステムチェッカーによって誤って見つかったエラーを表示しないようにするための大まかなツールでした。インテンション 'ノードのエラーを抑制します...'を使用してノードに属性 'SuppressErrorAnnotation'の注釈が付けられている場合、そのノードまたはその子孫のエラーメッセージは表示されませんでした。

現在、特定のエラーメッセージのみを抑制することが可能です。エラーメッセージはノードとそのすべての子孫に対して抑制されますが、それ以外のメッセージは存在したままになります。詳しくは、資料(英語)を参照してください。

エディター

再利用可能なセルアクションマップ

既存のアクションマップのセルアクションマップアイテムは、インポートによって新しいアクションマップに再利用できます。

ビルド言語

ヒントとコツ

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

ヒントとトリック言語

ソリューションからヒントをインポートするには、モデルを使用してソリューションを作成し、jetbrains.mps.build.tipsおよびjetbrains.mps.core.xmlという言語を追加して使用言語をモデル化します。次に、複数のヒントを作成できるMPSTipsAndTricksコンセプトのインスタンスを作成できます。各ヒントはHTML形式のテキストで、最大1つのイメージを含むことができます。

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

BuildMps_IdeaPluginのカスタムパッケージオプションは廃止されましたので、今後使用しないでください。これで、レイアウトBuildMpsLayout_Pluginの構築でパッケージを直接選択することができます。

自動パッケージでは、提供されているすべての言語とソリューションが、プラグインのルートディレクトリーの「languages」フォルダーに格納されます。一方、手動のパッケージングは、開発者が自分でプラグインのレイアウト全体を提供しなければならないことを意味します。

ビルド言語の新しい構築

ビルド言語のテストモジュール設定が拡張され、MPS antテストが実行されるときにロードされなければならない追加のIntelliJ IDEAプラグインが指定されました。

環境にMPSビルド言語エンジンがテストを含むモジュールから推測できない特定のプラグインが必要なシナリオがあります。MPS Antテスト実行中に、必要なプラグインが存在することを確認できます。

その他

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

データ型を完全に生成させました。データ型に関する生成されたすべての情報は、SModel APIから使用可能になりました。

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

MPSは、移行データを転送する新しいメカニズムをサポートしています。これは、新しく作成した移行に強くお勧めします。生成されたデータを含むノードは、データが関連する場所に十分に近いノードに接続されるようになりました。

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

データを含むノードの取得は、以前と同じように行われます。

競合解消の改善

以前は、ローカル側とリモート側の両方から変更を適用することは不可能でした。一方の側からの適用は、他方からの変更を単に拒否したからです。

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

左のバージョンの競合を適用した後も、右側から行を適用または無視することができます。