提交 9f6517c2 编写于 作者: C CyrusNajmabadi

Inline types.

上级 d27ff880
......@@ -8,7 +8,6 @@
using Microsoft.CodeAnalysis.CodeActions;
using Microsoft.CodeAnalysis.Shared.Utilities;
using Microsoft.CodeAnalysis.Text;
using Roslyn.Utilities;
namespace Microsoft.CodeAnalysis.CodeFixes.AddImport
{
......@@ -16,8 +15,15 @@ internal abstract partial class AbstractAddImportCodeFixProvider<TSimpleNameSynt
{
private partial class PackageReference
{
private struct InstallPackageAndAddImportData
private class InstallPackageAndAddImportCodeAction : CodeAction
{
private readonly string _title;
private readonly CodeActionPriority _priority;
public override string Title => _title;
public override string EquivalenceKey => _title;
internal override CodeActionPriority Priority => _priority;
/// <summary>
/// The document before we added the import. Used so we can roll back if installing
/// the package failed.
......@@ -34,34 +40,18 @@ private struct InstallPackageAndAddImportData
/// </summary>
public readonly InstallPackageDirectlyCodeActionOperation InstallOperation;
public InstallPackageAndAddImportData(
public InstallPackageAndAddImportCodeAction(
string title,
CodeActionPriority priority,
Document oldDocument, Document newDocument,
InstallPackageDirectlyCodeActionOperation installOperation)
{
_title = title;
_priority = priority;
OldDocument = oldDocument;
NewDocument = newDocument;
InstallOperation = installOperation;
}
}
private class InstallPackageAndAddImportCodeAction : CodeAction
{
private readonly string _title;
private readonly CodeActionPriority _priority;
private readonly AsyncLazy<InstallPackageAndAddImportData> _installData;
public override string Title => _title;
public override string EquivalenceKey => _title;
internal override CodeActionPriority Priority => _priority;
public InstallPackageAndAddImportCodeAction(
string title, CodeActionPriority priority,
AsyncLazy<InstallPackageAndAddImportData> installData)
{
_title = title;
_priority = priority;
_installData = installData;
}
/// <summary>
/// For preview purposes we return all the operations in a list. This way the
......@@ -71,16 +61,14 @@ private class InstallPackageAndAddImportCodeAction : CodeAction
/// </summary>
protected override async Task<IEnumerable<CodeActionOperation>> ComputePreviewOperationsAsync(CancellationToken cancellationToken)
{
var installData = await _installData.GetValueAsync(cancellationToken).ConfigureAwait(false);
// Make a SolutionChangeAction. This way we can let it generate the diff
// preview appropriately.
var solutionChangeAction = new SolutionChangeAction(
"", c => Task.FromResult(installData.NewDocument.Project.Solution));
"", c => Task.FromResult(NewDocument.Project.Solution));
var result = ArrayBuilder<CodeActionOperation>.GetInstance();
result.AddRange(await solutionChangeAction.GetPreviewOperationsAsync(cancellationToken).ConfigureAwait(false));
result.Add(installData.InstallOperation);
result.Add(InstallOperation);
return result.ToImmutableAndFree();
}
......@@ -92,14 +80,12 @@ protected override async Task<IEnumerable<CodeActionOperation>> ComputePreviewOp
protected override async Task<IEnumerable<CodeActionOperation>> ComputeOperationsAsync(
CancellationToken cancellationToken)
{
var installData = await _installData.GetValueAsync(cancellationToken).ConfigureAwait(false);
var oldText = await installData.OldDocument.GetTextAsync(cancellationToken).ConfigureAwait(false);
var newText = await installData.NewDocument.GetTextAsync(cancellationToken).ConfigureAwait(false);
var oldText = await OldDocument.GetTextAsync(cancellationToken).ConfigureAwait(false);
var newText = await NewDocument.GetTextAsync(cancellationToken).ConfigureAwait(false);
return ImmutableArray.Create<CodeActionOperation>(
new InstallPackageAndAddImportOperation(
installData.OldDocument.Id, oldText, newText, installData.InstallOperation));
OldDocument.Id, oldText, newText, InstallOperation));
}
}
......
......@@ -87,39 +87,15 @@ private class ParentCodeAction : CodeAction.CodeActionWithNestedActions
? string.Format(FeaturesResources.Use_local_version_0, versionOpt)
: string.Format(FeaturesResources.Install_version_0, versionOpt);
var installData = new AsyncLazy<InstallPackageAndAddImportData>(
c => GetInstallDataAsync(reference, versionOpt, isLocal, document, newDocument, c),
cacheResult: true);
// Nuget hits should always come after other results.
return new InstallPackageAndAddImportCodeAction(
title, CodeActionPriority.Low, installData);
}
private static async Task<InstallPackageAndAddImportData> GetInstallDataAsync(
PackageReference reference,
string versionOpt,
bool isLocal,
Document document,
Document newDocument,
CancellationToken cancellationToken)
{
var oldDocument = document;
// We're going to be manually applying this new document to the workspace
// (so we can roll it back ourselves if installing the nuget package fails).
// As such, we need to do the postprocessing ourselves of tihs document to
// ensure things like formatting/simplification happen to it.
newDocument = await CleanupDocumentAsync(
newDocument, cancellationToken).ConfigureAwait(false);
var installOperation = new InstallPackageDirectlyCodeActionOperation(
reference._installerService, document, reference._source,
reference._packageName, versionOpt,
reference._installerService, document, reference._source,
reference._packageName, versionOpt,
includePrerelease: false, isLocal: isLocal);
return new InstallPackageAndAddImportData(
oldDocument, newDocument, installOperation);
// Nuget hits should always come after other results.
return new InstallPackageAndAddImportCodeAction(
title, CodeActionPriority.Low,
document, newDocument, installOperation);
}
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册