シンボル参照ツールのサポート
オブジェクト ブラウザー、クラス ビュー、呼び出しブラウザー、およびシンボルの検索結果の各ツールは、Visual Studio でのシンボル参照機能を提供します。 これらのツールには、シンボルの階層ツリー ビューが表示され、ツリー内のシンボル間の関係が表示されます。 シンボルは、さまざまなコンポーネントに含まれる名前空間、オブジェクト、クラス、クラス メンバー、およびその他の言語要素を表します。 コンポーネントには、Visual Studio プロジェクト、外部 .NET Framework コンポーネント、およびタイプ ライブラリ (.tlb) があります。 詳細については、「コードの構造の表示」を参照してください。
シンボル参照ライブラリ
言語の実装者は、コンポーネント内のシンボルを追跡するライブラリを作成し、一連のインターフェイスを使用して Visual Studio オブジェクト マネージャーにシンボルのリストを提供することにより、Visual Studio のシンボル参照機能を拡張できます。 ライブラリは、IVsSimpleLibrary2 インターフェイスによって記述されます。 Visual Studio オブジェクト マネージャーでは、シンボル参照ツールからの新しいデータの要求に対し、ライブラリからデータを取得して整理することによって応答します。 その後、要求されたデータを使用してツールを設定または更新します。 Visual Studio オブジェクト マネージャー (IVsObjectManager2) への参照を取得するには、SVsObjectManager のサービス ID を GetService
メソッドに渡します。
各ライブラリは、すべてのライブラリの情報を収集する Visual Studio オブジェクト マネージャーに登録する必要があります。 ライブラリを登録するには、RegisterSimpleLibrary メソッドを呼び出します。 Visual Studio オブジェクト マネージャーでは、要求を開始したツールに応じて適切なライブラリを検索し、データを要求します。 データは、IVsSimpleObjectList2 インターフェイスによって記述されるシンボルのリストとして、ライブラリと Visual Studio オブジェクト マネージャーの間でやり取りされます。
Visual Studio オブジェクト マネージャーは、ライブラリに格納されている最新のデータを反映するために、シンボル参照ツールを定期的に更新する役割を担います。
次の図には、ライブラリと Visual Studio オブジェクト マネージャーの間における要求/データ交換プロセスの主要要素のサンプルが含まれています。 図のインターフェイスは、マネージド コード アプリケーションの一部です。
Visual Studio オブジェクト マネージャーにシンボルのリストを提供するには、最初に RegisterSimpleLibrary メソッドを呼び出して、Visual Studio オブジェクト マネージャーにライブラリを登録する必要があります。 ライブラリが登録されると、Visual Studio オブジェクト マネージャーは、ライブラリの機能に関する特定の情報を要求します。 たとえば、GetLibFlags2 メソッドと GetSupportedCategoryFields2 メソッドを呼び出して、ライブラリ フラグとサポートされるカテゴリを要求します。 ある時点で、いずれかのツールからこのライブラリのデータが要求されると、オブジェクト マネージャーは GetList2 メソッドを呼び出して、最上位のシンボル リストを要求します。 応答として、ライブラリはシンボルのリストを作成し、IVsSimpleObjectList2 インターフェイスを通じて Visual Studio オブジェクト マネージャーに公開します。 Visual Studio オブジェクト マネージャーでは GetItemCount メソッドを呼び出して、リスト内の項目数を特定します。 以降の要求はすべて、リスト内の特定の項目に関連するものであり、各要求にはその項目のインデックス番号が指定されます。 Visual Studio オブジェクト マネージャーは GetCategoryField2 メソッドを呼び出して、項目の型、アクセシビリティ、およびその他のプロパティに関する情報を収集します。
GetTextWithOwnership メソッドを呼び出して項目の名前を特定し、GetDisplayData メソッドを呼び出してアイコン情報を要求します。 項目名の左側にアイコンが表示され、項目の型、アクセシビリティ、およびその他のプロパティが示されます。
Visual Studio オブジェクト マネージャーから GetExpandable3 メソッドが呼び出され、特定のリスト項目が展開可能で子項目を持っているかどうかが確認されます。 要素を展開する要求が UI から送信された場合、オブジェクト マネージャーは GetList2 メソッドを呼び出して、シンボルの子リストを要求します。 このプロセスがツリーのさまざまな部分で続行され、ツリーがオンデマンドで構築されていきます。
Note
ネイティブ コード シンボル プロバイダーを実装するには、IVsLibrary2 インターフェイスと IVsObjectList2 インターフェイスを使用します。