Пример #1
0
 public int CloseView()
 {
     this.intellisenseHost  = null;
     this.bufferCoordinator = null;
     this.languageHost      = null;
     return(VSConstants.S_OK);
 }
        private IWpfTextView GetViewFromIVsIntellisenseHost(IVsIntellisenseHost intellisenseHost)
        {
            // The easiest way (unfortunately) is to get do reflection to get the view from the IVsIntellisenseHost.
            // In practice, the implementations we care about of this are just shim implementations from the editor.
            // The only alternative way to do this is to do very complicated watching of ITextView and IVsTextView
            // lifetimes to correlate them, but that requires running code in those code paths for all views which
            // seems a bit overkill for our needs.
            var field = intellisenseHost
                        .GetType()
                        .GetField(
                "_simpleTextViewWindow",
                System.Reflection.BindingFlags.NonPublic
                | System.Reflection.BindingFlags.Instance
                );

            if (field == null)
            {
                return(null);
            }

            if (!(field.GetValue(intellisenseHost) is IVsTextView view))
            {
                return(null);
            }

            return(_editorAdaptersFactoryService.GetWpfTextView(view));
        }
Пример #3
0
        public int GetTextViewFilter(IVsIntellisenseHost pISenseHost, IOleCommandTarget pNextCmdTarget, out IVsTextViewFilter pTextViewFilter)
        {
            IVsTextLines buffer;

            ErrorHandler.ThrowOnFailure(bufferCoordinator.GetSecondaryBuffer(out buffer));
            bool doOutlining = LanguageService.Preferences.AutoOutlining;

            LanguageService.Preferences.AutoOutlining = false;
            PythonSource source = LanguageService.CreateSource(buffer) as PythonSource;

            LanguageService.Preferences.AutoOutlining = doOutlining;
            CodeWindowManager windowMgr = LanguageService.CreateCodeWindowManager(null, source);

            language.AddCodeWindowManager(windowMgr);
            TextViewWrapper view = new TextViewWrapper(languageHost, pISenseHost, bufferCoordinator, pNextCmdTarget);

            windowMgr.OnNewView(view);
            language.AddSpecialSource(source, view);
            pTextViewFilter = view.InstalledFilter;
            PythonViewFilter pythonFilter = pTextViewFilter as PythonViewFilter;

            if (null != pythonFilter)
            {
                pythonFilter.BufferCoordinator = this.bufferCoordinator;
            }
            return(VSConstants.S_OK);
        }
 internal TextViewWrapper(IVsContainedLanguageHost languageHost, IVsIntellisenseHost intellisenseHost, IVsTextBufferCoordinator coordinator, IOleCommandTarget nextTarget)
 {
     if (null == intellisenseHost) {
         throw new ArgumentNullException("buffer");
     }
     this.intellisenseHost = intellisenseHost;
     this.bufferCoordinator = coordinator;
     this.languageHost = languageHost;
     this.nextTarget = nextTarget;
 }
