使用箇所の検索
MPS では、どのモデルもノードで構成されています。ノードはさまざまな種類の関係を持つことができます。これらの関係はノード構造(たとえば、クラス上の「クラス子孫」関係)で表現されていてもいなくてもよい(たとえば、メソッド上の「オーバーライドメソッド」関係)。使用箇所の検索は与えられたノードに対していくつかの特別に関連したノードを表示するためのツールです。
In MPS, the Find Usages system is fully customizable - you can write your own entities, so-called finders, which represent algorithms for finding related nodes. For every type of relation there is a corresponding finder.
これが「使用箇所の検索」の結果のようなものです。
使用箇所の検索サブシステムを使用する
ノード上で Alt + F7 を押すと(エディター内またはプロジェクトツリー内のどの場所でも)、MPS がどのような使用箇所を検索できるかを確認できます。
ノードを右クリックして使用箇所の検索を選択して使用箇所の検索ウィンドウを開くこともできます。
使用箇所の検索ウィンドウは、キャレットのノードに適用されます。たとえば振る舞いメソッドの場合は、オーバーライドメソッドとオーバーライドメソッドを選択できます。
ファインダー - 検索したい用法のカテゴリを選択してください
スコープ - this lets you select where you want to search for usages - in concrete model, module, current project or everywhere.
表示オプション - 追加表示オプション
検索を調整したら、OK をクリックして実行します。結果は上記のように使用箇所の検索ツールに表示されます。
ファインダー
関連ノードを見つけるための独自のメカニズムを実装するには、Finders に慣れておく必要があります。すべての関係について、検索プロセスに関するすべての情報を提供する特定の Finder があります。
ファインダーをどこに保管しますか?
Finders can be created in any model by importing findUsages language. However, MPS collects finders only from findUsages language aspects. So, if you want your finder to be used by the MPS Find Usages subsystem, it must be stored in the findUsages aspect of your language.
ファインダー構造
名前 | ファインダーの名前望む任意の名前を選ぶことができます。唯一の明白な制約は名前がモデルの範囲内でユニークでなければならないということです。 |
---|---|
概念のため | Finder は、この概念のインスタンスであるノードとそのサブコンセプトへの適用性についてのみテストされます。 |
説明 | この文字列は、ファインダリスト内のファインダを表します。かなり短くするべきです。 |
長い説明 | 説明文字列からファインダが正確に何をするのか明確でない場合は、長い説明を追加できます。これは、ファインダのリストにファインダのツールチップとして表示されます。 |
表示する | 現在のノードに対してファインダが表示されるかどうかを決定します。例: あるクラスの先祖クラスを見つけるファインダは、このクラスが親を持たないときには見えないはずです。 |
適用可能です | Finders that have passed for concept are tested for applicability to the current node. If this method returns true, the finder is shown in the list of available finders; otherwise it is not shown. The node argument of this method is guaranteed to be an instance of the concept specified in "for concept" or its subconcepts. |
検索 | This method should find given node usages in a given scope. For each found usage of a node, use the add result statement to register it. For data other than nodes that the Find Usages dialog is able to visualize use add raw result. |
検索されたノード | This method returns nodes for which the finder searched. These nodes are shown in searched nodes subtree in the tool. |
カテゴリを取得 | ツール内で見つかったノードをグループ化するためのバリアントがいくつかあります。そのうちの 1 つはカテゴリによってグループ化されてい、それを見つけたファインダーによってすべての見つけられたノードに与えられます。このメソッドは、このファインダによって見つけられた各ノードにカテゴリを与えます。 |
MPS 使用箇所の検索サブシステムは自動的に何をしますか?
複数の呼び出し間および MPS 実行間の検索オプションを格納します
MPS 実行間の検索結果を格納します
削除されたノードを自動的に処理します
見つかったノードを使った視覚化と操作はすべて、ファインダーではなくサブシステムによって行われます。
特定のステートメント
実行する
Finders can be reused thanks to the execute statement. The execution of this statement consists of 2 steps: validating the search query (checking for concept and isApplicable ), and executing the find method. That's where you can see the difference between isApplicable and isShown. If you use isApplicable for cases when the finder should be applicable, but not shown, you can get an error when using this finder in the execute statement.
非同期に実行する
Furthermore, in order to execute a finder asynchronously one needs to use a special OnEachNodeFoundByExpression, which represents a simple finder invocation with a callback which is executed for each found node.
例
jetbrains.mps.baseLanguage.findUsages でいくつかのより良い例を見ることができます
また、FinderDeclaration の概念(Ctrl + N、「FinderDeclaration」と入力して Enter キーを押す)に移動し、この概念のすべてのインスタンスを検索する(Alt + F7、インスタンスの確認、グローバルスコープの確認)と、すべてのファインダーを検索できます。
関連ページ:

エクステンションサポート
拡張機能は、標準的な言語の側面やプラグインのメカニズムではカバーされていない、ソリューションや言語の特定の側面を拡張する可能性を提供します。通常、ディストリビューションモデル(MPS プラグイン、IntelliJ IDEA プラグイン、またはスタンドアロン IDE)に応じて、言語の動作をわずかに変更する必要があります。そのような場合、あなたの拡張ポイントを、異なる実装が異なるディストリビューションで提供されるインターフェースとして定義します。エクステンションのサポートは言語、プラグインソリューシ...

実行設定
導入、設定、永続的なプロパティ、構成を互いに統合する、テンプレートパラメーター、コマンド、実行コマンドセクション、ProcessBuilderExpression、デバッガー統合、構成、執行者、デバッガー統合、生産者、便利な例、パーソンエディター、実行コマンド、タスクの前に gcc でコンパイルする、Java エグゼキュータ、Java プロデューサー、java クラスに生成されたノードの実行、導入実行構成により、ユーザーは自分の言語で書かれたプログラムの実行方法を定義できます。既存の実行構成は、...