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)); }
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; }
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; }
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); }
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; }