File: IRefactorNotifyService.cs
Web Access
Project: src\src\EditorFeatures\Core\Microsoft.CodeAnalysis.EditorFeatures.csproj (Microsoft.CodeAnalysis.EditorFeatures)
// 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.Collections.Generic;
 
namespace Microsoft.CodeAnalysis.Editor;
 
/// <summary>
/// Allows editors to listen to refactoring events and take appropriate action. For example, 
/// when VS knows about a symbol rename, it asks the Xaml language service to update xaml files
/// </summary>
internal interface IRefactorNotifyService
{
    /// <summary>
    /// Notifies any interested parties that a rename action is about to happen. 
    /// Implementers can request the rename action be cancelled, in which case they should 
    /// return false or throw an exception, depending on the throwOnFailure argument. Callers 
    /// should honor cancellation requests by not applying the rename and not calling 
    /// <see cref="TryOnAfterGlobalSymbolRenamed"/>.
    /// </summary>
    /// <returns>True if the rename should proceed.</returns>
    bool TryOnBeforeGlobalSymbolRenamed(Workspace workspace, IEnumerable<DocumentId> changedDocumentIDs, ISymbol symbol, string newName, bool throwOnFailure);
 
    /// <summary>
    /// Notifies any interested parties that a symbol rename has been applied to the 
    /// workspace. This should only be called if <see cref="TryOnBeforeGlobalSymbolRenamed"/> was
    /// called and returned true before the symbol rename was applied to the workspace. 
    /// In the event of a failure to rename, implementers should return false or throw an
    /// exception, depending on the throwOnFailure argument.
    /// </summary>
    /// <returns>True if the rename was successful.</returns>
    bool TryOnAfterGlobalSymbolRenamed(Workspace workspace, IEnumerable<DocumentId> changedDocumentIDs, ISymbol symbol, string newName, bool throwOnFailure);
}