MPS 2019.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をチェックすることをお勧めします。

最終更新日: 2019年7月5日