提交 e06510e9 编写于 作者: M Manish Vasani

Fix setting options from CodeAction (background thread).

上级 6052cf9d
......@@ -23,6 +23,8 @@ private class GenerateConstructorWithDialogCodeAction : CodeActionWithOptions
private readonly ImmutableArray<ISymbol> _viableMembers;
private readonly ImmutableArray<PickMembersOption> _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<Solution> 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;
}
}
}
}
......@@ -25,6 +25,9 @@ private class GenerateEqualsAndGetHashCodeWithDialogCodeAction : CodeActionWithO
private readonly ImmutableArray<PickMembersOption> _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<IEnumerable<CodeActionOperation>> 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<IEnumerable<CodeActionOperation>> ComputeOperation
public override string Title
=> GenerateEqualsAndGetHashCodeAction.GetTitle(_generateEquals, _generateGetHashCode) + "...";
protected override async Task<Solution> 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;
}
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册