Доступ ко всем методам и классам для VS Extension с украшением
Я разрабатываю расширение для визуальной студии с украшением. Я должен поставить метку над каждым классом и методами в активном документе.
Теперь моя проблема в том, как я могу получить все методы и классы? Я искал это, но ни один из них не показывает точное решение.
Заранее спасибо!
1 ответ
Решение
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);
}
}
Я нашел это решение через Git Hub, который показывает ту же логику.