Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
6a0f32d5
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,发现更多精彩内容 >>
提交
6a0f32d5
编写于
2月 22, 2018
作者:
M
Martin Strecker
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Code formatting and small refactorings.
上级
306c2b8a
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
20 addition
and
10 deletion
+20
-10
src/Features/Core/Portable/AddParameter/AbstractAddParameterCodeFixProvider.cs
...table/AddParameter/AbstractAddParameterCodeFixProvider.cs
+20
-10
未找到文件。
src/Features/Core/Portable/AddParameter/AbstractAddParameterCodeFixProvider.cs
浏览文件 @
6a0f32d5
...
...
@@ -139,7 +139,8 @@ public override async Task RegisterCodeFixesAsync(CodeFixContext context)
var
arguments
=
(
SeparatedSyntaxList
<
TArgumentSyntax
>)
syntaxFacts
.
GetArgumentsOfObjectCreationExpression
(
objectCreation
);
var
methodCandidates
=
type
.
InstanceConstructors
;
var
insertionData
=
GetArgumentInsertPositionForMethodCandidates
(
argumentOpt
,
semanticModel
,
syntaxFacts
,
arguments
,
methodCandidates
);
var
insertionData
=
GetArgumentInsertPositionForMethodCandidates
(
argumentOpt
,
semanticModel
,
syntaxFacts
,
arguments
,
methodCandidates
);
RegisterFixForMethodOverloads
(
context
,
arguments
,
insertionData
);
}
...
...
@@ -206,12 +207,15 @@ private int NonParamsParameterCount(IMethodSymbol method)
var
title
=
GetCodeFixTitle
(
FeaturesResources
.
Add_parameter_to_0
,
methodToUpdate
,
parameters
);
var
hasCascadingDeclarations
=
HasCascadingDeclarations
(
methodToUpdate
);
var
codeFixForDeclarationOnly
=
new
MyCodeAction
(
title
,
c
=>
FixAsync
(
context
.
Document
,
methodToUpdate
,
argumentToInsert
,
arguments
,
fixAllReferences
:
false
,
c
));
if
(
hasCascadingDeclarations
)
{
var
titleForCascadingFix
=
GetCodeFixTitle
(
FeaturesResources
.
Add_parameter_to_0_including_overrides_implementations
,
methodToUpdate
,
parameters
);
var
titleForCascadingFix
=
GetCodeFixTitle
(
FeaturesResources
.
Add_parameter_to_0_including_overrides_implementations
,
methodToUpdate
,
parameters
);
context
.
RegisterCodeFix
(
new
CodeAction
.
CodeActionWithNestedActions
(
title
,
ImmutableArray
.
Create
<
CodeAction
>(
new
MyCodeAction
(
title
,
c
=>
FixAsync
(
context
.
Document
,
methodToUpdate
,
argumentToInsert
,
arguments
,
fixAllReferences
:
false
,
c
)),
codeFixForDeclarationOnly
,
new
MyCodeAction
(
titleForCascadingFix
,
c
=>
FixAsync
(
context
.
Document
,
methodToUpdate
,
argumentToInsert
,
arguments
,
fixAllReferences
:
true
,
c
))),
isInlinable
:
true
),
...
...
@@ -220,8 +224,7 @@ private int NonParamsParameterCount(IMethodSymbol method)
else
{
context
.
RegisterCodeFix
(
new
MyCodeAction
(
title
,
c
=>
FixAsync
(
context
.
Document
,
methodToUpdate
,
argumentToInsert
,
arguments
,
fixAllReferences
:
false
,
c
)),
codeFixForDeclarationOnly
,
context
.
Diagnostics
);
}
}
...
...
@@ -293,17 +296,24 @@ private static string GetCodeFixTitle(string resourceString, IMethodSymbol metho
{
var
solution
=
invocationDocument
.
Project
.
Solution
;
var
argumentType
=
await
GetArgumentTypeAsync
(
invocationDocument
,
argument
,
cancellationToken
).
ConfigureAwait
(
false
);
// the argumentNameSuggestion is the base for the parameter name. For each method declaration the name is made unique to avoid name collisions.
var
(
argumentNameSuggestion
,
isNamedArgument
)
=
await
GetNameSuggestionForArgumentAsync
(
invocationDocument
,
argument
,
cancellationToken
).
ConfigureAwait
(
false
);
// The argumentNameSuggestion is the base for the parameter name.
// For each method declaration the name is made unique to avoid name collisions.
var
(
argumentNameSuggestion
,
isNamedArgument
)
=
await
GetNameSuggestionForArgumentAsync
(
invocationDocument
,
argument
,
cancellationToken
).
ConfigureAwait
(
false
);
var
referencedSymbols
=
fixAllReferences
?
await
FindMethodDeclarationReferences
(
invocationDocument
,
method
,
cancellationToken
).
ConfigureAwait
(
false
)
:
method
.
GetAllMethodSymbolsOfPartialParts
();
// TODO: Insert hint in the fix with a warning if anySymbolsReferenceNotInSource is true
var
anySymbolReferencesNotInSource
=
referencedSymbols
.
Any
(
symbol
=>
!
symbol
.
IsFromSource
());
var
locationsInSource
=
referencedSymbols
.
Where
(
symbol
=>
symbol
.
IsFromSource
());
// Indexing Locations[0] is valid because IMethodSymbols have one location at most and IsFromSource() tests if there is at least one location.
// Indexing Locations[0] is valid because IMethodSymbols have one location at most
// and IsFromSource() tests if there is at least one location.
var
locationsByDocument
=
locationsInSource
.
ToLookup
(
declarationLocation
=>
solution
.
GetDocument
(
declarationLocation
.
Locations
[
0
].
SourceTree
));
foreach
(
var
documentLookup
in
locationsByDocument
)
{
var
document
=
documentLookup
.
Key
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录