private static LanguageServerTarget CreateLanguageServer(Stream inputStream, Stream outputStream, TestWorkspace workspace, WellKnownLspServerKinds serverKind)
            {
                var listenerProvider     = workspace.ExportProvider.GetExportedValue <IAsynchronousOperationListenerProvider>();
                var capabilitiesProvider = workspace.ExportProvider.GetExportedValue <ExperimentalCapabilitiesProvider>();
                var servicesProvider     = workspace.ExportProvider.GetExportedValue <CSharpVisualBasicLspServiceProvider>();

                var jsonRpc = new JsonRpc(new HeaderDelimitedMessageHandler(outputStream, inputStream, CreateJsonMessageFormatter()))
                {
                    ExceptionStrategy = ExceptionProcessing.ISerializable,
                };

                var languageServer = new LanguageServerTarget(
                    servicesProvider, jsonRpc,
                    capabilitiesProvider,
                    listenerProvider,
                    NoOpLspLogger.Instance,
                    ProtocolConstants.RoslynLspLanguages,
                    serverKind);

                jsonRpc.StartListening();
                return(languageServer);
            }
            private TestLspServer(TestWorkspace testWorkspace, Dictionary <string, IList <LSP.Location> > locations, LSP.ClientCapabilities clientCapabilities, WellKnownLspServerKinds serverKind)
            {
                TestWorkspace      = testWorkspace;
                ClientCapabilities = clientCapabilities;
                _locations         = locations;

                var(clientStream, serverStream) = FullDuplexStream.CreatePair();
                _languageServer = CreateLanguageServer(serverStream, serverStream, TestWorkspace, serverKind);

                _clientRpc = new JsonRpc(new HeaderDelimitedMessageHandler(clientStream, clientStream, CreateJsonMessageFormatter()))
                {
                    ExceptionStrategy = ExceptionProcessing.ISerializable,
                };

                _clientRpc.StartListening();

                var workspaceWaiter = GetWorkspaceWaiter(testWorkspace);

                Assert.False(workspaceWaiter.HasPendingWork);

                // Clear any LSP solutions that were created when the workspace was initialized.
                // This ensures that the workspace manager starts with a clean slate.
                GetManagerAccessor().ResetLspSolutions();
            }