MPS 2019.1ヘルプ

制約

構造言語では、言語構造に対する高度な制約を表現するのに不十分な場合があります。制約アスペクトはあなたにそのような追加の制約を定義する方法を与えます。

デフォルトの具体的な概念

抽象概念については、制約アスペクトを使用して、抽象概念のノードを作成する必要があるときにはどの概念を使用するべきかを示すことができます。

image2018 9 12 15 43 19

例:子コレクションがAbstractCommandsを保持している場合にユーザーがenterを押して新しい子をコレクションに挿入すると、EmptyLine概念のノードが作成されて挿入されます。

同様に。新しいノードを作成し、<デフォルト>パラメータを受け入れるsmodelコマンドは、抽象ノードではなく具象コンセプトのノードを正しく作成します。

image2018 9 12 15 50 5

子/親/先祖/ルートになることができます

これらは、概念の制約を定義するときに最初に回転するノブです。彼らは、この概念のインスタンスがモデル内の他のノードの子ノード(親、先祖)またはルートノードとしてフックできるかどうかを決定します。これらはboolean-returningクロージャとして指定します。MPSは、AST内のノードに対して許可されている可能性を評価するときに毎回呼び出します。

Constraintsx1

インポートする言語

制約を定義できるようにするためには、制約アスペクトに少なくとも2つの言語(j.m.baselanguagej.m.lang.smodelの言語)をインポートする必要があります。

子供になることができます

概念のインスタンスが特定のノードの子になることを許可されていない場合はfalseを返します。

パラメーター

説明

operationContext

IOperationContext

ノード

調べている子ノード (この概念の実例)

parentNode

調べている親ノード

childConcept

子ノードの概念 (この概念のサブコンセプトになることができます)

リンク

子ノードのLinkDeclaration (そこから子供の役割を果たすことができます)

親になることができます

概念のインスタンスが特定の概念ノード(特定のロール内)の親になることを許可されていない場合はfalseを返します。

パラメーター

説明

operationContext

IOperationContext

childNode

調べている子ノード

ノード

調べている親ノード (この概念の実例)

childConcept

チェックしている子ノードの概念

リンク

子ノードのLinkDeclaration

先祖になることができます

概念のインスタンスが特定のノードの先祖になることを許可されていない場合はfalseを返します。

パラメーター

説明

operationContext

IOperationContext

childNode

調べている子ノード

ノード

調べている先祖ノード (この概念の実例)

childConcept

子孫ノードの概念

rootになることができます

この制約は、ルート化可能な概念にのみ使用できます( インスタンスはルートになることができますが、概念構造の記述では真です)。概念のインスタンスが与えられたモデルのルートになることができない場合はfalseを返します。

パラメーター

説明

operationContext

IOperationContext

モデル

根のモデル

プロパティー制約

厳密に言えば、「純粋」のコンセプトプロパティーは本来の意味でのプロパティーではなく、パブリックフィールドのみです。プロパティー制約により、実際のプロパティーにすることができます。これらの制約を使用して、概念のプロパティーの動作をカスタマイズすることができます。各プロパティー制約は、指定された単一のプロパティーに適用されます。

property - この制約が適用されるプロパティー

get - このメソッドは、プロパティーにアクセスするたびにプロパティー値を取得するために実行されます。

パラメーター

説明

ノード

プロパティーを取得するノード

set - このメソッドは書き込みごとにプロパティー値を設定するために実行されます。プロパティー値は有効であることが保証されています。

パラメーター

説明

ノード

プロパティーを設定するノード

propertyValue

新しいプロパティー値

is valid - このメソッドは、プロパティーの値が有効かどうかを判断します。このメソッドは値を変更する前に毎回実行され、falseが返された場合、set()メソッドは実行されません。

パラメーター

説明

ノード

プロパティーをチェックするノード

propertyValue

チェックする値

サンプル - 補完メニューの説明をカスタマイズする

補完メニューには、利用可能なノードがいくつかの追加の説明情報とともに一覧表示されます。

