装飾品を使用したビジュアル スタジオの拡張機能を開発しています。アクティブなドキュメントのすべてのクラスとメソッドの上にラベルを付ける必要があります。
今私の問題は、すべてのメソッドとクラスを取得するにはどうすればよいですか? 私はそれを検索しましたが、どれも正確な解決策を示していません。
前もって感謝します!
装飾品を使用したビジュアル スタジオの拡張機能を開発しています。アクティブなドキュメントのすべてのクラスとメソッドの上にラベルを付ける必要があります。
今私の問題は、すべてのメソッドとクラスを取得するにはどうすればよいですか? 私はそれを検索しましたが、どれも正確な解決策を示していません。
前もって感謝します!
if(this._dte!=null && this._dte.ActiveDocument!=null)
{
List<CodeClass> foundClasses = new List<CodeClass>();
List<CodeFunction> foundMethod = new List<CodeFunction>();
CodeElements elementsInDocument = this._dte.ActiveDocument.ProjectItem.FileCodeModel.CodeElements;
RecursiveClassSearch(this._dte.ActiveDocument.ProjectItem.FileCodeModel.CodeElements, foundClasses);
RecursiveMethodSearch(this._dte.ActiveDocument.ProjectItem.FileCodeModel.CodeElements, foundMethod);
}
これが、コード要素の検索を開始した方法です。この再帰メソッドを以下に示します。これは、アクティブなドキュメント全体を検索し、要件に従って要素のリストを取得します。
クラスの検索の場合:
private static void RecursiveClassSearch(CodeElements elements, List<CodeClass> foundClasses)
{
foreach (CodeElement codeElement in elements)
{
if (codeElement is CodeClass)
{
foundClasses.Add(codeElement as CodeClass);
}
RecursiveClassSearch(codeElement.Children, foundClasses);
}
}
検索方法の場合:
public static void RecursiveMethodSearch(CodeElements elements, List<CodeFunction> foundMethod)
{
foreach (CodeElement codeElement in elements)
{
if(codeElement is CodeFunction)
{
foundMethod.Add(codeElement as CodeFunction);
}
RecursiveMethodSearch(codeElement.Children, foundMethod);
}
}
これと同じロジックを示しているGitHubでこのソリューションを見つけました。