提交 df25ee29 编写于 作者: C CyrusNajmabadi

Improve trivia preservation when converting methods into a property.

上级 0a304b01
......@@ -196,8 +196,9 @@ int Goo
ignoreTrivia: false);
}
[WorkItem(21460, "https://github.com/dotnet/roslyn/issues/21460")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsReplaceMethodWithProperty)]
public async Task TestIfDefMethod()
public async Task TestIfDefMethod1()
{
await TestWithAllCodeStyleOff(
@"class C
......@@ -210,6 +211,109 @@ public async Task TestIfDefMethod()
}",
@"class C
{
#if true
int Goo
{
get
{
}
}
#endif
}");
}
[WorkItem(21460, "https://github.com/dotnet/roslyn/issues/21460")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsReplaceMethodWithProperty)]
public async Task TestIfDefMethod2()
{
await TestWithAllCodeStyleOff(
@"class C
{
#if true
int [||]GetGoo()
{
}
void SetGoo(int val)
{
}
#endif
}",
@"class C
{
#if true
int Goo
{
get
{
}
}
void SetGoo(int val)
{
}
#endif
}");
}
[WorkItem(21460, "https://github.com/dotnet/roslyn/issues/21460")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsReplaceMethodWithProperty)]
public async Task TestIfDefMethod3()
{
await TestWithAllCodeStyleOff(
@"class C
{
#if true
int [||]GetGoo()
{
}
void SetGoo(int val)
{
}
#endif
}",
@"class C
{
#if true
int Goo
{
get
{
}
set
{
}
}
#endif
}", index: 1);
}
[WorkItem(21460, "https://github.com/dotnet/roslyn/issues/21460")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsReplaceMethodWithProperty)]
public async Task TestIfDefMethod4()
{
await TestWithAllCodeStyleOff(
@"class C
{
#if true
void SetGoo(int val)
{
}
int [||]GetGoo()
{
}
#endif
}",
@"class C
{
#if true
void SetGoo(int val)
{
}
int Goo
{
get
......@@ -220,6 +324,42 @@ int Goo
}");
}
[WorkItem(21460, "https://github.com/dotnet/roslyn/issues/21460")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsReplaceMethodWithProperty)]
public async Task TestIfDefMethod5()
{
await TestWithAllCodeStyleOff(
@"class C
{
#if true
void SetGoo(int val)
{
}
int [||]GetGoo()
{
}
#endif
}",
@"class C
{
#if true
int Goo
{
get
{
}
set
{
}
}
#endif
}", index: 1);
}
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsReplaceMethodWithProperty)]
public async Task TestMethodWithTrivia_2()
{
......@@ -742,7 +882,6 @@ void SetGoo(int i)
class C
{
int Goo
{
get
......@@ -782,7 +921,6 @@ void Bar()
class C
{
int Goo
{
get
......@@ -822,7 +960,6 @@ private void SetGoo(int i)
class C
{
public int Goo
{
get
......@@ -893,7 +1030,6 @@ void Bar()
class C
{
int Goo
{
get
......@@ -934,7 +1070,6 @@ void SetGoo(int i)
class C
{
int Goo
{
get
......@@ -971,7 +1106,6 @@ void SetGoo(int value)
class C
{
int Goo
{
get
......@@ -1008,7 +1142,6 @@ void SetGoo(int i)
class C
{
int Goo
{
get
......@@ -1193,7 +1326,6 @@ void setGoo(int i)
class C
{
int Goo
{
get
......@@ -1249,7 +1381,6 @@ void setGoo((int, string) i)
class C
{
(int, string) Goo
{
get
......@@ -1284,7 +1415,6 @@ void setGoo((int a, string b) i)
class C
{
(int a, string b) Goo
{
get
......@@ -1562,7 +1692,6 @@ void SetGoo(int i)
}",
@"class C
{
int Goo { get => 1; set => _i = value; }
}",
index: 1,
......@@ -1588,7 +1717,6 @@ void SetGoo(int i)
}",
@"class C
{
int Goo
{
get
......@@ -1625,7 +1753,6 @@ void SetGoo(int i)
}",
@"class C
{
int Goo { get => 1; set => _i = value; }
}",
index: 1,
......
......@@ -64,11 +64,14 @@ public void RemoveSetMethod(SyntaxEditor editor, SyntaxNode setMethodDeclaration
return;
}
editor.ReplaceNode(getMethodDeclaration,
ConvertMethodsToProperty(
documentOptions, parseOptions,
semanticModel, editor.Generator,
getAndSetMethods, propertyName, nameChanged));
var newProperty = ConvertMethodsToProperty(
documentOptions, parseOptions,
semanticModel, editor.Generator,
getAndSetMethods, propertyName, nameChanged);
// newProperty = newProperty.WithTriviaFrom(getMethodDeclaration);
editor.ReplaceNode(getMethodDeclaration, newProperty);
}
public SyntaxNode ConvertMethodsToProperty(
......@@ -147,13 +150,16 @@ public void RemoveSetMethod(SyntaxEditor editor, SyntaxNode setMethodDeclaration
getMethodDeclaration.ReturnType, getMethodDeclaration.ExplicitInterfaceSpecifier,
nameToken, accessorList: null);
IEnumerable<SyntaxTrivia> trivia = getMethodDeclaration.GetLeadingTrivia();
var finalLeadingTrivia = getMethodDeclaration.GetLeadingTrivia().ToList();
var setMethodDeclaration = getAndSetMethods.SetMethodDeclaration;
if (setMethodDeclaration != null)
{
trivia = trivia.Concat(setMethodDeclaration.GetLeadingTrivia());
finalLeadingTrivia.AddRange(
setMethodDeclaration.GetLeadingTrivia()
.SkipWhile(t => t.Kind() == SyntaxKind.EndOfLineTrivia)
.Where(t => !t.IsDirective));
}
property = property.WithLeadingTrivia(trivia.Where(t => !t.IsDirective));
property = property.WithLeadingTrivia(finalLeadingTrivia);
var accessorList = SyntaxFactory.AccessorList(SyntaxFactory.SingletonList(getAccessor));
if (setAccessor != null)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册