Nemerle и Source Outliner Power Toy
От: hi_octane Беларусь  
Дата: 23.09.07 03:49
Оценка:
Файлы немерла не показывает стандартный ClassView. Посему начал прикручивать к Nemerle один из любимых плагинов Source Outliner. Сразу наступил на мелкую проблемку: при инициализации плагина Document.ProjectItem почему-то null (для C# и VB.NET там лежит ProjectItem). Обошлось через Document.ActiveWindow.ProjectItem который оказывается установлен как надо. Но дальше — хуже — при обращении к projectItem.FileCodeModel.CodeElements всё зависает. Подозорение на компилятор немерла, но проверить возможности пока нет Если кто-нить может сходу врубиться/поправить -- буду очень благодарен и постараюсь довести поддержку немерла этим плагином до рабочего состояния или сделать его частью интеграции.

вот изменения которые я делал:
        private void ContinueLoadingCodeModel()
        {
            ProjectItem projectItem = null; 

            try
            {                
                // Read the code model only if the document and project item opened are not null.
                if (_currentDocument != null)
                {
                    projectItem = _currentDocument.ProjectItem;
                    if(projectItem == null)
                        projectItem = _currentDocument.ActiveWindow.ProjectItem;
                }

                if(projectItem == null)
                {
                    State = OutlineFileManagerState.DoneLoadingCodeModel;
                    return;
                }
            }
            catch (ArgumentException)
            {
                State = OutlineFileManagerState.DoneLoadingCodeModel;
                return;
            }

            EnvDTE.FileCodeModel fileCodeModel = projectItem.FileCodeModel;
            if (fileCodeModel == null)
            {
                State = OutlineFileManagerState.DoneLoadingCodeModel;
                return;
            }

            // Only C# and VB are currently supported.
            if ((fileCodeModel.Language != CodeModelLanguageConstants.vsCMLanguageCSharp)
                && (fileCodeModel.Language != CodeModelLanguageConstants.vsCMLanguageVB)
                && (fileCodeModel.Language != "EDCC3B79-0BAD-11DB-BC1A-00112FDE8B61")) //Nemerle
            {
                TreeView.Hide();
                State = OutlineFileManagerState.DoneLoadingCodeModel;
                return;
            }

            EnvDTE.CodeElements fileCodeElements = fileCodeModel.CodeElements;
            ^^^^^^^^^^^^^^^^^  ЗДЕСЬ ВИСНЕТ ^^^^^^^^^^^^^^^^^^^^^^^^

            int nFileCodeElements = fileCodeElements.Count;

            ...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.