private MockVsTextView CreateTextViewWorker( string contentType, string content, Action <MockVsTextView> onCreate, string file = null ) { var buffer = new MockTextBuffer(content, ContentTypeRegistry.GetContentType(contentType), file); var view = new MockTextView(buffer); var res = new MockVsTextView(_serviceProvider, this, view); view.Properties[typeof(MockVsTextView)] = res; onCreate?.Invoke(res); var classifier = res.Classifier; if (classifier != null) { classifier.GetClassificationSpans(new SnapshotSpan(buffer.CurrentSnapshot, 0, buffer.CurrentSnapshot.Length)); } // Initialize code window LanguageServiceInfo info; if (CachedInfo.LangServicesByName.TryGetValue(contentType, out info)) { var id = info.Attribute.LanguageServiceSid; var serviceProvider = Container.GetExportedValue <MockVsServiceProvider>(); var langInfo = (IVsLanguageInfo)serviceProvider.GetService(id); if (langInfo == null) { throw new NotImplementedException("Unable to get IVsLanguageInfo for " + info.Attribute.LanguageName); } IVsCodeWindowManager mgr; var codeWindow = new MockCodeWindow(serviceProvider, view); view.Properties[typeof(MockCodeWindow)] = codeWindow; if (ErrorHandler.Succeeded(langInfo.GetCodeWindowManager(codeWindow, out mgr))) { if (ErrorHandler.Failed(mgr.AddAdornments())) { Console.WriteLine("Failed to add adornments to text view"); } } } // Initialize intellisense imports var providers = Container.GetExports <IIntellisenseControllerProvider, IContentTypeMetadata>(); foreach (var provider in providers) { foreach (var targetContentType in provider.Metadata.ContentTypes) { if (buffer.ContentType.IsOfType(targetContentType)) { provider.Value.TryCreateIntellisenseController( view, new[] { buffer } ); break; } } } // tell the world we have a new view... foreach (var listener in Container.GetExports <IVsTextViewCreationListener, IContentTypeMetadata>()) { foreach (var targetContentType in listener.Metadata.ContentTypes) { if (buffer.ContentType.IsOfType(targetContentType)) { listener.Value.VsTextViewCreated(res); } } } OnDispose(() => res.Close()); return(res); }
private MockVsTextView CreateTextViewWorker(string contentType, string file, string content) { var buffer = new MockTextBuffer(content, ContentTypeRegistry.GetContentType(contentType), file); foreach (var classifier in Container.GetExports <IClassifierProvider, IContentTypeMetadata>()) { foreach (var targetContentType in classifier.Metadata.ContentTypes) { if (buffer.ContentType.IsOfType(targetContentType)) { classifier.Value.GetClassifier(buffer); } } } var view = new MockTextView(buffer); var res = new MockVsTextView(_serviceProvider, this, view); view.Properties[typeof(MockVsTextView)] = res; // Initialize code window LanguageServiceInfo info; if (CachedInfo.LangServicesByName.TryGetValue(contentType, out info)) { var id = info.Attribute.LanguageServiceSid; var serviceProvider = Container.GetExportedValue <MockVsServiceProvider>(); var langInfo = (IVsLanguageInfo)serviceProvider.GetService(id); IVsCodeWindowManager mgr; var codeWindow = new MockCodeWindow(serviceProvider, view); view.Properties[typeof(MockCodeWindow)] = codeWindow; if (ErrorHandler.Succeeded(langInfo.GetCodeWindowManager(codeWindow, out mgr))) { if (ErrorHandler.Failed(mgr.AddAdornments())) { Console.WriteLine("Failed to add adornments to text view"); } } } // Initialize intellisense imports var providers = Container.GetExports <IIntellisenseControllerProvider, IContentTypeMetadata>(); foreach (var provider in providers) { foreach (var targetContentType in provider.Metadata.ContentTypes) { if (buffer.ContentType.IsOfType(targetContentType)) { provider.Value.TryCreateIntellisenseController( view, new[] { buffer } ); break; } } } // tell the world we have a new view... foreach (var listener in Container.GetExports <IVsTextViewCreationListener, IContentTypeMetadata>()) { foreach (var targetContentType in listener.Metadata.ContentTypes) { if (buffer.ContentType.IsOfType(targetContentType)) { listener.Value.VsTextViewCreated(res); } } } return(res); }