MPS 2020.1 ヘルプ

エディター言語生成 API

エディター言語は多くの MPS ユーザによって拡張されることになっているため、エディター言語用のジェネレータを、使いやすいように設計しました - わかりやすいテンプレート、人間が読めるコード、および実行時よりも生成時のメタ情報の使用 - 時間。新しいセルタイプを提供するために、いずれかの言語でエディターの言語を拡張している場合は、このドキュメントが役立ちます。

API: EditorCell 契約

EditorCell.setBig()/。getBig() メソッドの規約が少し変更されました。詳細については Javadoc を確認してください。

API: EditorCellFactory は UpdateSession 内でのみ利用可能になりました

EditorCellFactory インスタンスを現在の UpdateSession によって制御するようにしました。同時に、EditorCellFactory 実装内にキャッシュをいくつか配置し、状況によってはエディターの構築プロセスを高速化しました。EditorContext.getCellFactory() メソッドは推奨されておらず、次のリリースで削除される予定です。

言語ランタイム : AbstractEditorBuilder

AbstractEditorBuilder ランタイムクラスが導入されました。セルファクトリメソッドを含むすべてのクラスの共通スーパークラスとして使用する必要があります。このクラスは共通のユーティリティメソッドを実装し、以下のようなエディターセル作成プロセスの一般的なコンテキストパラメーターへのアクセスを提供します。

  • editorContext

  • ノード

  • CellFactory

  • UpdateSession

AbstractEditorBuilder は、セル作成プロセスのコンテキストを捉え、そのコンテキスト内でセルファクトリメソッドを実行するために使用されます。

生成プログラム : EditorBuilder クラス

AbstractEditorBuilder クラスの個別のサブクラスが、利用可能なエディター宣言階層のそれぞれに対するルートクラスとして生成されます。

  • ConceptEditorDeclaration.cellModel
  • ConceptEditorDeclaration.inspectedCellModel
  • EditorComponentDeclaration
  • InlineEditorComponent

MPS エディタージェネレータはクラスの作成を継続し、ConceptEditorConceptEditorComponent を実装します。これらのクラスは、セルファクトリメソッドのコンテナーとして以前使用されていました。MPS の新しいバージョンでは、これらのクラスは、コンテキストヒント情報へのアクセスを提供し、実際のエディタービルダーをインスタンス化する記述子として使用されます。記述子クラスは EditorCellFactory 実装によってキャッシュされるかもしれません。

セルビルダーで利用可能なコンテキストパラメーター

AbstractEditorBuilder サブクラスの一部として生成されたコードは、AbstractEditorBuilder クラスの既存のメソッドを使用してコンテキストパラメーターにアクセスできます。それに加えて、すべての利用可能なメタ情報は、AbstractEditorBuilder のメソッドシグネチャーで利用可能なものよりもより具体的なタイプのプライベートフィールドを生成するために使用されます。現時点では、AbstractEditorBuilder の各サブクラスはプライベートノード <TheConcept> myNode フィールドを保持します。ここで、コンセプトはこの AbstractEditorBuilder に関連する実際の概念です。つまり、セルファクトリメソッドでは、コンテキストノードへの型指定アクセスを取得し、S モデル言語を使用してコンテキストノードから利用可能なプロパティ、リンク、その他の情報に直接アクセスするために、このようなプライベートフィールドを使用できます。

CellFactoryContextClass

CellFactoryContextClass はテンプレートに必要なコンテキストを提供する便利なユーティリティクラスで、生成された AbstractEditorBuilder サブクラスの 1 つに含まれるコードを生成します。コンテキストクラステンプレートとしてこのクラスを使用することによって、作者はすべての利用可能なメソッドとフィールドを自動的に取得するため、コード生成環境は MPS プラットフォームによってサポートされるため、それぞれのエディターテンプレートごとに再構築する必要はもうありません。同時に、CellFactoryContextClass はテンプレートをハイライトするマーカーインターフェースとして使用することができます。これはエディタービルダーの 1 つのコードを生成し、そのようなコードを見つけて将来それをサポートするプロセスを簡素化します。

GenericCellCreationContext

GenericCellCreationContext インターフェースは、コンテキスト情報の限られたサブセットを提供します。これは、エディタービルダーの一部として、またはセル作成(エディター更新)プロセスの一部として実行される別のクラスから呼び出されるコードで常に使用可能です。このような場合、テンプレート作成者がエディタービルダーの生成プロセスやその他の場所で同じテンプレートを再利用する場合は、このインターフェースを CellFactoryContextClass の代わりにテンプレートコンテキストとして使用する必要があります。例:エディタービルダーの内部または何らかのスタイルクラスの内部で生成される可能性があるクエリメソッド。

createCell() メソッドの新しいシグネチャー

MPS の以前のバージョンでは、セルファクトリメソッドは常に、セル作成のコンテキストを指定する 2 つの追加パラメーター EditorContextノード <> を使用して生成されていました。これからは、これらのパラメーターを指定する必要はもうありません。生成されたコードは、それを含む EditorBuilder クラスからメソッドを呼び出すことによって、常にこの情報(およびその他のコンテキスト情報)にアクセスできます。新しいエディタージェネレータは、パラメーターなしでセルファクトリメソッドを生成します。

