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
This commit is contained in:
parent
fff1c01aa0
commit
64f9474eb1
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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<RazorTextBufferProvider>();
|
||||
var textBufferCodeDocumentProvider = languageServices.GetRequiredService<TextBufferCodeDocumentProvider>();
|
||||
|
||||
return new DefaultCodeDocumentProvider(textBufferProvider, textBufferCodeDocumentProvider);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,23 +37,7 @@ namespace Microsoft.VisualStudio.Editor.Razor
|
|||
private readonly Lazy<RazorCodeDocumentProvider> _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<RazorCodeDocumentProvider>(() =>
|
||||
{
|
||||
var languageServices = workspaceAccessor.Workspace.Services.GetLanguageServices(RazorLanguage.Name);
|
||||
return languageServices.GetRequiredService<RazorCodeDocumentProvider>();
|
||||
});
|
||||
}
|
||||
|
||||
// Internal for testing
|
||||
internal RazorDirectiveCompletionProvider(Lazy<RazorCodeDocumentProvider> codeDocumentProvider)
|
||||
public RazorDirectiveCompletionProvider([Import(typeof(RazorCodeDocumentProvider))] Lazy<RazorCodeDocumentProvider> codeDocumentProvider)
|
||||
{
|
||||
if (codeDocumentProvider == null)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue