Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
cc3c00b1
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,发现更多精彩内容 >>
提交
cc3c00b1
编写于
7月 15, 2017
作者:
C
CyrusNajmabadi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Simplify fix all implementation.
上级
ca9c2521
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
31 addition
and
30 deletion
+31
-30
src/Features/CSharp/Portable/UseLocalFunction/CSharpUseLocalFunctionCodeFixProvider.cs
...UseLocalFunction/CSharpUseLocalFunctionCodeFixProvider.cs
+31
-30
未找到文件。
src/Features/CSharp/Portable/UseLocalFunction/CSharpUseLocalFunctionCodeFixProvider.cs
浏览文件 @
cc3c00b1
...
...
@@ -59,16 +59,22 @@ public override Task RegisterCodeFixesAsync(CodeFixContext context)
}
var
root
=
editor
.
OriginalRoot
;
var
currentRoot
=
root
.
TrackNodes
(
nodesToTrack
);
// Process declarations in reverse order so that we see the effects of nested
// declarations befor processing the outer decls.
foreach
(
var
(
originalLocalDeclaration
,
originalLambda
)
in
localDeclarationToLambda
.
OrderByDescending
(
kvp
=>
kvp
.
Value
.
SpanStart
))
{
var
delegateType
=
(
INamedTypeSymbol
)
semanticModel
.
GetTypeInfo
(
originalLambda
,
cancellationToken
).
ConvertedType
;
var
parameterList
=
GenerateParameterList
(
semanticModel
,
originalLambda
,
cancellationToken
);
var
currentLocalDeclaration
=
currentRoot
.
GetCurrentNode
(
originalLocalDeclaration
);
var
currentLambda
=
currentRoot
.
GetCurrentNode
(
originalLambda
);
currentRoot
=
ReplaceAnonymousWithLocalFunction
(
document
.
Project
.
Solution
.
Workspace
,
semanticModel
,
currentRoot
,
originalLocalDeclaration
,
originalLambda
,
document
.
Project
.
Solution
.
Workspace
,
currentRoot
,
currentLocalDeclaration
,
currentLambda
,
delegateType
,
parameterList
,
cancellationToken
);
}
...
...
@@ -76,68 +82,63 @@ public override Task RegisterCodeFixesAsync(CodeFixContext context)
}
private
SyntaxNode
ReplaceAnonymousWithLocalFunction
(
Workspace
workspace
,
SemanticModel
semanticModel
,
SyntaxNode
currentRoot
,
LocalDeclarationStatementSyntax
originalLocalDeclaration
,
LambdaExpressionSyntax
originalLambda
,
Workspace
workspace
,
SyntaxNode
currentRoot
,
LocalDeclarationStatementSyntax
localDeclaration
,
LambdaExpressionSyntax
lambda
,
INamedTypeSymbol
delegateType
,
ParameterListSyntax
parameterList
,
CancellationToken
cancellationToken
)
{
var
currentLocalDeclaration
=
currentRoot
.
GetCurrentNode
(
originalLocalDeclaration
);
var
currentLambda
=
currentRoot
.
GetCurrentNode
(
originalLambda
);
var
newLocalFunctionStatement
=
CreateLocalFunctionStatement
(
semanticModel
,
originalLambda
,
currentLocalDeclaration
,
currentLambda
,
cancellationToken
);
localDeclaration
,
lambda
,
delegateType
,
parameterList
,
cancellationToken
);
newLocalFunctionStatement
=
newLocalFunctionStatement
.
WithTriviaFrom
(
currentL
ocalDeclaration
)
newLocalFunctionStatement
=
newLocalFunctionStatement
.
WithTriviaFrom
(
l
ocalDeclaration
)
.
WithAdditionalAnnotations
(
Formatter
.
Annotation
);
var
editor
=
new
SyntaxEditor
(
currentRoot
,
workspace
);
editor
.
ReplaceNode
(
currentLocalDeclaration
,
newLocalFunctionStatement
);
var
currentLambdaStatement
=
currentLambda
.
GetAncestor
<
StatementSyntax
>();
editor
.
ReplaceNode
(
localDeclaration
,
newLocalFunctionStatement
);
if
(
currentLambdaStatement
!=
currentLocalDeclaration
)
var
lambdaStatement
=
lambda
.
GetAncestor
<
StatementSyntax
>();
if
(
lambdaStatement
!=
localDeclaration
)
{
// This is the split decl+init form. Remove the second statement as we're
// merging into the first one.
editor
.
RemoveNode
(
currentL
ambdaStatement
);
editor
.
RemoveNode
(
l
ambdaStatement
);
}
return
editor
.
GetChangedRoot
();
}
private
LocalFunctionStatementSyntax
CreateLocalFunctionStatement
(
SemanticModel
semanticModel
,
LambdaExpressionSyntax
originalL
ambda
,
LocalDeclarationStatementSyntax
currentLocalDeclaration
,
LambdaExpressionSyntax
currentLambda
,
LocalDeclarationStatementSyntax
localDeclaration
,
LambdaExpressionSyntax
l
ambda
,
INamedTypeSymbol
delegateType
,
ParameterListSyntax
parameterList
,
CancellationToken
cancellationToken
)
{
var
modifiers
=
currentL
ambda
.
AsyncKeyword
.
IsKind
(
SyntaxKind
.
AsyncKeyword
)
?
new
SyntaxTokenList
(
currentL
ambda
.
AsyncKeyword
)
var
modifiers
=
l
ambda
.
AsyncKeyword
.
IsKind
(
SyntaxKind
.
AsyncKeyword
)
?
new
SyntaxTokenList
(
l
ambda
.
AsyncKeyword
)
:
default
;
var
delegateType
=
(
INamedTypeSymbol
)
semanticModel
.
GetTypeInfo
(
originalLambda
,
cancellationToken
).
ConvertedType
;
var
invokeMethod
=
delegateType
.
DelegateInvokeMethod
;
var
returnType
=
invokeMethod
.
ReturnsVoid
?
s_voidType
:
invokeMethod
.
ReturnType
.
GenerateTypeSyntax
();
var
identifier
=
currentL
ocalDeclaration
.
Declaration
.
Variables
[
0
].
Identifier
;
var
identifier
=
l
ocalDeclaration
.
Declaration
.
Variables
[
0
].
Identifier
;
var
typeParameterList
=
default
(
TypeParameterListSyntax
);
var
parameterList
=
GenerateParameterList
(
semanticModel
,
originalLambda
,
cancellationToken
);
var
constraintClauses
=
default
(
SyntaxList
<
TypeParameterConstraintClauseSyntax
>);
var
body
=
currentL
ambda
.
Body
.
IsKind
(
SyntaxKind
.
Block
)
?
(
BlockSyntax
)
currentL
ambda
.
Body
var
body
=
l
ambda
.
Body
.
IsKind
(
SyntaxKind
.
Block
)
?
(
BlockSyntax
)
l
ambda
.
Body
:
null
;
var
expressionBody
=
currentL
ambda
.
Body
is
ExpressionSyntax
expression
?
SyntaxFactory
.
ArrowExpressionClause
(
currentL
ambda
.
ArrowToken
,
expression
)
var
expressionBody
=
l
ambda
.
Body
is
ExpressionSyntax
expression
?
SyntaxFactory
.
ArrowExpressionClause
(
l
ambda
.
ArrowToken
,
expression
)
:
null
;
var
semicolonToken
=
currentL
ambda
.
Body
is
ExpressionSyntax
?
currentL
ocalDeclaration
.
SemicolonToken
var
semicolonToken
=
l
ambda
.
Body
is
ExpressionSyntax
?
l
ocalDeclaration
.
SemicolonToken
:
default
;
return
SyntaxFactory
.
LocalFunctionStatement
(
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录