提交 bc48af7c 编写于 作者: C CyrusNajmabadi

Merge branch 'moveTypeToFile' into addUsingOOP2

......@@ -16,74 +16,74 @@ namespace Microsoft.CodeAnalysis.CodeFixes.AddImport
{
internal abstract partial class AbstractAddImportCodeFixProvider<TSimpleNameSyntax>
{
private class AssemblyReferenceCodeAction : CodeAction
{
private readonly ReferenceAssemblyWithTypeResult _referenceAssemblyWithType;
private readonly string _title;
private readonly Document _document;
private readonly ImmutableArray<TextChange> _textChanges;
private class AssemblyReferenceCodeAction : CodeAction
{
private readonly ReferenceAssemblyWithTypeResult _referenceAssemblyWithType;
private readonly string _title;
private readonly Document _document;
private readonly ImmutableArray<TextChange> _textChanges;
public override string Title => _title;
public override string Title => _title;
public override ImmutableArray<string> Tags => WellKnownTagArrays.AddReference;
public override ImmutableArray<string> Tags => WellKnownTagArrays.AddReference;
private readonly Lazy<string> _lazyResolvedPath;
private readonly Lazy<string> _lazyResolvedPath;
public AssemblyReferenceCodeAction(
string title,
ReferenceAssemblyWithTypeResult referenceAssemblyWithType,
Document document,
ImmutableArray<TextChange> textChanges)
{
_referenceAssemblyWithType = referenceAssemblyWithType;
_document = document;
_textChanges = textChanges;
public AssemblyReferenceCodeAction(
string title,
ReferenceAssemblyWithTypeResult referenceAssemblyWithType,
Document document,
ImmutableArray<TextChange> textChanges)
{
_referenceAssemblyWithType = referenceAssemblyWithType;
_document = document;
_textChanges = textChanges;
_title = title;
_lazyResolvedPath = new Lazy<string>(ResolvePath);
}
_title = title;
_lazyResolvedPath = new Lazy<string>(ResolvePath);
}
// Adding a reference is always low priority.
internal override CodeActionPriority Priority => CodeActionPriority.Low;
// Adding a reference is always low priority.
internal override CodeActionPriority Priority => CodeActionPriority.Low;
private string ResolvePath()
{
var assemblyResolverService = _document.Project.Solution.Workspace.Services.GetService<IFrameworkAssemblyPathResolver>();
private string ResolvePath()
{
var assemblyResolverService = _document.Project.Solution.Workspace.Services.GetService<IFrameworkAssemblyPathResolver>();
var fullyQualifiedName = string.Join(
".", _referenceAssemblyWithType.ContainingNamespaceNames.Concat(_referenceAssemblyWithType.TypeName));
var fullyQualifiedName = string.Join(
".", _referenceAssemblyWithType.ContainingNamespaceNames.Concat(_referenceAssemblyWithType.TypeName));
var assemblyPath = assemblyResolverService?.ResolveAssemblyPath(
_document.Project.Id, _referenceAssemblyWithType.AssemblyName, fullyQualifiedName);
var assemblyPath = assemblyResolverService?.ResolveAssemblyPath(
_document.Project.Id, _referenceAssemblyWithType.AssemblyName, fullyQualifiedName);
return assemblyPath;
}
return assemblyPath;
}
internal override bool PerformFinalApplicabilityCheck
=> true;
internal override bool PerformFinalApplicabilityCheck
=> true;
internal override bool IsApplicable(Workspace workspace)
=> !string.IsNullOrWhiteSpace(_lazyResolvedPath.Value);
internal override bool IsApplicable(Workspace workspace)
=> !string.IsNullOrWhiteSpace(_lazyResolvedPath.Value);
protected override async Task<IEnumerable<CodeActionOperation>> ComputeOperationsAsync(CancellationToken cancellationToken)
{
var service = _document.Project.Solution.Workspace.Services.GetService<IMetadataService>();
var resolvedPath = _lazyResolvedPath.Value;
var reference = service.GetReference(resolvedPath, MetadataReferenceProperties.Assembly);
protected override async Task<IEnumerable<CodeActionOperation>> ComputeOperationsAsync(CancellationToken cancellationToken)
{
var service = _document.Project.Solution.Workspace.Services.GetService<IMetadataService>();
var resolvedPath = _lazyResolvedPath.Value;
var reference = service.GetReference(resolvedPath, MetadataReferenceProperties.Assembly);
var oldText = await _document.GetTextAsync(cancellationToken).ConfigureAwait(false);
var newText = oldText.WithChanges(_textChanges);
var oldText = await _document.GetTextAsync(cancellationToken).ConfigureAwait(false);
var newText = oldText.WithChanges(_textChanges);
var newDocument = _document.WithText(newText);
var newDocument = _document.WithText(newText);
// Now add the actual assembly reference.
var newProject = newDocument.Project;
newProject = newProject.WithMetadataReferences(
newProject.MetadataReferences.Concat(reference));
// Now add the actual assembly reference.
var newProject = newDocument.Project;
newProject = newProject.WithMetadataReferences(
newProject.MetadataReferences.Concat(reference));
var operation = new ApplyChangesOperation(newProject.Solution);
return SpecializedCollections.SingletonEnumerable<CodeActionOperation>(operation);
var operation = new ApplyChangesOperation(newProject.Solution);
return SpecializedCollections.SingletonEnumerable<CodeActionOperation>(operation);
}
}
}
}
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册