File: Adornments\AbstractAdornmentManagerProvider.cs
Web Access
Project: src\src\EditorFeatures\Core.Wpf\Microsoft.CodeAnalysis.EditorFeatures.Wpf_a0rtafw3_wpftmp.csproj (Microsoft.CodeAnalysis.EditorFeatures.Wpf)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
#nullable disable
 
using System;
using Microsoft.CodeAnalysis.Editor.Shared.Options;
using Microsoft.CodeAnalysis.Editor.Shared.Utilities;
using Microsoft.CodeAnalysis.Options;
using Microsoft.CodeAnalysis.Shared.TestHooks;
using Microsoft.VisualStudio.Text.Editor;
using Microsoft.VisualStudio.Text.Tagging;
 
namespace Microsoft.CodeAnalysis.Editor.Implementation.Adornments;
 
internal abstract class AbstractAdornmentManagerProvider<TTag> :
    IWpfTextViewCreationListener
    where TTag : BrushTag
{
    protected readonly IThreadingContext ThreadingContext;
    protected readonly IViewTagAggregatorFactoryService TagAggregatorFactoryService;
    protected readonly IAsynchronousOperationListener AsyncListener;
    protected readonly IGlobalOptionService GlobalOptions;
 
    protected AbstractAdornmentManagerProvider(
        IThreadingContext threadingContext,
        IViewTagAggregatorFactoryService tagAggregatorFactoryService,
        IGlobalOptionService globalOptions,
        IAsynchronousOperationListenerProvider listenerProvider)
    {
        ThreadingContext = threadingContext;
        TagAggregatorFactoryService = tagAggregatorFactoryService;
        GlobalOptions = globalOptions;
        AsyncListener = listenerProvider.GetListener(this.FeatureAttributeName);
    }
 
    protected abstract string FeatureAttributeName { get; }
    protected abstract string AdornmentLayerName { get; }
 
    protected abstract void CreateAdornmentManager(IWpfTextView textView);
 
    public void TextViewCreated(IWpfTextView textView)
    {
        if (textView == null)
        {
            throw new ArgumentNullException(nameof(textView));
        }
 
        if (!GlobalOptions.GetOption(EditorComponentOnOffOptions.Adornment))
        {
            return;
        }
 
        CreateAdornmentManager(textView);
    }
}