Esempio n. 1
0
        /// <summary>
        /// Retrives contained language host. Typically called from text view connection listener.
        /// </summary>
        /// <param name="textView">Primary text view</param>
        /// <param name="textBuffer">Contained language buffer</param>
        /// <param name="services"></param>
        /// <returns>Contained language host for this buffer and language, <seealso cref="IContainedLanguageHost"/></returns>
        public static IContainedLanguageHost GetHost(ITextView textView, ITextBuffer textBuffer, IServiceContainer services)
        {
            var containedLanguageHost = TryGetHost(textBuffer);

            if (containedLanguageHost == null)
            {
                var containedLanguageHostProvider =
                    ComponentLocatorForOrderedContentType <IContainedLanguageHostProvider> .
                    FindFirstOrderedComponent(services.GetService <ICompositionCatalog>(), textView.TextDataModel.DocumentBuffer.ContentType.TypeName);

                containedLanguageHost = containedLanguageHostProvider?.GetContainedLanguageHost(textView.ToEditorView(), textBuffer.ToEditorBuffer());
            }
            return(containedLanguageHost);
        }
Esempio n. 2
0
        /// <summary>
        /// Retrives contained language host. Typically called from text view connection listener.
        /// </summary>
        /// <param name="textView">Primary text view</param>
        /// <param name="textBuffer">Contained language buffer</param>
        /// <param name="shell"></param>
        /// <returns>Contained language host for this buffer and language, <seealso cref="IContainedLanguageHost"/></returns>
        public static IContainedLanguageHost GetHost(ITextView textView, ITextBuffer textBuffer, ICoreShell shell)
        {
            IContainedLanguageHost containedLanguageHost = TryGetHost(textBuffer);

            if (containedLanguageHost == null)
            {
                var containedLanguageHostProvider =
                    ComponentLocatorForOrderedContentType <IContainedLanguageHostProvider> .
                    FindFirstOrderedComponent(shell, textView.TextDataModel.DocumentBuffer.ContentType.TypeName);

                if (containedLanguageHostProvider != null)
                {
                    containedLanguageHost = containedLanguageHostProvider.GetContainedLanguageHost(textView, textBuffer);
                }
            }

            return(containedLanguageHost);
        }
Esempio n. 3
0
        public static ISettingsStorage GetSettings(ICompositionCatalog compositionCatalog, string contentTypeName)
        {
            ISettingsStorage settingsStorage = null;

            lock (_settingsLock) {
                if (_settingStorageMap.TryGetValue(contentTypeName, out settingsStorage))
                {
                    return(settingsStorage);
                }

                // Need to find the settings using MEF (don't use MEF inside of other locks, that can lead to deadlock)

                var contentTypeRegistry = compositionCatalog.ExportProvider.GetExportedValue <IContentTypeRegistryService>();

                var contentType = contentTypeRegistry.GetContentType(contentTypeName);
                Debug.Assert(contentType != null, "Cannot find content type object for " + contentTypeName);

                settingsStorage = ComponentLocatorForOrderedContentType <IWritableSettingsStorage> .FindFirstOrderedComponent(compositionCatalog.CompositionService, contentType);

                if (settingsStorage == null)
                {
                    settingsStorage = ComponentLocatorForOrderedContentType <ISettingsStorage> .FindFirstOrderedComponent(compositionCatalog.CompositionService, contentType);
                }

                if (settingsStorage == null)
                {
                    var storages = ComponentLocatorForContentType <IWritableSettingsStorage, IComponentContentTypes> .ImportMany(compositionCatalog.CompositionService, contentType);

                    if (storages.Any())
                    {
                        settingsStorage = storages.First().Value;
                    }
                }

                if (settingsStorage == null)
                {
                    var readonlyStorages = ComponentLocatorForContentType <ISettingsStorage, IComponentContentTypes> .ImportMany(compositionCatalog.CompositionService, contentType);

                    if (readonlyStorages.Any())
                    {
                        settingsStorage = readonlyStorages.First().Value;
                    }
                }

                Debug.Assert(settingsStorage != null, String.Format(CultureInfo.CurrentCulture,
                                                                    "Cannot find settings storage export for content type '{0}'", contentTypeName));

                if (_settingStorageMap.ContainsKey(contentTypeName))
                {
                    // some other thread came along and loaded settings already
                    settingsStorage = _settingStorageMap[contentTypeName];
                }
                else
                {
                    _settingStorageMap[contentTypeName] = settingsStorage;
                    settingsStorage.LoadFromStorage();
                }
            }

            return(settingsStorage);
        }