public async Task LoadExtensionAsync(PythonAnalysisExtensionParams extension, IServiceContainer services, CancellationToken cancellationToken)
 {
     if (!await LoadExtensionAsyncOld(extension, cancellationToken))
     {
         await LoadExtensionAsyncNew(extension, services, cancellationToken);
     }
 }
Beispiel #2
0
        public async Task LoadExtensionAsync(PythonAnalysisExtensionParams extension, IServiceContainer services, CancellationToken cancellationToken)
        {
            try {
                var provider = ActivateObject <ILanguageServerExtensionProvider>(extension.assembly, extension.typeName, null);
                if (provider == null)
                {
                    LogMessage(MessageType.Error, $"Extension provider {extension.assembly} {extension.typeName} failed to load");
                    return;
                }

                var ext = await provider.CreateAsync(this, extension.properties ?? new Dictionary <string, object>(), cancellationToken);

                if (ext == null)
                {
                    LogMessage(MessageType.Error, $"Extension provider {extension.assembly} {extension.typeName} returned null");
                    return;
                }

                string n = null;
                try {
                    n = ext.Name;
                    await ext.Initialize(services, cancellationToken);
                } catch (NotImplementedException) {
                } catch (NotSupportedException) {
                }

                if (!string.IsNullOrEmpty(n))
                {
                    _extensions.AddOrUpdate(n, ext, (_, previous) => {
                        (previous as IDisposable)?.Dispose();
                        return(ext);
                    });
                }
            } catch (Exception ex) {
                LogMessage(MessageType.Error, $"Error loading extension {extension.typeName} from'{extension.assembly}': {ex}");
            }
        }
        private async Task <bool> LoadExtensionAsyncOld(PythonAnalysisExtensionParams extension, CancellationToken cancellationToken)
        {
            try {
                var provider = ActivateObject <PythonTools.Analysis.LanguageServer.ILanguageServerExtensionProvider>(extension.assembly, extension.typeName, null);
                if (provider == null)
                {
                    return(false);
                }

                _oldServer = new PythonTools.Analysis.LanguageServer.Server();
                var ext = await provider.CreateAsync(_oldServer, extension.properties ?? new Dictionary <string, object>(), cancellationToken);

                if (ext == null)
                {
                    LogMessage(MessageType.Error, $"Extension provider {extension.assembly} {extension.typeName} returned null");
                    return(false);
                }

                string n = null;
                try {
                    n = ext.Name;
                } catch (NotImplementedException) {
                } catch (NotSupportedException) {
                }

                if (!string.IsNullOrEmpty(n))
                {
                    _oldExtensions.AddOrUpdate(n, ext, (_, previous) => {
                        (previous as IDisposable)?.Dispose();
                        return(ext);
                    });
                }
                return(true);
            } catch (Exception) {
            }
            return(false);
        }