Пример #5
0
 internal TextViewWrapper(IVsContainedLanguageHost languageHost, IVsIntellisenseHost intellisenseHost, IVsTextBufferCoordinator coordinator, IOleCommandTarget nextTarget)
 {
     if (null == intellisenseHost)
     {
         throw new ArgumentNullException("buffer");
     }
     this.intellisenseHost  = intellisenseHost;
     this.bufferCoordinator = coordinator;
     this.languageHost      = languageHost;
     this.nextTarget        = nextTarget;
 }
        public int GetTextViewFilter(
            IVsIntellisenseHost intellisenseHost,
            IOleCommandTarget nextCmdTarget,
            out IVsTextViewFilter textViewFilter)
        {
            var wpfTextView = GetViewFromIVsIntellisenseHost(intellisenseHost);

            if (wpfTextView == null)
            {
                textViewFilter = null;
                return(VSConstants.E_FAIL);
            }

            textViewFilter = new VenusCommandFilter(wpfTextView, SubjectBuffer, nextCmdTarget, ComponentModel);

            return(VSConstants.S_OK);
        }
        public int GetTextViewFilter(
            IVsIntellisenseHost intellisenseHost,
            IOleCommandTarget nextCmdTarget,
            out IVsTextViewFilter textViewFilter)
        {
            var wpfTextView = GetViewFromIVsIntellisenseHost(intellisenseHost);

            if (wpfTextView == null)
            {
                textViewFilter = null;
                return(VSConstants.E_FAIL);
            }

            textViewFilter = new VenusCommandFilter <TPackage, TLanguageService>(_languageService, wpfTextView, SubjectBuffer, nextCmdTarget, _editorAdaptersFactoryService);

            return(VSConstants.S_OK);
        }
 public int GetTextViewFilter(IVsIntellisenseHost pISenseHost, IOleCommandTarget pNextCmdTarget, out IVsTextViewFilter pTextViewFilter)
 {
     IVsTextLines buffer;
     ErrorHandler.ThrowOnFailure(bufferCoordinator.GetSecondaryBuffer(out buffer));
     bool doOutlining = LanguageService.Preferences.AutoOutlining;
     LanguageService.Preferences.AutoOutlining = false;
     PythonSource source = LanguageService.CreateSource(buffer) as PythonSource;
     LanguageService.Preferences.AutoOutlining = doOutlining;
     CodeWindowManager windowMgr = LanguageService.CreateCodeWindowManager(null, source);
     language.AddCodeWindowManager(windowMgr);
     TextViewWrapper view = new TextViewWrapper(languageHost, pISenseHost, bufferCoordinator, pNextCmdTarget);
     windowMgr.OnNewView(view);
     language.AddSpecialSource(source, view);
     pTextViewFilter = view.InstalledFilter;
     PythonViewFilter pythonFilter = pTextViewFilter as PythonViewFilter;
     if (null != pythonFilter) {
         pythonFilter.BufferCoordinator = this.bufferCoordinator;
     }
     return VSConstants.S_OK;
 }
 public int CloseView()
 {
     this.intellisenseHost = null;
     this.bufferCoordinator = null;
     this.languageHost = null;
     return VSConstants.S_OK;
 }
Пример #10
0
        public int GetTextViewFilter(IVsIntellisenseHost pISenseHost, IOleCommandTarget pNextCmdTarget, out IVsTextViewFilter pTextViewFilter)
        {
            pTextViewFilter = null;

            IVsTextLines buffer;

            ErrorHandler.ThrowOnFailure(bufferCoordinator.GetSecondaryBuffer(out buffer));

            var secondaryFilePath = FilePathUtilities.GetFilePath(buffer);

            if (secondaryFilePath == null)
            {
                secondaryFilePath = NemerleSource.GetStubFileForSecondaryBuffer(buffer);
            }

            var secondaryFileIndex = Location.GetFileIndex(secondaryFilePath);
            var primaryFileindex   = Location.GetFileIndex(_filePath);

            bool doOutlining = LanguageService.Preferences.AutoOutlining;

            LanguageService.Preferences.AutoOutlining = false;

            if (_projectInfo != null && LanguageService.GetSource(buffer) == null)
            {
                // создаем и регистрируем в проекте временный source, чтобы не сломалась логика
                // конструктора NemerleSource (см вызов LanguageService.AddEditableSource)
                //_projectInfo.ReplaseOrAddSource(new FileNemerleSource(secondaryFileIndex));
                _projectInfo.AddEditableSource((NemerleSource)LanguageService.CreateSource(buffer));
            }

            NemerleSource source = LanguageService.GetOrCreateSource(buffer) as NemerleSource;

            source.SetBufferCoordinator(bufferCoordinator);

            if (_projectInfo != null)
            {
                _projectInfo.Engine.RequestOnBuildTypesTree();
            }

            LanguageService.Preferences.AutoOutlining = doOutlining;

            _windowManager = LanguageService.CreateCodeWindowManager(null, source);

            language.AddCodeWindowManager(_windowManager);

            // увеличиваем внутренний счетчик openCount, для того чтобы впоследствии корректно отработала логика закрытия соурса
            source.Open();

            TextViewWrapper view = new TextViewWrapper(languageHost, pISenseHost, bufferCoordinator, pNextCmdTarget, source);

            _windowManager.OnNewView(view);

            pTextViewFilter = view.InstalledFilter;
            NemerleViewFilter nemerleFilter = pTextViewFilter as NemerleViewFilter;

            if (null != nemerleFilter)
            {
                nemerleFilter.BufferCoordinator = this.bufferCoordinator;
            }

            // сохраним значение DocumentEvents в переменной класса, чтобы исключить преждевременное уничтожение
            // объекта и автоматическоей отписывание от событий.
            //
            // Источник решения:
            // PRB: Visual Studio .NET events being disconnected from add-in (http://www.mztools.com/articles/2005/mz2005012.aspx)
            _documentEvents = _projectItem.DTE.Events.get_DocumentEvents(_projectItem.Document);

            _documentEvents.DocumentClosing += _documentClosingEventHandler;

            return(VSConstants.S_OK);
        }
