Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
aeaff1eb
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,发现更多精彩内容 >>
提交
aeaff1eb
编写于
6月 03, 2016
作者:
C
CyrusNajmabadi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix issue when rewriting code already rewritten.
上级
2d6f5d31
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
63 addition
and
7 deletion
+63
-7
src/EditorFeatures/CSharpTest/CodeActions/ReplacePropertyWithMethods/ReplacePropertyWithMethodsTests.cs
...acePropertyWithMethods/ReplacePropertyWithMethodsTests.cs
+34
-0
src/Features/Core/Portable/ReplacePropertyWithMethods/AbstractReplacePropertyWithMethodsService.cs
...yWithMethods/AbstractReplacePropertyWithMethodsService.cs
+29
-7
未找到文件。
src/EditorFeatures/CSharpTest/CodeActions/ReplacePropertyWithMethods/ReplacePropertyWithMethodsTests.cs
浏览文件 @
aeaff1eb
...
...
@@ -561,5 +561,39 @@ void M()
}
}"
,
compareTokens
:
false
);
}
[
Fact
,
Trait
(
Traits
.
Feature
,
Traits
.
Features
.
CodeActionsReplacePropertyWithMethods
)]
public
async
Task
ReplaceReadInsideWrite1
()
{
await
TestAsync
(
@"class C
{
int [||]Prop { get; set; }
void M()
{
Prop = Prop + 1;
}
}"
,
@"class C
{
private int prop;
private int GetProp()
{
return this.prop;
}
private void SetProp(int value)
{
this.prop = value;
}
void M()
{
SetProp(GetProp() + 1);
}
}"
);
}
}
}
src/Features/Core/Portable/ReplacePropertyWithMethods/AbstractReplacePropertyWithMethodsService.cs
浏览文件 @
aeaff1eb
...
...
@@ -69,6 +69,8 @@ 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
,
...
...
@@ -98,6 +100,8 @@ private struct ReferenceReplacer
{
_expression
=
_expression
.
Parent
as
TExpressionSyntax
;
}
getRightHandSideOfParent
=
(
replacer
,
parent
)
=>
(
TExpressionSyntax
)
replacer
.
_syntaxFacts
.
GetRightHandSideOfAssignment
(
parent
);
}
private
SyntaxGenerator
Generator
=>
_editor
.
Generator
;
...
...
@@ -125,8 +129,9 @@ 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
(
writeValue
:
(
TExpressionSyntax
)
_syntaxFacts
.
GetRightHandSideOfAssignment
(
_expression
.
Parent
)
,
getWriteValue
:
getRightHandSideOfParent
,
keepTrivia
:
true
,
conflictMessage
:
null
);
}
...
...
@@ -178,13 +183,30 @@ private void ReplaceRead(bool keepTrivia, string conflictMessage)
bool
keepTrivia
,
string
conflictMessage
)
{
var
writeExpression
=
GetWriteExpression
(
writeValue
,
keepTrivia
,
conflictMessage
);
if
(
_expression
.
Parent
is
TStatementSyntax
)
{
writeExpression
=
Generator
.
ExpressionStatement
(
writeExpression
);
}
ReplaceWrite
((
_1
,
_2
)
=>
writeValue
,
keepTrivia
,
conflictMessage
);
}
_editor
.
ReplaceNode
(
_expression
.
Parent
,
writeExpression
);
private
void
ReplaceWrite
(
Func
<
ReferenceReplacer
,
SyntaxNode
,
TExpressionSyntax
>
getWriteValue
,
bool
keepTrivia
,
string
conflictMessage
)
{
var
replacer
=
this
;
// Call this overload so we can see this node after already replacing any
// references in the writing side of it.
_editor
.
ReplaceNode
(
_expression
.
Parent
,
(
parent
,
generator
)
=>
{
var
writeValue
=
getWriteValue
(
replacer
,
parent
);
var
writeExpression
=
replacer
.
GetWriteExpression
(
writeValue
,
keepTrivia
,
conflictMessage
);
if
(
replacer
.
_expression
.
Parent
is
TStatementSyntax
)
{
writeExpression
=
replacer
.
Generator
.
ExpressionStatement
(
writeExpression
);
}
return
writeExpression
;
});
}
private
TExpressionSyntax
GetReadExpression
(
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录