Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
9f6517c2
R
roslyn
项目概览
lwm1986
/
roslyn
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
roslyn
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
9f6517c2
编写于
5月 30, 2017
作者:
C
CyrusNajmabadi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Inline types.
上级
d27ff880
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
24 addition
and
62 deletion
+24
-62
src/Features/Core/Portable/AddImport/CodeActions/PackageReference.InstallPackageAndAddImportCodeAction.cs
.../PackageReference.InstallPackageAndAddImportCodeAction.cs
+18
-32
src/Features/Core/Portable/AddImport/CodeActions/PackageReference.ParentCodeAction.cs
...ddImport/CodeActions/PackageReference.ParentCodeAction.cs
+6
-30
未找到文件。
src/Features/Core/Portable/AddImport/CodeActions/PackageReference.InstallPackageAndAddImportCodeAction.cs
浏览文件 @
9f6517c2
...
...
@@ -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
));
}
}
...
...
src/Features/Core/Portable/AddImport/CodeActions/PackageReference.ParentCodeAction.cs
浏览文件 @
9f6517c2
...
...
@@ -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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录