提交 ffad2b58 编写于 作者: C Cyrus Najmabadi

Working, with tests.

上级 eff5e315
......@@ -1618,5 +1618,126 @@ public C(int i, string s)
}
}");
}
[WorkItem(35665, "https://github.com/dotnet/roslyn/issues/35665")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsInitializeParameter)]
public async Task TestGenerateRemainingFields1()
{
await TestInRegularAndScript1Async(
@"
class C
{
public C([||]int i, int j, int k)
{
}
}",
@"
class C
{
private readonly int i;
private readonly int j;
private readonly int k;
public C(int i, int j, int k)
{
this.i = i;
this.j = j;
this.k = k;
}
}", index: 3);
}
[WorkItem(35665, "https://github.com/dotnet/roslyn/issues/35665")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsInitializeParameter)]
public async Task TestGenerateRemainingFields2()
{
await TestInRegularAndScript1Async(
@"
class C
{
private readonly int i;
public C(int i, [||]int j, int k)
{
this.i = i;
}
}",
@"
class C
{
private readonly int i;
private readonly int j;
private readonly int k;
public C(int i, int j, int k)
{
this.i = i;
this.j = j;
this.k = k;
}
}", index: 2);
}
[WorkItem(35665, "https://github.com/dotnet/roslyn/issues/35665")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsInitializeParameter)]
public async Task TestGenerateRemainingFields3()
{
await TestInRegularAndScript1Async(
@"
class C
{
private readonly int j;
public C([||]int i, int j, int k)
{
this.j = j;
}
}",
@"
class C
{
private readonly int i;
private readonly int j;
private readonly int k;
public C(int i, int j, int k)
{
this.i = i;
this.j = j;
this.k = k;
}
}", index: 2);
}
[WorkItem(35665, "https://github.com/dotnet/roslyn/issues/35665")]
[Fact, Trait(Traits.Feature, Traits.Features.CodeActionsInitializeParameter)]
public async Task TestGenerateRemainingFields4()
{
await TestInRegularAndScript1Async(
@"
class C
{
private readonly int k;
public C([||]int i, int j, int k)
{
this.k = k;
}
}",
@"
class C
{
private readonly int i;
private readonly int j;
private readonly int k;
public C(int i, int j, int k)
{
this.i = i;
this.j = j;
this.k = k;
}
}", index: 2);
}
}
}
......@@ -35,8 +35,8 @@ protected override SyntaxNode GetTypeBlock(SyntaxNode node)
protected override SyntaxNode GetBody(SyntaxNode functionDeclaration)
=> InitializeParameterHelpers.GetBody(functionDeclaration);
protected override void InsertStatement(SyntaxEditor editor, SyntaxNode functionDeclaration, IMethodSymbol method, SyntaxNode statementToAddAfterOpt, StatementSyntax statement)
=> InitializeParameterHelpers.InsertStatement(editor, functionDeclaration, method, statementToAddAfterOpt, statement);
protected override void InsertStatement(SyntaxEditor editor, SyntaxNode functionDeclaration, bool returnsVoid, SyntaxNode statementToAddAfterOpt, StatementSyntax statement)
=> InitializeParameterHelpers.InsertStatement(editor, functionDeclaration, returnsVoid, statementToAddAfterOpt, statement);
protected override bool IsImplicitConversion(Compilation compilation, ITypeSymbol source, ITypeSymbol destination)
=> InitializeParameterHelpers.IsImplicitConversion(compilation, source, destination);
......
......@@ -16,6 +16,7 @@ namespace Microsoft.CodeAnalysis.CSharp.InitializeParameter
[ExtensionOrder(Before = PredefinedCodeRefactoringProviderNames.Wrapping)]
internal class CSharpInitializeMemberFromParameterCodeRefactoringProvider :
AbstractInitializeMemberFromParameterCodeRefactoringProvider<
BaseTypeDeclarationSyntax,
ParameterSyntax,
StatementSyntax,
ExpressionSyntax>
......@@ -34,8 +35,8 @@ protected override SyntaxNode GetTypeBlock(SyntaxNode node)
protected override SyntaxNode TryGetLastStatement(IBlockOperation blockStatementOpt)
=> InitializeParameterHelpers.TryGetLastStatement(blockStatementOpt);
protected override void InsertStatement(SyntaxEditor editor, SyntaxNode functionDeclaration, IMethodSymbol method, SyntaxNode statementToAddAfterOpt, StatementSyntax statement)
=> InitializeParameterHelpers.InsertStatement(editor, functionDeclaration, method, statementToAddAfterOpt, statement);
protected override void InsertStatement(SyntaxEditor editor, SyntaxNode functionDeclaration, bool returnsVoid, SyntaxNode statementToAddAfterOpt, StatementSyntax statement)
=> InitializeParameterHelpers.InsertStatement(editor, functionDeclaration, returnsVoid, statementToAddAfterOpt, statement);
protected override bool IsImplicitConversion(Compilation compilation, ITypeSymbol source, ITypeSymbol destination)
=> InitializeParameterHelpers.IsImplicitConversion(compilation, source, destination);
......
......@@ -62,7 +62,7 @@ public static SyntaxNode TryGetLastStatement(IBlockOperation blockStatementOpt)
public static void InsertStatement(
SyntaxEditor editor,
SyntaxNode functionDeclaration,
IMethodSymbol method,
bool returnsVoid,
SyntaxNode statementToAddAfterOpt,
StatementSyntax statement)
{
......@@ -72,7 +72,7 @@ public static SyntaxNode TryGetLastStatement(IBlockOperation blockStatementOpt)
{
var semicolonToken = TryGetSemicolonToken(functionDeclaration) ?? SyntaxFactory.Token(SyntaxKind.SemicolonToken);
if (!TryConvertExpressionBodyToStatement(body, semicolonToken, !method.ReturnsVoid, out var convertedStatement))
if (!TryConvertExpressionBodyToStatement(body, semicolonToken, !returnsVoid, out var convertedStatement))
{
return;
}
......
......@@ -345,7 +345,7 @@ private bool IsNullCheck(IOperation operand1, IOperation operand2, IParameterSym
// signature.
var statementToAddAfter = GetStatementToAddNullCheckAfter(
semanticModel, parameter, blockStatementOpt, cancellationToken);
InsertStatement(editor, functionDeclaration, method, statementToAddAfter, nullCheckStatement);
InsertStatement(editor, functionDeclaration, method.ReturnsVoid, statementToAddAfter, nullCheckStatement);
var newRoot = editor.GetChangedRoot();
return document.WithSyntaxRoot(newRoot);
......
......@@ -53,7 +53,7 @@ internal abstract partial class AbstractInitializeParameterCodeRefactoringProvid
CancellationToken cancellationToken);
protected abstract void InsertStatement(
SyntaxEditor editor, SyntaxNode functionDeclaration, IMethodSymbol method,
SyntaxEditor editor, SyntaxNode functionDeclaration, bool returnsVoid,
SyntaxNode? statementToAddAfterOpt, TStatementSyntax statement);
public override async Task ComputeRefactoringsAsync(CodeRefactoringContext context)
......
......@@ -35,7 +35,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.InitializeParameter
Return InitializeParameterHelpers.GetBody(functionDeclaration)
End Function
Protected Overrides Sub InsertStatement(editor As SyntaxEditor, functionDeclaration As SyntaxNode, method As IMethodSymbol, statementToAddAfterOpt As SyntaxNode, statement As StatementSyntax)
Protected Overrides Sub InsertStatement(editor As SyntaxEditor, functionDeclaration As SyntaxNode, returnsVoid As Boolean, statementToAddAfterOpt As SyntaxNode, statement As StatementSyntax)
InitializeParameterHelpers.InsertStatement(editor, functionDeclaration, statementToAddAfterOpt, statement)
End Sub
......
......@@ -15,6 +15,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.InitializeParameter
<ExtensionOrder(Before:=PredefinedCodeRefactoringProviderNames.Wrapping)>
Friend Class VisualBasicInitializeMemberFromParameterCodeRefactoringProvider
Inherits AbstractInitializeMemberFromParameterCodeRefactoringProvider(Of
TypeBlockSyntax,
ParameterSyntax,
StatementSyntax,
ExpressionSyntax)
......@@ -39,7 +40,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.InitializeParameter
Return InitializeParameterHelpers.IsImplicitConversion(compilation, source, destination)
End Function
Protected Overrides Sub InsertStatement(editor As SyntaxEditor, functionDeclaration As SyntaxNode, method As IMethodSymbol, statementToAddAfterOpt As SyntaxNode, statement As StatementSyntax)
Protected Overrides Sub InsertStatement(editor As SyntaxEditor, functionDeclaration As SyntaxNode, returnsVoid As Boolean, statementToAddAfterOpt As SyntaxNode, statement As StatementSyntax)
InitializeParameterHelpers.InsertStatement(editor, functionDeclaration, statementToAddAfterOpt, statement)
End Sub
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册