MPS 2020.1 ヘルプ

リファクタリング

リファクタリングのサポートは、すべての成熟した言語の IDE 機能の非常に重要な部分です。MPS は、リファクタリングアクションの開発を簡素化するためのいくつかの機能を提供します。

簡単なリファクタリングは、jetbrains.mps.lang.refactoring 言語を使用して作成できます。この言語を使用してリファクタリングを記述した後、次の手順を使用して、ユーザーがリファクタリングを使用可能にし、起動できるようにする必要があります。

  1. リファクタリング用の UI アクションを作成します。これは、プラグイン言語を使用して記述された単純なアクションです。適切なリファクタリングアクション登録の例として、jetbrains.mps.ide.platform.actions.core から名前の変更アクションを確認できます。

  2. リファクタリング用に ActionGroupDeclaration を作成し、デフォルトの位置で jetbrains.mps.ide.platform.actions.NodeRefactoring アクショングループを変更します。

  3. 新しく作成されたアクションをトリガーするリファクタリングキーストロークを KeymapChangesDeclaration に追加します

  4. 作成されたアクションに isApplicable 句を追加します。通常、これは単なる is applicable refactoring< > () 呼び出しです。

  5. 作成されたアクションに execute 句を追加します。すべてのユーザーインタラクションはここで実行する必要があります。最後に、execute refactoring< > () を呼び出して、準備されたパラメーターでリファクタリングを実行する必要があります。

リファクタリングは、実行された変更に関する情報をさらに記録し、リファクタリングされたプロジェクトに依存する他のプロジェクトの使用状況を更新する場合があります。そのような場合、リファクタリング参加者フレームワークを使用する必要があります。リファクタリングを作成するこの方法は、次の手順で構成されます。

  1. リファクタリング用の UI アクションを作成します。ここでは、ダイアログを表示し、ユーザーから必要なデータを取得し、アクションをアクショングループに登録し、オプションでキーマップを作成できます。

  2. アクションの execute 節で RefactoringProcessor.performRefactoringInProject() を呼び出し、提案されたすべての変更に関連するすべてのデータを渡します。

  3. 可能な用途の種類ごとに、その種類の用途を処理する RefactoringParticipant のサブクラスを作成します。つまり、使用箇所を検索して更新します

  4. 拡張ポイントを作成し、その拡張ポイントのすべての参加者を登録します。

  5. 他の依存プロジェクトの使用状況の更新をサポートするには、参加者を PersistentRefactoringParticipantsEP 拡張ポイントに追加登録する必要があります。リファクタリングログを作成するための特別な参加者が必要です(実装の詳細については、MoveNodeRefactoringLogParticipant を参照してください)。