Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
a1dc6251
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,发现更多精彩内容 >>
提交
a1dc6251
编写于
6月 03, 2016
作者:
C
CyrusNajmabadi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Extract out statics to prevent allocations.
上级
cca7540d
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
41 addition
and
34 deletion
+41
-34
src/Features/Core/Portable/ReplacePropertyWithMethods/AbstractReplacePropertyWithMethodsService.cs
...yWithMethods/AbstractReplacePropertyWithMethodsService.cs
+41
-34
未找到文件。
src/Features/Core/Portable/ReplacePropertyWithMethods/AbstractReplacePropertyWithMethodsService.cs
浏览文件 @
a1dc6251
...
...
@@ -52,6 +52,8 @@ protected static SyntaxNode GetFieldReference(SyntaxGenerator generator, IFieldS
referenceReplacer
.
Do
();
}
private
delegate
TExpressionSyntax
GetWriteValue
(
ReferenceReplacer
replacer
,
SyntaxNode
parent
);
private
struct
ReferenceReplacer
{
private
readonly
AbstractReplacePropertyWithMethodsService
<
TIdentifierNameSyntax
,
TExpressionSyntax
,
TStatementSyntax
>
_service
;
...
...
@@ -69,8 +71,6 @@ private struct ReferenceReplacer
private
readonly
TExpressionSyntax
_expression
;
private
readonly
CancellationToken
_cancellationToken
;
private
readonly
Func
<
ReferenceReplacer
,
SyntaxNode
,
TExpressionSyntax
>
getRightHandSideOfParent
;
public
ReferenceReplacer
(
AbstractReplacePropertyWithMethodsService
<
TIdentifierNameSyntax
,
TExpressionSyntax
,
TStatementSyntax
>
service
,
SemanticModel
semanticModel
,
...
...
@@ -100,10 +100,38 @@ private struct ReferenceReplacer
{
_expression
=
_expression
.
Parent
as
TExpressionSyntax
;
}
getRightHandSideOfParent
=
(
replacer
,
parent
)
=>
(
TExpressionSyntax
)
replacer
.
_syntaxFacts
.
GetRightHandSideOfAssignment
(
parent
);
}
private
static
readonly
GetWriteValue
getWriteValueForLeftSideOfAssignment
=
(
replacer
,
parent
)
=>
{
return
(
TExpressionSyntax
)
replacer
.
_syntaxFacts
.
GetRightHandSideOfAssignment
(
parent
);
};
private
static
readonly
GetWriteValue
getWriteValueForIncrementOrDecrement
=
(
replacer
,
parent
)
=>
{
// We're being read from and written to (i.e. Prop++), we need to replace with a
// Get and a Set call.
var
readExpression
=
replacer
.
GetReadExpression
(
keepTrivia
:
false
,
conflictMessage
:
null
);
var
literalOne
=
replacer
.
Generator
.
LiteralExpression
(
1
);
var
writeValue
=
replacer
.
_syntaxFacts
.
IsOperandOfIncrementExpression
(
replacer
.
_expression
)
?
replacer
.
Generator
.
AddExpression
(
readExpression
,
literalOne
)
:
replacer
.
Generator
.
SubtractExpression
(
readExpression
,
literalOne
);
return
(
TExpressionSyntax
)
writeValue
;
};
private
static
GetWriteValue
getWriteValueForCompoundAssignment
=
(
replacer
,
parent
)
=>
{
var
readExpression
=
replacer
.
GetReadExpression
(
keepTrivia
:
false
,
conflictMessage
:
null
);
// Convert "Prop *= X" into "Prop * X".
return
replacer
.
_service
.
UnwrapCompoundAssignment
(
parent
,
readExpression
);
};
private
SyntaxGenerator
Generator
=>
_editor
.
Generator
;
public
void
Do
()
...
...
@@ -129,9 +157,8 @@ public void Do()
{
// We're only being written to here. This is safe to replace with a call to the
// setter.
var
replacer
=
this
;
ReplaceWrite
(
getWriteValue
:
getRightHandSideOfPar
ent
,
getWriteValue
ForLeftSideOfAssignm
ent
,
keepTrivia
:
true
,
conflictMessage
:
null
);
}
...
...
@@ -141,16 +168,10 @@ public void Do()
}
else
if
(
_syntaxFacts
.
IsOperandOfIncrementOrDecrementExpression
(
_expression
))
{
// We're being read from and written to (i.e. Prop++), we need to replace with a
// Get and a Set call.
var
readExpression
=
GetReadExpression
(
keepTrivia
:
false
,
conflictMessage
:
null
);
var
literalOne
=
Generator
.
LiteralExpression
(
1
);
var
writeValue
=
_syntaxFacts
.
IsOperandOfIncrementExpression
(
_expression
)
?
Generator
.
AddExpression
(
readExpression
,
literalOne
)
:
Generator
.
SubtractExpression
(
readExpression
,
literalOne
);
ReplaceWrite
((
TExpressionSyntax
)
writeValue
,
keepTrivia
:
true
,
conflictMessage
:
null
);
ReplaceWrite
(
getWriteValueForIncrementOrDecrement
,
keepTrivia
:
true
,
conflictMessage
:
null
);
}
else
if
(
_syntaxFacts
.
IsInferredAnonymousObjectMemberDeclarator
(
_expression
.
Parent
))
//.IsParentKind(SyntaxKind.AnonymousObjectMemberDeclarator))
{
...
...
@@ -179,15 +200,7 @@ private void ReplaceRead(bool keepTrivia, string conflictMessage)
}
private
void
ReplaceWrite
(
TExpressionSyntax
writeValue
,
bool
keepTrivia
,
string
conflictMessage
)
{
ReplaceWrite
((
_1
,
_2
)
=>
writeValue
,
keepTrivia
,
conflictMessage
);
}
private
void
ReplaceWrite
(
Func
<
ReferenceReplacer
,
SyntaxNode
,
TExpressionSyntax
>
getWriteValue
,
GetWriteValue
getWriteValue
,
bool
keepTrivia
,
string
conflictMessage
)
{
...
...
@@ -312,16 +325,10 @@ private void HandleCompoundAssignExpression()
{
// We're being read from and written to from a compound assignment
// (i.e. Prop *= X), we need to replace with a Get and a Set call.
ReplaceWrite
(
getWriteValue
:
(
replacer
,
parent
)
=>
{
var
readExpression
=
replacer
.
GetReadExpression
(
keepTrivia
:
false
,
conflictMessage
:
null
);
// Convert "Prop *= X" into "Prop * X".
return
replacer
.
_service
.
UnwrapCompoundAssignment
(
parent
,
readExpression
);
},
keepTrivia
:
true
,
conflictMessage
:
null
);
getWriteValueForCompoundAssignment
,
keepTrivia
:
true
,
conflictMessage
:
null
);
}
private
static
TIdentifierNameSyntax
AddConflictAnnotation
(
TIdentifierNameSyntax
name
,
string
conflictMessage
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录