Пример #11
0
        public int GetTextViewFilter(IVsIntellisenseHost pISenseHost, IOleCommandTarget pNextCmdTarget, out IVsTextViewFilter pTextViewFilter)
        {
            pTextViewFilter = null;

            IVsTextLines buffer;
            ErrorHandler.ThrowOnFailure(bufferCoordinator.GetSecondaryBuffer(out buffer));

            var secondaryFilePath = FilePathUtilities.GetFilePath(buffer);

            if (secondaryFilePath == null)
                secondaryFilePath = NemerleSource.GetStubFileForSecondaryBuffer(buffer);

            var secondaryFileIndex = Location.GetFileIndex(secondaryFilePath);
            var primaryFileindex = Location.GetFileIndex(_filePath);

            bool doOutlining = LanguageService.Preferences.AutoOutlining;
            LanguageService.Preferences.AutoOutlining = false;

            if (_projectInfo != null && LanguageService.GetSource(buffer) == null)
            {
                // создаем и регистрируем в проекте временный source, чтобы не сломалась логика
                // конструктора NemerleSource (см вызов LanguageService.AddEditableSource)
                //_projectInfo.ReplaseOrAddSource(new FileNemerleSource(secondaryFileIndex));
                _projectInfo.AddEditableSource((NemerleSource)LanguageService.CreateSource(buffer));
            }

            NemerleSource source = LanguageService.GetOrCreateSource(buffer) as NemerleSource;
            source.SetBufferCoordinator(bufferCoordinator);

            if (_projectInfo != null)
            {
                _projectInfo.Engine.RequestOnBuildTypesTree();
            }

            LanguageService.Preferences.AutoOutlining = doOutlining;

            _windowManager = LanguageService.CreateCodeWindowManager(null, source);

            language.AddCodeWindowManager(_windowManager);

            // увеличиваем внутренний счетчик openCount, для того чтобы впоследствии корректно отработала логика закрытия соурса
            source.Open();

            TextViewWrapper view = new TextViewWrapper(languageHost, pISenseHost, bufferCoordinator, pNextCmdTarget, source);
            _windowManager.OnNewView(view);

            pTextViewFilter = view.InstalledFilter;
            NemerleViewFilter nemerleFilter = pTextViewFilter as NemerleViewFilter;
            if (null != nemerleFilter)
                nemerleFilter.BufferCoordinator = this.bufferCoordinator;

            // сохраним значение DocumentEvents в переменной класса, чтобы исключить преждевременное уничтожение
            // объекта и автоматическоей отписывание от событий.
            //
            // Источник решения:
            // PRB: Visual Studio .NET events being disconnected from add-in (http://www.mztools.com/articles/2005/mz2005012.aspx)
            _documentEvents = _projectItem.DTE.Events.get_DocumentEvents(_projectItem.Document);

            _documentEvents.DocumentClosing += _documentClosingEventHandler;

            return VSConstants.S_OK;
        }