diff --git a/src/Features/Core/Portable/GenerateConstructorFromMembers/AbstractGenerateConstructorFromMembersCodeRefactoringProvider.GenerateConstructorWithDialogCodeAction.cs b/src/Features/Core/Portable/GenerateConstructorFromMembers/AbstractGenerateConstructorFromMembersCodeRefactoringProvider.GenerateConstructorWithDialogCodeAction.cs index b198442ba35766cbbaf4cb79cd0e59a21933caeb..b231c15071197db8ee9bba2e0587d85f21424bf6 100644 --- a/src/Features/Core/Portable/GenerateConstructorFromMembers/AbstractGenerateConstructorFromMembersCodeRefactoringProvider.GenerateConstructorWithDialogCodeAction.cs +++ b/src/Features/Core/Portable/GenerateConstructorFromMembers/AbstractGenerateConstructorFromMembersCodeRefactoringProvider.GenerateConstructorWithDialogCodeAction.cs @@ -23,6 +23,8 @@ private class GenerateConstructorWithDialogCodeAction : CodeActionWithOptions private readonly ImmutableArray _viableMembers; private readonly ImmutableArray _pickMembersOptions; + private bool? _addNullCheckOptionValue; + public override string Title => FeaturesResources.Generate_constructor; public GenerateConstructorWithDialogCodeAction( @@ -65,11 +67,7 @@ public override object GetOptions(CancellationToken cancellationToken) // If we presented the 'Add null check' option, then persist whatever value // the user chose. That way we'll keep that as the default for the next time // the user opens the dialog. - var workspace = _document.Project.Solution.Workspace; - workspace.TryApplyChanges(workspace.CurrentSolution.WithOptions(workspace.Options.WithChangedOption( - GenerateConstructorFromMembersOptions.AddNullChecks, - _document.Project.Language, - addNullChecksOption.Value))); + _addNullCheckOptionValue = addNullChecksOption.Value; } var addNullChecks = (addNullChecksOption?.Value).GetValueOrDefault(); @@ -109,6 +107,21 @@ public override object GetOptions(CancellationToken cancellationToken) return await codeAction.GetOperationsAsync(cancellationToken).ConfigureAwait(false); } } + + protected override async Task GetChangedSolutionAsync(CancellationToken cancellationToken) + { + var solution = await base.GetChangedSolutionAsync(cancellationToken).ConfigureAwait(false); + + if (_addNullCheckOptionValue.HasValue) + { + solution = solution.WithOptions(solution.Options.WithChangedOption( + GenerateConstructorFromMembersOptions.AddNullChecks, + _document.Project.Language, + _addNullCheckOptionValue.Value)); + } + + return solution; + } } } } diff --git a/src/Features/Core/Portable/GenerateEqualsAndGetHashCodeFromMembers/GenerateEqualsAndHashWithDialogCodeAction.cs b/src/Features/Core/Portable/GenerateEqualsAndGetHashCodeFromMembers/GenerateEqualsAndHashWithDialogCodeAction.cs index 39fbb0a96546f1ffd1622492e311594541e671f5..7e62567592c22d41f135f4e1dfebab4344d4b7a7 100644 --- a/src/Features/Core/Portable/GenerateEqualsAndGetHashCodeFromMembers/GenerateEqualsAndHashWithDialogCodeAction.cs +++ b/src/Features/Core/Portable/GenerateEqualsAndGetHashCodeFromMembers/GenerateEqualsAndHashWithDialogCodeAction.cs @@ -25,6 +25,9 @@ private class GenerateEqualsAndGetHashCodeWithDialogCodeAction : CodeActionWithO private readonly ImmutableArray _pickMembersOptions; private readonly TextSpan _textSpan; + private bool? _implementIEqutableOptionValue; + private bool? _generateOperatorsOptionValue; + public GenerateEqualsAndGetHashCodeWithDialogCodeAction( GenerateEqualsAndGetHashCodeFromMembersCodeRefactoringProvider service, Document document, @@ -69,19 +72,13 @@ protected override async Task> ComputeOperation var implementIEqutableOption = result.Options.FirstOrDefault(o => o.Id == ImplementIEquatableId); if (implementIEqutableOption != null) { - workspace.TryApplyChanges(workspace.CurrentSolution.WithOptions(workspace.Options.WithChangedOption( - GenerateEqualsAndGetHashCodeFromMembersOptions.ImplementIEquatable, - _document.Project.Language, - implementIEqutableOption.Value))); + _implementIEqutableOptionValue = implementIEqutableOption.Value; } var generateOperatorsOption = result.Options.FirstOrDefault(o => o.Id == GenerateOperatorsId); if (generateOperatorsOption != null) { - workspace.TryApplyChanges(workspace.CurrentSolution.WithOptions(workspace.Options.WithChangedOption( - GenerateEqualsAndGetHashCodeFromMembersOptions.GenerateOperators, - _document.Project.Language, - generateOperatorsOption.Value))); + _generateOperatorsOptionValue = generateOperatorsOption.Value; } var implementIEquatable = (implementIEqutableOption?.Value).GetValueOrDefault(); @@ -95,6 +92,29 @@ protected override async Task> ComputeOperation public override string Title => GenerateEqualsAndGetHashCodeAction.GetTitle(_generateEquals, _generateGetHashCode) + "..."; + + protected override async Task GetChangedSolutionAsync(CancellationToken cancellationToken) + { + var solution = await base.GetChangedSolutionAsync(cancellationToken).ConfigureAwait(false); + + if (_implementIEqutableOptionValue.HasValue) + { + solution = solution.WithOptions(solution.Options.WithChangedOption( + GenerateEqualsAndGetHashCodeFromMembersOptions.ImplementIEquatable, + _document.Project.Language, + _implementIEqutableOptionValue.Value)); + } + + if (_generateOperatorsOptionValue.HasValue) + { + solution = solution.WithOptions(solution.Options.WithChangedOption( + GenerateEqualsAndGetHashCodeFromMembersOptions.GenerateOperators, + _document.Project.Language, + _generateOperatorsOptionValue.Value)); + } + + return solution; + } } } }