sd1

追加情報をカスタマイズし、完了メニューにリストされている個々のオプションに関する詳細を提供するために、ターゲット概念のshortDescriptionプロパティーのgetterをオーバーライドすることができます。

sd2
sd3

参照制約

このタイプの制約は、概念のリンクに振る舞いを追加し、よりプロパティーのように見せるために役立ちます。

参照セットハンドラ - 指定された場合、このメソッドはこのリンクのすべてのセットに対して実行されます。

パラメーター

説明

referenceNode

リンクを含むノード。

oldReferentNode

参照の古い値

newReferentNode

参照の新しい値


scope - このリンクが指すことができるノードのセットを定義します。メソッドはスコープインスタンスを返します。スコープの詳細についてはスコープドキュメントを参照してください。スコープ参照制約には2つのタイプがあります。

  • 継承

  • 参照

継承スコープは単にターゲット概念を宣言するだけですが、参照スコープはパラメータからその場でスコープを計算する関数を提供します。

パラメーター

説明

referenceNode

実際のリンクを含むノードスマート参照を使用する概念のために新しいノードが作成されているときはnullになる可能性があります。この状況では、enclosingNodeのコンテキストで作成するノードの種類を決定するためにスマート参照が使用されるため、検索スコープメソッドはnull referenceNodeで呼び出されます。

contextNode

参照を持つノード、または最も近い非nullコンテキストノード

containmentLink

contextNodeと作成中の存在しない子との親子関係を記述するSContainmentLink (referenceNodeが存在する場合、このパラメータは意味を持ちません。)

linkTarget

このリンクが参照できる概念通常それは参照の概念のため、静的に知られています。subconceptで参照を特殊化し、特殊化参照の検索範囲を定義しない場合は、linkTargetパラメータを使用して、どの参照の特殊化が必要かを判断できます。

位置

contextRoleのターゲットインデックス

範囲が参照に設定されていない場合は、参照されている概念のデフォルトの範囲が使用されます。デフォルトのスコープも設定されていない場合は、「グローバル」スコープが使用されます。インポートされたすべてのモデルからの参照概念のすべてのインスタンスです。


presentation(廃止予定 - エディターのアスペクトが参照の表示を指定するようになりました: エディターを参照してください) - ここでは、エディターと補完リストでの参照の外観を指定します。状況に応じて参照を異なるように表示すると便利なことがあります。例:Javaでは、フィールドが同じ名前のローカル変数宣言によって隠されている場合、インスタンスフィールドfへの参照はすべてthis.fとして表示されます。デフォルトでは、プレゼンテーションが設定されていない場合、参照ノードの名前がそのプレゼンテーションとして使用されます(INamedConceptである場合)。

パラメーター

説明

モデル

参照を含むノードのモデル

parameterNode

提示されるノード (referenceNodeはlinkTarget型のparameterNodeへの参照を持っています)

位置

contextRoleのターゲットインデックス

存在する

参照が作成されているときはfalse

見える

true - 既存ノードの表示、false - 新しいノード用 (完了メニューで選択した後に作成されます)

smartReference

true - ノードはスマートリファレンスに表示されます

inEditor

true - エディターへのプレゼンテーション、false - 補完メニュー

contextNode

参照を持つノード、または最も近い非nullコンテキストノード

contextRole

contextNode内のターゲット役割

referenceNode
enclosingNode
linkTarget
containingLink

非推奨

デフォルト・スコープ

概念Cのインスタンスを指すリンクがあり、参照制約内でこのリンクに対して定義された範囲がないとします。このリンクを編集すると、インポートされたすべてのモデルからの概念Cのすべてのインスタンスがデフォルトで表示されます。すべてのリンクの可視インスタンスのセットを概念Cに制限したい場合は、その概念のデフォルトの範囲を設定できます。参照制約と同様に、検索範囲バリデータ、および表示方法を設定できます。すべてのパラメータは同じです。

スコープの詳細についてはスコープドキュメントを参照してください。

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