Доступ ко всем методам и классам для 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, который показывает ту же логику.

Другие вопросы по тегам