From 64f9474eb16a71190280f5ab01b20b4bfe7a611d Mon Sep 17 00:00:00 2001 From: "N. Taylor Mullen" Date: Thu, 1 Feb 2018 16:50:56 -0800 Subject: [PATCH] Change RazorCodeDocumentProvider to not be per-workspace. - Changed the `RazorCodeDocumentProvider` and its `TextBufferCodeDocumentProvider` dependency to be MEF services. This changes their lifetimes from per-workspace to per-IDE. - Updated `RazorDirectiveCompletionProvider` to get the code document provider via MEF instead of the old primary workspace". - Removed language service factory types. #2007 --- .../DefaultCodeDocumentProvider.cs | 5 ++++ .../DefaultCodeDocumentProviderFactory.cs | 29 ------------------- .../DefaultTextBufferCodeDocumentProvider.cs | 3 ++ ...ltTextBufferCodeDocumentProviderFactory.cs | 18 ------------ .../RazorCodeDocumentProvider.cs | 3 +- .../RazorDirectiveCompletionProvider.cs | 18 +----------- .../TextBufferCodeDocumentProvider.cs | 3 +- 7 files changed, 11 insertions(+), 68 deletions(-) delete mode 100644 src/Microsoft.VisualStudio.Editor.Razor/DefaultCodeDocumentProviderFactory.cs delete mode 100644 src/Microsoft.VisualStudio.Editor.Razor/DefaultTextBufferCodeDocumentProviderFactory.cs diff --git a/src/Microsoft.VisualStudio.Editor.Razor/DefaultCodeDocumentProvider.cs b/src/Microsoft.VisualStudio.Editor.Razor/DefaultCodeDocumentProvider.cs index f512a4e3f2..61fafc8a84 100644 --- a/src/Microsoft.VisualStudio.Editor.Razor/DefaultCodeDocumentProvider.cs +++ b/src/Microsoft.VisualStudio.Editor.Razor/DefaultCodeDocumentProvider.cs @@ -2,16 +2,21 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.ComponentModel.Composition; using Microsoft.AspNetCore.Razor.Language; using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.Razor; namespace Microsoft.VisualStudio.Editor.Razor { + [System.Composition.Shared] + [Export(typeof(RazorCodeDocumentProvider))] internal class DefaultCodeDocumentProvider : RazorCodeDocumentProvider { private readonly RazorTextBufferProvider _bufferProvider; private readonly TextBufferCodeDocumentProvider _codeDocumentProvider; + [ImportingConstructor] public DefaultCodeDocumentProvider( RazorTextBufferProvider bufferProvider, TextBufferCodeDocumentProvider codeDocumentProvider) diff --git a/src/Microsoft.VisualStudio.Editor.Razor/DefaultCodeDocumentProviderFactory.cs b/src/Microsoft.VisualStudio.Editor.Razor/DefaultCodeDocumentProviderFactory.cs deleted file mode 100644 index 7f2deb914b..0000000000 --- a/src/Microsoft.VisualStudio.Editor.Razor/DefaultCodeDocumentProviderFactory.cs +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System; -using System.Composition; -using Microsoft.CodeAnalysis.Host; -using Microsoft.CodeAnalysis.Host.Mef; -using Microsoft.CodeAnalysis.Razor; - -namespace Microsoft.VisualStudio.Editor.Razor -{ - [Shared] - [ExportLanguageServiceFactory(typeof(RazorCodeDocumentProvider), RazorLanguage.Name)] - internal class DefaultCodeDocumentProviderFactory : ILanguageServiceFactory - { - public ILanguageService CreateLanguageService(HostLanguageServices languageServices) - { - if (languageServices == null) - { - throw new ArgumentNullException(nameof(languageServices)); - } - - var textBufferProvider = languageServices.GetRequiredService(); - var textBufferCodeDocumentProvider = languageServices.GetRequiredService(); - - return new DefaultCodeDocumentProvider(textBufferProvider, textBufferCodeDocumentProvider); - } - } -} diff --git a/src/Microsoft.VisualStudio.Editor.Razor/DefaultTextBufferCodeDocumentProvider.cs b/src/Microsoft.VisualStudio.Editor.Razor/DefaultTextBufferCodeDocumentProvider.cs index 45bd21d7d2..a9df7a9c45 100644 --- a/src/Microsoft.VisualStudio.Editor.Razor/DefaultTextBufferCodeDocumentProvider.cs +++ b/src/Microsoft.VisualStudio.Editor.Razor/DefaultTextBufferCodeDocumentProvider.cs @@ -2,11 +2,14 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; +using System.ComponentModel.Composition; using Microsoft.AspNetCore.Razor.Language; using Microsoft.VisualStudio.Text; namespace Microsoft.VisualStudio.Editor.Razor { + [System.Composition.Shared] + [Export(typeof(TextBufferCodeDocumentProvider))] internal class DefaultTextBufferCodeDocumentProvider : TextBufferCodeDocumentProvider { public override bool TryGetFromBuffer(ITextBuffer textBuffer, out RazorCodeDocument codeDocument) diff --git a/src/Microsoft.VisualStudio.Editor.Razor/DefaultTextBufferCodeDocumentProviderFactory.cs b/src/Microsoft.VisualStudio.Editor.Razor/DefaultTextBufferCodeDocumentProviderFactory.cs deleted file mode 100644 index 964ecc6dd6..0000000000 --- a/src/Microsoft.VisualStudio.Editor.Razor/DefaultTextBufferCodeDocumentProviderFactory.cs +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (c) .NET Foundation. All rights reserved. -// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using Microsoft.CodeAnalysis.Host; -using Microsoft.CodeAnalysis.Host.Mef; -using Microsoft.CodeAnalysis.Razor; - -namespace Microsoft.VisualStudio.Editor.Razor -{ - [ExportLanguageServiceFactory(typeof(TextBufferCodeDocumentProvider), RazorLanguage.Name, ServiceLayer.Default)] - internal class DefaultTextBufferCodeDocumentProviderFactory : ILanguageServiceFactory - { - public ILanguageService CreateLanguageService(HostLanguageServices languageServices) - { - return new DefaultTextBufferCodeDocumentProvider(); - } - } -} \ No newline at end of file diff --git a/src/Microsoft.VisualStudio.Editor.Razor/RazorCodeDocumentProvider.cs b/src/Microsoft.VisualStudio.Editor.Razor/RazorCodeDocumentProvider.cs index 517d9914d9..be30691363 100644 --- a/src/Microsoft.VisualStudio.Editor.Razor/RazorCodeDocumentProvider.cs +++ b/src/Microsoft.VisualStudio.Editor.Razor/RazorCodeDocumentProvider.cs @@ -3,11 +3,10 @@ using Microsoft.AspNetCore.Razor.Language; using Microsoft.CodeAnalysis; -using Microsoft.CodeAnalysis.Host; namespace Microsoft.VisualStudio.Editor.Razor { - internal abstract class RazorCodeDocumentProvider : ILanguageService + internal abstract class RazorCodeDocumentProvider { public abstract bool TryGetFromDocument(TextDocument document, out RazorCodeDocument codeDocument); } diff --git a/src/Microsoft.VisualStudio.Editor.Razor/RazorDirectiveCompletionProvider.cs b/src/Microsoft.VisualStudio.Editor.Razor/RazorDirectiveCompletionProvider.cs index a96df70e63..c55dcc3776 100644 --- a/src/Microsoft.VisualStudio.Editor.Razor/RazorDirectiveCompletionProvider.cs +++ b/src/Microsoft.VisualStudio.Editor.Razor/RazorDirectiveCompletionProvider.cs @@ -37,23 +37,7 @@ namespace Microsoft.VisualStudio.Editor.Razor private readonly Lazy _codeDocumentProvider; [ImportingConstructor] - public RazorDirectiveCompletionProvider(VisualStudioWorkspaceAccessor workspaceAccessor) - { - if (workspaceAccessor == null) - { - throw new ArgumentNullException(nameof(workspaceAccessor)); - } - - // Lazy because we don't want Microsoft.AspNetCore.Razor.Language assembly getting loaded for non Razor scenarios. - _codeDocumentProvider = new Lazy(() => - { - var languageServices = workspaceAccessor.Workspace.Services.GetLanguageServices(RazorLanguage.Name); - return languageServices.GetRequiredService(); - }); - } - - // Internal for testing - internal RazorDirectiveCompletionProvider(Lazy codeDocumentProvider) + public RazorDirectiveCompletionProvider([Import(typeof(RazorCodeDocumentProvider))] Lazy codeDocumentProvider) { if (codeDocumentProvider == null) { diff --git a/src/Microsoft.VisualStudio.Editor.Razor/TextBufferCodeDocumentProvider.cs b/src/Microsoft.VisualStudio.Editor.Razor/TextBufferCodeDocumentProvider.cs index 42e50db4fa..ac05e6d912 100644 --- a/src/Microsoft.VisualStudio.Editor.Razor/TextBufferCodeDocumentProvider.cs +++ b/src/Microsoft.VisualStudio.Editor.Razor/TextBufferCodeDocumentProvider.cs @@ -2,12 +2,11 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using Microsoft.AspNetCore.Razor.Language; -using Microsoft.CodeAnalysis.Host; using Microsoft.VisualStudio.Text; namespace Microsoft.VisualStudio.Editor.Razor { - internal abstract class TextBufferCodeDocumentProvider : ILanguageService + internal abstract class TextBufferCodeDocumentProvider { public abstract bool TryGetFromBuffer(ITextBuffer textBuffer, out RazorCodeDocument codeDocument); }