// Copyright (c) Microsoft. 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.Threading;
using System.Threading.Tasks;
using Microsoft.CodeAnalysis.Editor.Host;
using Microsoft.CodeAnalysis.Shared.TestHooks;
using Microsoft.VisualStudio.Text;
using Roslyn.Utilities;
namespace Microsoft.CodeAnalysis.Editor.Implementation.Suggestions
{
internal partial class SuggestedActionWithFlavors
{
///
/// Suggested action for showing the preview-changes dialog. Note: this is only used
/// as a 'flavor' inside CodeFixSuggestionAction and CodeRefactoringSuggestedAction.
///
private sealed partial class PreviewChangesSuggestedAction : SuggestedAction
{
private PreviewChangesSuggestedAction(
Workspace workspace,
ITextBuffer subjectBuffer,
ICodeActionEditHandlerService editHandler,
IWaitIndicator waitIndicator,
object provider,
IAsynchronousOperationListener operationListener,
PreviewChangesCodeAction codeAction)
: base(workspace, subjectBuffer, editHandler, waitIndicator,
provider, operationListener, codeAction)
{
}
public static async Task CreateAsync(
SuggestedActionWithFlavors suggestedAction, CancellationToken cancellationToken)
{
var previewResult = await suggestedAction.GetPreviewResultAsync(cancellationToken).ConfigureAwait(true);
if (previewResult == null)
{
return null;
}
var changeSummary = previewResult.ChangeSummary;
if (changeSummary == null)
{
return null;
}
return new PreviewChangesSuggestedAction(
suggestedAction.Workspace, suggestedAction.SubjectBuffer, suggestedAction.EditHandler,
suggestedAction.WaitIndicator, suggestedAction.Provider, suggestedAction.OperationListener,
new PreviewChangesCodeAction(
suggestedAction.Workspace, suggestedAction.CodeAction, changeSummary));
}
}
}
}