File: Options\IGlobalOptionService.cs
Web Access
Project: ..\..\..\src\Workspaces\Core\Portable\Microsoft.CodeAnalysis.Workspaces.csproj (Microsoft.CodeAnalysis.Workspaces)
// 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.
 
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
 
namespace Microsoft.CodeAnalysis.Options
{
    /// <summary>
    /// Provides services for reading and writing global client (in-proc) options
    /// shared across all workspaces.
    /// </summary>
    internal interface IGlobalOptionService : IOptionsReader
    {
        /// <summary>
        /// Gets the current value of the specific option.
        /// </summary>
        T GetOption<T>(Option2<T> option);
 
        /// <summary>
        /// Gets the current value of the specific option.
        /// </summary>
        T GetOption<T>(PerLanguageOption2<T> option, string language);
 
        /// <summary>
        /// Gets the current value of the specific option.
        /// </summary>
        T GetOption<T>(OptionKey2 optionKey);
 
        /// <summary>
        /// Gets the current values of specified options.
        /// All options are read atomically.
        /// </summary>
        ImmutableArray<object?> GetOptions(ImmutableArray<OptionKey2> optionKeys);
 
        void SetGlobalOption<T>(Option2<T> option, T value);
 
        void SetGlobalOption<T>(PerLanguageOption2<T> option, string language, T value);
 
        /// <summary>
        /// Sets and persists the value of a global option.
        /// Sets the value of a global option.
        /// Invokes registered option persisters.
        /// Triggers <see cref="OptionChanged"/>.
        /// </summary>
        void SetGlobalOption(OptionKey2 optionKey, object? value);
 
        /// <summary>
        /// Atomically sets the values of specified global options. The option values are persisted.
        /// Triggers <see cref="OptionChanged"/>.
        /// </summary>
        /// <remarks>
        /// Returns true if any option changed its value stored in the global options.
        /// </remarks>
        bool SetGlobalOptions(ImmutableArray<KeyValuePair<OptionKey2, object?>> options);
 
        event EventHandler<OptionChangedEventArgs>? OptionChanged;
 
        /// <summary>
        /// Refreshes the stored value of an option. This should only be called from persisters.
        /// Does not persist the new option value.
        /// </summary>
        /// <remarks>
        /// Returns true if the option changed its value stored in the global options.
        /// </remarks>
        bool RefreshOption(OptionKey2 optionKey, object? newValue);
    }
}