public IIntellisenseController TryCreateIntellisenseController(ITextView textView, IList<ITextBuffer> subjectBuffers)
        {
            IntellisenseController controller;
            if (!textView.Properties.TryGetProperty<IntellisenseController>(typeof(IntellisenseController), out controller)) {
                controller = new IntellisenseController(this, textView);
            }

            var analyzer = textView.GetAnalyzer();
            if (analyzer != null) {
                var buffer = subjectBuffers[0];

                foreach (var subjBuf in subjectBuffers) {
                    // TODO: Check whether `buffer` should be `subjBuf`
                    controller.PropagateAnalyzer(buffer);
                }

                var entry = analyzer.MonitorTextBuffer(textView, buffer);
                textView.Closed += (sender, args) => analyzer.StopMonitoringTextBuffer(entry.BufferParser);

                for (int i = 1; i < subjectBuffers.Count; i++) {
                    entry.BufferParser.AddBuffer(subjectBuffers[i]);
                }
                controller.SetBufferParser(entry.BufferParser);
            }
            return controller;
        }
 internal static IntellisenseController GetOrCreateController(IComponentModel model, ITextView textView)
 {
     IntellisenseController controller;
     if (!textView.Properties.TryGetProperty<IntellisenseController>(typeof(IntellisenseController), out controller)) {
         var intellisenseControllerProvider = (
            from export in model.DefaultExportProvider.GetExports<IIntellisenseControllerProvider, IContentTypeMetadata>()
            from exportedContentType in export.Metadata.ContentTypes
            where exportedContentType == JCoreConstants.ContentType && export.Value.GetType() == typeof(IntellisenseControllerProvider)
            select export.Value
         ).First();
         controller = new IntellisenseController((IntellisenseControllerProvider)intellisenseControllerProvider, textView);
     }
     return controller;
 }