From 4486c87f592b7d7114e86f395188b8c44b3c8bfa Mon Sep 17 00:00:00 2001 From: Dmitry Goncharenko Date: Sun, 1 Sep 2019 01:02:24 -0700 Subject: [PATCH 1/7] Support plugins configuration in omnisharp.json --- .../CommandLineApplicationExtensions.cs | 12 ++++++++++-- src/OmniSharp.Http.Driver/Program.cs | 3 ++- .../LanguageServerHost.cs | 2 +- .../Options/RoslynExtensionsOptions.cs | 6 +++++- src/OmniSharp.Stdio.Driver/Program.cs | 4 ++-- 5 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/OmniSharp.Host/CommandLineApplicationExtensions.cs b/src/OmniSharp.Host/CommandLineApplicationExtensions.cs index 4f00e0642b..5f2469d7a3 100644 --- a/src/OmniSharp.Host/CommandLineApplicationExtensions.cs +++ b/src/OmniSharp.Host/CommandLineApplicationExtensions.cs @@ -1,4 +1,6 @@ using System.Linq; +using Microsoft.Extensions.Configuration; +using OmniSharp.Options; using OmniSharp.Plugins; using OmniSharp.Services; @@ -15,9 +17,15 @@ public static OmniSharpEnvironment CreateEnvironment(this CommandLineApplication application.OtherArgs.ToArray()); } - public static PluginAssemblies CreatePluginAssemblies(this CommandLineApplication application) + public static PluginAssemblies CreatePluginAssemblies(this CommandLineApplication application, + IConfigurationRoot configuration, + OmniSharpEnvironment environment) { - return new PluginAssemblies(application.Plugin); + var pluginsConfiguration = configuration.GetSection("Plugins"); + var extensionsOptions = new OmniSharpExtensionsOptions(); + ConfigurationBinder.Bind(pluginsConfiguration, extensionsOptions); + + return new PluginAssemblies(application.Plugin.Concat(extensionsOptions.GetNormalizedLocationPaths(environment))); } } } diff --git a/src/OmniSharp.Http.Driver/Program.cs b/src/OmniSharp.Http.Driver/Program.cs index 7830e2f144..cec1ffe12a 100644 --- a/src/OmniSharp.Http.Driver/Program.cs +++ b/src/OmniSharp.Http.Driver/Program.cs @@ -14,7 +14,8 @@ static int Main(string[] args) => HostHelpers.Start(() => Configuration.ZeroBasedIndices = application.ZeroBasedIndices; var writer = new SharedTextWriter(Console.Out); - var plugins = application.CreatePluginAssemblies(); + var configuration = new ConfigurationBuilder(environment).Build(); + var plugins = application.CreatePluginAssemblies(configuration, environment); var host = new Host(environment, writer, plugins, application.Port, application.Interface); host.Start(); diff --git a/src/OmniSharp.LanguageServerProtocol/LanguageServerHost.cs b/src/OmniSharp.LanguageServerProtocol/LanguageServerHost.cs index e5a6662283..8cd5c36402 100644 --- a/src/OmniSharp.LanguageServerProtocol/LanguageServerHost.cs +++ b/src/OmniSharp.LanguageServerProtocol/LanguageServerHost.cs @@ -91,7 +91,7 @@ private void CreateCompositionHost(InitializeParams initializeParams) _eventEmitter = new LanguageServerEventEmitter(); _serviceProvider = CompositionHostBuilder.CreateDefaultServiceProvider(_environment, configurationRoot, _eventEmitter, _services); - var plugins = _application.CreatePluginAssemblies(); + var plugins = _application.CreatePluginAssemblies(configurationRoot, _environment); var assemblyLoader = _serviceProvider.GetRequiredService(); var compositionHostBuilder = new CompositionHostBuilder(_serviceProvider) diff --git a/src/OmniSharp.Shared/Options/RoslynExtensionsOptions.cs b/src/OmniSharp.Shared/Options/RoslynExtensionsOptions.cs index ac875a47a8..9518e9bbeb 100644 --- a/src/OmniSharp.Shared/Options/RoslynExtensionsOptions.cs +++ b/src/OmniSharp.Shared/Options/RoslynExtensionsOptions.cs @@ -5,10 +5,14 @@ namespace OmniSharp.Options { - public class RoslynExtensionsOptions + public class RoslynExtensionsOptions : OmniSharpExtensionsOptions { public bool EnableAnalyzersSupport { get; set; } public int DocumentAnalysisTimeoutMs { get; set; } = 10 * 1000; + } + + public class OmniSharpExtensionsOptions + { public string[] LocationPaths { get; set; } diff --git a/src/OmniSharp.Stdio.Driver/Program.cs b/src/OmniSharp.Stdio.Driver/Program.cs index 94917f163b..49c45e9918 100644 --- a/src/OmniSharp.Stdio.Driver/Program.cs +++ b/src/OmniSharp.Stdio.Driver/Program.cs @@ -49,15 +49,15 @@ static int Main(string[] args) => HostHelpers.Start(() => var environment = application.CreateEnvironment(); Configuration.ZeroBasedIndices = application.ZeroBasedIndices; - var configuration = new ConfigurationBuilder(environment).Build(); var writer = new SharedTextWriter(output); + var configuration = new ConfigurationBuilder(environment).Build(); var serviceProvider = CompositionHostBuilder.CreateDefaultServiceProvider(environment, configuration, new StdioEventEmitter(writer), configureLogging: builder => builder.AddStdio(writer)); var loggerFactory = serviceProvider.GetRequiredService(); var assemblyLoader = serviceProvider.GetRequiredService(); - var plugins = application.CreatePluginAssemblies(); + var plugins = application.CreatePluginAssemblies(configuration, environment); var compositionHostBuilder = new CompositionHostBuilder(serviceProvider) .WithOmniSharpAssemblies() From e1febc967024df53f663c721c6113b8caa8e35c1 Mon Sep 17 00:00:00 2001 From: Dmitry Goncharenko Date: Sun, 29 Sep 2019 14:12:15 -0700 Subject: [PATCH 2/7] Noop change to trigger a build --- src/OmniSharp.Shared/Options/RoslynExtensionsOptions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OmniSharp.Shared/Options/RoslynExtensionsOptions.cs b/src/OmniSharp.Shared/Options/RoslynExtensionsOptions.cs index 9518e9bbeb..5e2d8569b3 100644 --- a/src/OmniSharp.Shared/Options/RoslynExtensionsOptions.cs +++ b/src/OmniSharp.Shared/Options/RoslynExtensionsOptions.cs @@ -36,4 +36,4 @@ public IEnumerable GetNormalizedLocationPaths(IOmniSharpEnvironment env) return normalizePaths; } } -} +} \ No newline at end of file From 9bbcfa8785dfff69df31b45e5a8fb47ef2a00274 Mon Sep 17 00:00:00 2001 From: Dmitry Goncharenko Date: Sat, 5 Oct 2019 14:40:33 -0700 Subject: [PATCH 3/7] Use strongly typed OmniSharpOptions for plugins --- .../Services/IAssemblyLoader.cs | 18 +++++++++++++++--- .../CommandLineApplicationExtensions.cs | 9 ++------- src/OmniSharp.Http.Driver/Program.cs | 4 +--- src/OmniSharp.Http/Host.cs | 9 +++++---- src/OmniSharp.Http/Startup.cs | 16 +++++++++++++++- .../LanguageServerHost.cs | 7 +++++-- .../Options/OmniSharpOptions.cs | 2 ++ src/OmniSharp.Stdio.Driver/Program.cs | 10 +++++++--- 8 files changed, 52 insertions(+), 23 deletions(-) diff --git a/src/OmniSharp.Abstractions/Services/IAssemblyLoader.cs b/src/OmniSharp.Abstractions/Services/IAssemblyLoader.cs index 48b4c6e43f..a0eb50476e 100644 --- a/src/OmniSharp.Abstractions/Services/IAssemblyLoader.cs +++ b/src/OmniSharp.Abstractions/Services/IAssemblyLoader.cs @@ -1,4 +1,5 @@ -using System; +using Microsoft.Extensions.Logging; +using System; using System.Collections.Generic; using System.IO; using System.Reflection; @@ -54,11 +55,22 @@ public static Assembly LoadByAssemblyNameOrPath( } } - public static IEnumerable LoadByAssemblyNameOrPath(this IAssemblyLoader loader, IEnumerable assemblyNames) + public static IEnumerable LoadByAssemblyNameOrPath(this IAssemblyLoader loader, ILogger logger, IEnumerable assemblyNames) { foreach (var assemblyName in assemblyNames) { - yield return loader.LoadByAssemblyNameOrPath(assemblyName); + Assembly assembly; + try + { + assembly = loader.LoadByAssemblyNameOrPath(assemblyName); + } + catch (Exception ex) + { + logger.LogError(ex, $"Failed to load assembly by name or path: {assemblyName}"); + continue; + } + + yield return assembly; } } } diff --git a/src/OmniSharp.Host/CommandLineApplicationExtensions.cs b/src/OmniSharp.Host/CommandLineApplicationExtensions.cs index 5f2469d7a3..11bad17e5a 100644 --- a/src/OmniSharp.Host/CommandLineApplicationExtensions.cs +++ b/src/OmniSharp.Host/CommandLineApplicationExtensions.cs @@ -1,5 +1,4 @@ using System.Linq; -using Microsoft.Extensions.Configuration; using OmniSharp.Options; using OmniSharp.Plugins; using OmniSharp.Services; @@ -18,14 +17,10 @@ public static OmniSharpEnvironment CreateEnvironment(this CommandLineApplication } public static PluginAssemblies CreatePluginAssemblies(this CommandLineApplication application, - IConfigurationRoot configuration, + OmniSharpOptions options, OmniSharpEnvironment environment) { - var pluginsConfiguration = configuration.GetSection("Plugins"); - var extensionsOptions = new OmniSharpExtensionsOptions(); - ConfigurationBinder.Bind(pluginsConfiguration, extensionsOptions); - - return new PluginAssemblies(application.Plugin.Concat(extensionsOptions.GetNormalizedLocationPaths(environment))); + return new PluginAssemblies(application.Plugin.Concat(options.Plugins.GetNormalizedLocationPaths(environment))); } } } diff --git a/src/OmniSharp.Http.Driver/Program.cs b/src/OmniSharp.Http.Driver/Program.cs index cec1ffe12a..7bc7673d87 100644 --- a/src/OmniSharp.Http.Driver/Program.cs +++ b/src/OmniSharp.Http.Driver/Program.cs @@ -14,10 +14,8 @@ static int Main(string[] args) => HostHelpers.Start(() => Configuration.ZeroBasedIndices = application.ZeroBasedIndices; var writer = new SharedTextWriter(Console.Out); - var configuration = new ConfigurationBuilder(environment).Build(); - var plugins = application.CreatePluginAssemblies(configuration, environment); - var host = new Host(environment, writer, plugins, application.Port, application.Interface); + var host = new Host(environment, writer, application.Plugin, application.Port, application.Interface); host.Start(); return 0; diff --git a/src/OmniSharp.Http/Host.cs b/src/OmniSharp.Http/Host.cs index 37233e4aff..164574c99b 100644 --- a/src/OmniSharp.Http/Host.cs +++ b/src/OmniSharp.Http/Host.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Diagnostics; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; @@ -14,20 +15,20 @@ internal class Host { private readonly IOmniSharpEnvironment _environment; private readonly ISharedTextWriter _sharedTextWriter; - private readonly PluginAssemblies _pluginAssemblies; + private readonly IEnumerable _commandLinePlugins; private readonly int _serverPort; private readonly string _serverInterface; public Host( IOmniSharpEnvironment environment, ISharedTextWriter sharedTextWriter, - PluginAssemblies pluginAssemblies, + IEnumerable commandLinePlugins, int serverPort, string serverInterface) { _environment = environment; _sharedTextWriter = sharedTextWriter; - _pluginAssemblies = pluginAssemblies; + _commandLinePlugins = commandLinePlugins; _serverPort = serverPort; _serverInterface = serverInterface; } @@ -44,7 +45,7 @@ public void Start() serviceCollection.AddSingleton(_environment); serviceCollection.AddSingleton(_sharedTextWriter); serviceCollection.AddSingleton(NullEventEmitter.Instance); - serviceCollection.AddSingleton(_pluginAssemblies); + serviceCollection.AddSingleton(_commandLinePlugins); serviceCollection.AddSingleton(new HttpEnvironment { Port = _serverPort }); }) .UseUrls($"http://{_serverInterface}:{_serverPort}") diff --git a/src/OmniSharp.Http/Startup.cs b/src/OmniSharp.Http/Startup.cs index fd28e8a22b..ef13e9dbf3 100644 --- a/src/OmniSharp.Http/Startup.cs +++ b/src/OmniSharp.Http/Startup.cs @@ -1,11 +1,16 @@ using System; +using System.Collections.Generic; using System.Composition.Hosting; +using System.Linq; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Diagnostics; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; using OmniSharp.Eventing; using OmniSharp.Http.Middleware; +using OmniSharp.Options; +using OmniSharp.Plugins; using OmniSharp.Roslyn; using OmniSharp.Services; using OmniSharp.Utilities; @@ -17,11 +22,13 @@ internal class Startup private readonly IOmniSharpEnvironment _environment; private readonly IEventEmitter _eventEmitter; private CompositionHost _compositionHost; + private IEnumerable _commandLinePlugins; - public Startup(IOmniSharpEnvironment environment, IEventEmitter eventEmitter, ISharedTextWriter writer) + public Startup(IOmniSharpEnvironment environment, IEventEmitter eventEmitter, IEnumerable commandLinePlugins) { _environment = environment; _eventEmitter = eventEmitter; + _commandLinePlugins = commandLinePlugins; } public IServiceProvider ConfigureServices(IServiceCollection services) @@ -45,8 +52,15 @@ public IServiceProvider ConfigureServices(IServiceCollection services) !category.Equals(projectEventForwarder, StringComparison.OrdinalIgnoreCase))); }); + var options = serviceProvider.GetRequiredService>(); + var plugins = new PluginAssemblies(_commandLinePlugins.Concat(options.CurrentValue.Plugins.GetNormalizedLocationPaths(_environment))); + + var loggerFactory = serviceProvider.GetRequiredService(); + var logger = loggerFactory.CreateLogger(); + var assemblyLoader = serviceProvider.GetRequiredService(); _compositionHost = new CompositionHostBuilder(serviceProvider) .WithOmniSharpAssemblies() + .WithAssemblies(assemblyLoader.LoadByAssemblyNameOrPath(logger, plugins.AssemblyNames).ToArray()) .Build(); return serviceProvider; diff --git a/src/OmniSharp.LanguageServerProtocol/LanguageServerHost.cs b/src/OmniSharp.LanguageServerProtocol/LanguageServerHost.cs index 8cd5c36402..5057e111da 100644 --- a/src/OmniSharp.LanguageServerProtocol/LanguageServerHost.cs +++ b/src/OmniSharp.LanguageServerProtocol/LanguageServerHost.cs @@ -8,6 +8,7 @@ using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; using OmniSharp.Extensions.JsonRpc; using OmniSharp.Extensions.LanguageServer.Protocol.Models; using OmniSharp.Extensions.LanguageServer.Protocol.Server; @@ -16,6 +17,7 @@ using OmniSharp.LanguageServerProtocol.Handlers; using OmniSharp.Mef; using OmniSharp.Models.Diagnostics; +using OmniSharp.Options; using OmniSharp.Roslyn; using OmniSharp.Services; using OmniSharp.Utilities; @@ -91,13 +93,14 @@ private void CreateCompositionHost(InitializeParams initializeParams) _eventEmitter = new LanguageServerEventEmitter(); _serviceProvider = CompositionHostBuilder.CreateDefaultServiceProvider(_environment, configurationRoot, _eventEmitter, _services); - var plugins = _application.CreatePluginAssemblies(configurationRoot, _environment); + var options = _serviceProvider.GetRequiredService>(); + var plugins = _application.CreatePluginAssemblies(options.CurrentValue, _environment); var assemblyLoader = _serviceProvider.GetRequiredService(); var compositionHostBuilder = new CompositionHostBuilder(_serviceProvider) .WithOmniSharpAssemblies() .WithAssemblies(typeof(LanguageServerHost).Assembly) - .WithAssemblies(assemblyLoader.LoadByAssemblyNameOrPath(plugins.AssemblyNames).ToArray()); + .WithAssemblies(assemblyLoader.LoadByAssemblyNameOrPath(_logger, plugins.AssemblyNames).ToArray()); _compositionHost = compositionHostBuilder.Build(); diff --git a/src/OmniSharp.Shared/Options/OmniSharpOptions.cs b/src/OmniSharp.Shared/Options/OmniSharpOptions.cs index 6c35796681..ce27f4f8fb 100644 --- a/src/OmniSharp.Shared/Options/OmniSharpOptions.cs +++ b/src/OmniSharp.Shared/Options/OmniSharpOptions.cs @@ -11,5 +11,7 @@ public class OmniSharpOptions public FileOptions FileOptions { get; set; } = new FileOptions(); public RenameOptions RenameOptions { get; set; } = new RenameOptions(); + + public OmniSharpExtensionsOptions Plugins { get; set; } = new OmniSharpExtensionsOptions(); } } diff --git a/src/OmniSharp.Stdio.Driver/Program.cs b/src/OmniSharp.Stdio.Driver/Program.cs index 49c45e9918..ec2bbacb49 100644 --- a/src/OmniSharp.Stdio.Driver/Program.cs +++ b/src/OmniSharp.Stdio.Driver/Program.cs @@ -4,7 +4,9 @@ using System.Threading; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; using OmniSharp.LanguageServerProtocol; +using OmniSharp.Options; using OmniSharp.Services; using OmniSharp.Stdio.Eventing; using OmniSharp.Stdio.Logging; @@ -49,19 +51,21 @@ static int Main(string[] args) => HostHelpers.Start(() => var environment = application.CreateEnvironment(); Configuration.ZeroBasedIndices = application.ZeroBasedIndices; - var writer = new SharedTextWriter(output); var configuration = new ConfigurationBuilder(environment).Build(); + var writer = new SharedTextWriter(output); var serviceProvider = CompositionHostBuilder.CreateDefaultServiceProvider(environment, configuration, new StdioEventEmitter(writer), configureLogging: builder => builder.AddStdio(writer)); var loggerFactory = serviceProvider.GetRequiredService(); var assemblyLoader = serviceProvider.GetRequiredService(); - var plugins = application.CreatePluginAssemblies(configuration, environment); + var options = serviceProvider.GetRequiredService>(); + var plugins = application.CreatePluginAssemblies(options.CurrentValue, environment); + var logger = loggerFactory.CreateLogger(); var compositionHostBuilder = new CompositionHostBuilder(serviceProvider) .WithOmniSharpAssemblies() - .WithAssemblies(assemblyLoader.LoadByAssemblyNameOrPath(plugins.AssemblyNames).ToArray()); + .WithAssemblies(assemblyLoader.LoadByAssemblyNameOrPath(logger, plugins.AssemblyNames).ToArray()); using (var host = new Host(input, writer, environment, serviceProvider, compositionHostBuilder, loggerFactory, cancellation)) { From c178ac529a2b7a6e39c96036a20582357596d79b Mon Sep 17 00:00:00 2001 From: Dmitry Goncharenko Date: Sat, 9 Nov 2019 12:49:23 -0800 Subject: [PATCH 4/7] Removed extra empty line --- src/OmniSharp.Shared/Options/RoslynExtensionsOptions.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/OmniSharp.Shared/Options/RoslynExtensionsOptions.cs b/src/OmniSharp.Shared/Options/RoslynExtensionsOptions.cs index 5e2d8569b3..f603aafc9b 100644 --- a/src/OmniSharp.Shared/Options/RoslynExtensionsOptions.cs +++ b/src/OmniSharp.Shared/Options/RoslynExtensionsOptions.cs @@ -13,7 +13,6 @@ public class RoslynExtensionsOptions : OmniSharpExtensionsOptions public class OmniSharpExtensionsOptions { - public string[] LocationPaths { get; set; } public IEnumerable GetNormalizedLocationPaths(IOmniSharpEnvironment env) From 39e025f2afd1b356b27c3537f9bb8e48562aece3 Mon Sep 17 00:00:00 2001 From: Dmitry Goncharenko Date: Tue, 19 Nov 2019 19:16:19 -0800 Subject: [PATCH 5/7] Use PluginAssemblies to for plugins from command line --- src/OmniSharp.Http.Driver/Program.cs | 4 +++- src/OmniSharp.Http/Host.cs | 5 ++--- src/OmniSharp.Http/Startup.cs | 9 ++++----- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/OmniSharp.Http.Driver/Program.cs b/src/OmniSharp.Http.Driver/Program.cs index 7bc7673d87..d0cdb870d2 100644 --- a/src/OmniSharp.Http.Driver/Program.cs +++ b/src/OmniSharp.Http.Driver/Program.cs @@ -1,4 +1,5 @@ using System; +using OmniSharp.Plugins; using OmniSharp.Services; namespace OmniSharp.Http.Driver @@ -14,8 +15,9 @@ static int Main(string[] args) => HostHelpers.Start(() => Configuration.ZeroBasedIndices = application.ZeroBasedIndices; var writer = new SharedTextWriter(Console.Out); + var commandLinePlugins = new PluginAssemblies(application.Plugin); - var host = new Host(environment, writer, application.Plugin, application.Port, application.Interface); + var host = new Host(environment, writer, commandLinePlugins, application.Port, application.Interface); host.Start(); return 0; diff --git a/src/OmniSharp.Http/Host.cs b/src/OmniSharp.Http/Host.cs index 164574c99b..ae35b31459 100644 --- a/src/OmniSharp.Http/Host.cs +++ b/src/OmniSharp.Http/Host.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Diagnostics; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; @@ -15,14 +14,14 @@ internal class Host { private readonly IOmniSharpEnvironment _environment; private readonly ISharedTextWriter _sharedTextWriter; - private readonly IEnumerable _commandLinePlugins; + private readonly PluginAssemblies _commandLinePlugins; private readonly int _serverPort; private readonly string _serverInterface; public Host( IOmniSharpEnvironment environment, ISharedTextWriter sharedTextWriter, - IEnumerable commandLinePlugins, + PluginAssemblies commandLinePlugins, int serverPort, string serverInterface) { diff --git a/src/OmniSharp.Http/Startup.cs b/src/OmniSharp.Http/Startup.cs index ef13e9dbf3..39833c61aa 100644 --- a/src/OmniSharp.Http/Startup.cs +++ b/src/OmniSharp.Http/Startup.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Composition.Hosting; using System.Linq; using Microsoft.AspNetCore.Builder; @@ -22,9 +21,9 @@ internal class Startup private readonly IOmniSharpEnvironment _environment; private readonly IEventEmitter _eventEmitter; private CompositionHost _compositionHost; - private IEnumerable _commandLinePlugins; + private PluginAssemblies _commandLinePlugins; - public Startup(IOmniSharpEnvironment environment, IEventEmitter eventEmitter, IEnumerable commandLinePlugins) + public Startup(IOmniSharpEnvironment environment, IEventEmitter eventEmitter, PluginAssemblies commandLinePlugins) { _environment = environment; _eventEmitter = eventEmitter; @@ -53,14 +52,14 @@ public IServiceProvider ConfigureServices(IServiceCollection services) }); var options = serviceProvider.GetRequiredService>(); - var plugins = new PluginAssemblies(_commandLinePlugins.Concat(options.CurrentValue.Plugins.GetNormalizedLocationPaths(_environment))); + var plugins = _commandLinePlugins.AssemblyNames.Concat(options.CurrentValue.Plugins.GetNormalizedLocationPaths(_environment)); var loggerFactory = serviceProvider.GetRequiredService(); var logger = loggerFactory.CreateLogger(); var assemblyLoader = serviceProvider.GetRequiredService(); _compositionHost = new CompositionHostBuilder(serviceProvider) .WithOmniSharpAssemblies() - .WithAssemblies(assemblyLoader.LoadByAssemblyNameOrPath(logger, plugins.AssemblyNames).ToArray()) + .WithAssemblies(assemblyLoader.LoadByAssemblyNameOrPath(logger, plugins).ToArray()) .Build(); return serviceProvider; From 65899df47ed31d3794bdb0ff565bb1421907163b Mon Sep 17 00:00:00 2001 From: Dmitry Goncharenko Date: Tue, 19 Nov 2019 19:31:57 -0800 Subject: [PATCH 6/7] Pass ILoggerFactory into LoadByAssemblyNameOrPath instead of ILogger --- src/OmniSharp.Abstractions/Services/IAssemblyLoader.cs | 3 ++- src/OmniSharp.Http/Startup.cs | 3 +-- src/OmniSharp.LanguageServerProtocol/LanguageServerHost.cs | 2 +- src/OmniSharp.Stdio.Driver/Program.cs | 3 +-- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/OmniSharp.Abstractions/Services/IAssemblyLoader.cs b/src/OmniSharp.Abstractions/Services/IAssemblyLoader.cs index a0eb50476e..03cc7ff46e 100644 --- a/src/OmniSharp.Abstractions/Services/IAssemblyLoader.cs +++ b/src/OmniSharp.Abstractions/Services/IAssemblyLoader.cs @@ -55,8 +55,9 @@ public static Assembly LoadByAssemblyNameOrPath( } } - public static IEnumerable LoadByAssemblyNameOrPath(this IAssemblyLoader loader, ILogger logger, IEnumerable assemblyNames) + public static IEnumerable LoadByAssemblyNameOrPath(this IAssemblyLoader loader, ILoggerFactory loggerFactory, IEnumerable assemblyNames) { + var logger = loggerFactory.CreateLogger(); foreach (var assemblyName in assemblyNames) { Assembly assembly; diff --git a/src/OmniSharp.Http/Startup.cs b/src/OmniSharp.Http/Startup.cs index 39833c61aa..6b9398f80f 100644 --- a/src/OmniSharp.Http/Startup.cs +++ b/src/OmniSharp.Http/Startup.cs @@ -55,11 +55,10 @@ public IServiceProvider ConfigureServices(IServiceCollection services) var plugins = _commandLinePlugins.AssemblyNames.Concat(options.CurrentValue.Plugins.GetNormalizedLocationPaths(_environment)); var loggerFactory = serviceProvider.GetRequiredService(); - var logger = loggerFactory.CreateLogger(); var assemblyLoader = serviceProvider.GetRequiredService(); _compositionHost = new CompositionHostBuilder(serviceProvider) .WithOmniSharpAssemblies() - .WithAssemblies(assemblyLoader.LoadByAssemblyNameOrPath(logger, plugins).ToArray()) + .WithAssemblies(assemblyLoader.LoadByAssemblyNameOrPath(loggerFactory, plugins).ToArray()) .Build(); return serviceProvider; diff --git a/src/OmniSharp.LanguageServerProtocol/LanguageServerHost.cs b/src/OmniSharp.LanguageServerProtocol/LanguageServerHost.cs index 5057e111da..b967029c1c 100644 --- a/src/OmniSharp.LanguageServerProtocol/LanguageServerHost.cs +++ b/src/OmniSharp.LanguageServerProtocol/LanguageServerHost.cs @@ -100,7 +100,7 @@ private void CreateCompositionHost(InitializeParams initializeParams) var compositionHostBuilder = new CompositionHostBuilder(_serviceProvider) .WithOmniSharpAssemblies() .WithAssemblies(typeof(LanguageServerHost).Assembly) - .WithAssemblies(assemblyLoader.LoadByAssemblyNameOrPath(_logger, plugins.AssemblyNames).ToArray()); + .WithAssemblies(assemblyLoader.LoadByAssemblyNameOrPath(_loggerFactory, plugins.AssemblyNames).ToArray()); _compositionHost = compositionHostBuilder.Build(); diff --git a/src/OmniSharp.Stdio.Driver/Program.cs b/src/OmniSharp.Stdio.Driver/Program.cs index ec2bbacb49..a6b19573fb 100644 --- a/src/OmniSharp.Stdio.Driver/Program.cs +++ b/src/OmniSharp.Stdio.Driver/Program.cs @@ -62,10 +62,9 @@ static int Main(string[] args) => HostHelpers.Start(() => var options = serviceProvider.GetRequiredService>(); var plugins = application.CreatePluginAssemblies(options.CurrentValue, environment); - var logger = loggerFactory.CreateLogger(); var compositionHostBuilder = new CompositionHostBuilder(serviceProvider) .WithOmniSharpAssemblies() - .WithAssemblies(assemblyLoader.LoadByAssemblyNameOrPath(logger, plugins.AssemblyNames).ToArray()); + .WithAssemblies(assemblyLoader.LoadByAssemblyNameOrPath(loggerFactory, plugins.AssemblyNames).ToArray()); using (var host = new Host(input, writer, environment, serviceProvider, compositionHostBuilder, loggerFactory, cancellation)) { From c256c1ed63b64f2f523a99644ae5fff21daf8c09 Mon Sep 17 00:00:00 2001 From: Dmitry Goncharenko Date: Wed, 20 Nov 2019 12:15:37 -0800 Subject: [PATCH 7/7] Revert "Pass ILoggerFactory into LoadByAssemblyNameOrPath instead of ILogger" This reverts commit 65899df47ed31d3794bdb0ff565bb1421907163b. --- src/OmniSharp.Abstractions/Services/IAssemblyLoader.cs | 3 +-- src/OmniSharp.Http/Startup.cs | 3 ++- src/OmniSharp.LanguageServerProtocol/LanguageServerHost.cs | 2 +- src/OmniSharp.Stdio.Driver/Program.cs | 3 ++- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/OmniSharp.Abstractions/Services/IAssemblyLoader.cs b/src/OmniSharp.Abstractions/Services/IAssemblyLoader.cs index 03cc7ff46e..a0eb50476e 100644 --- a/src/OmniSharp.Abstractions/Services/IAssemblyLoader.cs +++ b/src/OmniSharp.Abstractions/Services/IAssemblyLoader.cs @@ -55,9 +55,8 @@ public static Assembly LoadByAssemblyNameOrPath( } } - public static IEnumerable LoadByAssemblyNameOrPath(this IAssemblyLoader loader, ILoggerFactory loggerFactory, IEnumerable assemblyNames) + public static IEnumerable LoadByAssemblyNameOrPath(this IAssemblyLoader loader, ILogger logger, IEnumerable assemblyNames) { - var logger = loggerFactory.CreateLogger(); foreach (var assemblyName in assemblyNames) { Assembly assembly; diff --git a/src/OmniSharp.Http/Startup.cs b/src/OmniSharp.Http/Startup.cs index 6b9398f80f..39833c61aa 100644 --- a/src/OmniSharp.Http/Startup.cs +++ b/src/OmniSharp.Http/Startup.cs @@ -55,10 +55,11 @@ public IServiceProvider ConfigureServices(IServiceCollection services) var plugins = _commandLinePlugins.AssemblyNames.Concat(options.CurrentValue.Plugins.GetNormalizedLocationPaths(_environment)); var loggerFactory = serviceProvider.GetRequiredService(); + var logger = loggerFactory.CreateLogger(); var assemblyLoader = serviceProvider.GetRequiredService(); _compositionHost = new CompositionHostBuilder(serviceProvider) .WithOmniSharpAssemblies() - .WithAssemblies(assemblyLoader.LoadByAssemblyNameOrPath(loggerFactory, plugins).ToArray()) + .WithAssemblies(assemblyLoader.LoadByAssemblyNameOrPath(logger, plugins).ToArray()) .Build(); return serviceProvider; diff --git a/src/OmniSharp.LanguageServerProtocol/LanguageServerHost.cs b/src/OmniSharp.LanguageServerProtocol/LanguageServerHost.cs index b967029c1c..5057e111da 100644 --- a/src/OmniSharp.LanguageServerProtocol/LanguageServerHost.cs +++ b/src/OmniSharp.LanguageServerProtocol/LanguageServerHost.cs @@ -100,7 +100,7 @@ private void CreateCompositionHost(InitializeParams initializeParams) var compositionHostBuilder = new CompositionHostBuilder(_serviceProvider) .WithOmniSharpAssemblies() .WithAssemblies(typeof(LanguageServerHost).Assembly) - .WithAssemblies(assemblyLoader.LoadByAssemblyNameOrPath(_loggerFactory, plugins.AssemblyNames).ToArray()); + .WithAssemblies(assemblyLoader.LoadByAssemblyNameOrPath(_logger, plugins.AssemblyNames).ToArray()); _compositionHost = compositionHostBuilder.Build(); diff --git a/src/OmniSharp.Stdio.Driver/Program.cs b/src/OmniSharp.Stdio.Driver/Program.cs index a6b19573fb..ec2bbacb49 100644 --- a/src/OmniSharp.Stdio.Driver/Program.cs +++ b/src/OmniSharp.Stdio.Driver/Program.cs @@ -62,9 +62,10 @@ static int Main(string[] args) => HostHelpers.Start(() => var options = serviceProvider.GetRequiredService>(); var plugins = application.CreatePluginAssemblies(options.CurrentValue, environment); + var logger = loggerFactory.CreateLogger(); var compositionHostBuilder = new CompositionHostBuilder(serviceProvider) .WithOmniSharpAssemblies() - .WithAssemblies(assemblyLoader.LoadByAssemblyNameOrPath(loggerFactory, plugins.AssemblyNames).ToArray()); + .WithAssemblies(assemblyLoader.LoadByAssemblyNameOrPath(logger, plugins.AssemblyNames).ToArray()); using (var host = new Host(input, writer, environment, serviceProvider, compositionHostBuilder, loggerFactory, cancellation)) {