新しい createCell() メソッド用の自動移行スクリプト

既存のジェネレータとの互換性を保つために、利用可能なテンプレートにパッチを適用し、フォールバックとして古い createCell() メソッド(2 つの追加パラメーターを使用)に委譲する新しい createCell() メソッドを導入する移行スクリプトを提供します。最初にこのスクリプトを実行してからすべての変更をチェックし、変更されたジェネレータがまだ正しく機能するかどうかを確認することをお勧めします。提供されている自動移行は最も頻繁な状況のみをサポートします。そのため、特定の場合には、再び機能させるために手動でジェネレータを修正する必要があります。互換性メソッドを生成するテンプレートtemplate_cellFactoryCompatibility と呼ばれます。後で新しい createCellMethod を直接生成するようにジェネレータを変更した場合は、template_cellFactoryCompatibility への呼び出しをすべて削除する必要があります。現在の MPS リリースの範囲内で、既存のすべてのジェネレータと古い createCell(...) メソッドを生成する古いテンプレートにパッチを適用することをお勧めします。次のバージョンでは互換性テンプレートを削除する予定です。

マッピングラベル

いくつかのマッピングラベルがエディタージェネレータ(MAPPING_ メイン)に導入され、コード生成を簡素化するために使用されることがあります。

cellFactory.class.concept

cellFactory.class.concept:ConceptEditorDeclaration-> ClassConcept

このラベルは、ConceptEditorDeclaration.cellModelEditorBuilder 用に生成された java クラスを公開します。

cellFactory.class.inspector

cellFactory.class.inspector:ConceptEditorDeclaration-> ClassConcept

このラベルは、ConceptEditorDeclaration.inspectedCellModelEditorBuilder 用に生成された java クラスを公開します。

cellFactory.class.component

cellFactory.class.component:EditorComponentDeclaration-> ClassConcept

このラベルは、EditorComponentDeclarationEditorBuilder 用に生成された java クラスを公開します。

cellFactory.constructor

cellFactory.constructor: EditorCellModel-> ConstructorDeclaration

生成された EditorBuilder クラスのコンストラクターをマークするために使用されます。

cellFactory.factoryMethod

cellFactory.factoryMethod: EditorCellModel-> InstanceMethodDeclaration

新しい cellFactory メソッドを含む、廃止された cellFactoryMethod ラベルの置き換えです。既存のテンプレートを変更して新しい cellFactory メソッドを生成するときには、cellFactoryMethod の代わりにこのラベルを使用してください。

generated.constructor

generated.constructor: <入力概念なし>-> ConstructorDeclaration

このラベルは、生成されたコンストラクターのインスタンスをマークするために既存の generatedClass のラベルと一緒に使用できます。このラベルは、generatedClass マッピングから返された、ノード <ClassConcept> 内の最初のコンストラクターインスタンスを見つけるための見苦しいコードを回避するために使用できます。

CellLayoutConstructor スイッチが導入されました

このテンプレートスイッチは、コレクションセルの作成中に適切なセルレイアウトをインスタンス化するために使用されます。EditorCell_Collection クラス内で以前に使用されていた静的 createxxx() メソッドは推奨されておらず、削除される予定です。

RefCellCellProvider サブクラス用の新しいジェネレータ

CellModel_RefCell のジェネレータは修正されます。RefCellCellProvider 用に新しく生成された匿名内部クラスは、RefCellCellProvider.createRefCell() ランタイムメソッド内にあるロジックを使用しません。生成時に利用可能なメタ情報は、このメソッドの完全なコンテンツを作成するために使用されます。ジェネレーター内で RefCellCellProvider のサブクラスを生成する場合は、そのような場所を検討し、テンプレートを MPS のテンプレートと位置合わせすることを検討する必要があります。

InlineCellProvider は EditorBuilder サブクラスに置き換えられました

InlineCellProvider は、MPS ジェネレータによってもう使用されていません。MPS は、代わりに AbstractEditorBuilder の生成されたサブクラスを使用します。それにもかかわらず、ライフサイクルをより透明にするために InlineCellProvider 内のいくつかの制約を修正しました。まだ使用している場合は、InlineCellProvider の Javadoc を確認することをお勧めします。

エディタースタイルジェネレータ

スタイルシートおよび StyleKeyPack インスタンス内の各エントリに対して、別々の静的内部クラスが生成されます。提供された applyStyleClass テンプレートは、新しいスタイルクラスを適切にインスタンス化して呼び出すために使用できます。従来の静的 applyxxx() メソッドは次のリリースで削除される予定です。

StyleClassItem 制約の修正

StyleClassItem の概念から canBeChild の制約を削除しました。これらの制約は、StyleClassItem を含むノードの canBeParent 制約に置き換えられました。それに加えて、isApplicableToCell(node<EditorCellModel> cellModel) の振る舞い方法は推奨されておらず、もう使用されていません。代わりに、以下のメソッドを導入しました。

  • isApplicableToCellConcept()
  • isApplicableForLayout()
  • isApplicableInLayout()

言語でカスタム StyleClassItem を実装している場合は、StyleClassItem の振る舞いメソッドの Javadoc をチェックすることをお勧めします。

最終更新日 : 2020 年 6 月 18 日