提交 2ac434a2 编写于 作者: I Ivan Basov

Add parameter service unit tests

上级 ece16f44
......@@ -393,7 +393,7 @@ private SyntaxNode GetNodeContainingTargetNode(SyntaxNode matchingNode)
SignatureChange signaturePermutationWithoutAddedParameters = signaturePermutation.WithoutAddedParameters();
var newArguments = PermuteArgumentList(document, declarationSymbol, invocation.ArgumentList.Arguments, signaturePermutationWithoutAddedParameters, isReducedExtensionMethod);
var newArguments = PermuteArgumentList(declarationSymbol, invocation.ArgumentList.Arguments, signaturePermutationWithoutAddedParameters, isReducedExtensionMethod);
newArguments = AddNewArgumentsToList(newArguments, signaturePermutation, isReducedExtensionMethod);
return invocation.WithArgumentList(invocation.ArgumentList.WithArguments(newArguments).WithAdditionalAnnotations(changeSignatureFormattingAnnotation));
}
......@@ -401,7 +401,7 @@ private SyntaxNode GetNodeContainingTargetNode(SyntaxNode matchingNode)
if (updatedNode.IsKind(SyntaxKind.ObjectCreationExpression))
{
var objCreation = (ObjectCreationExpressionSyntax)updatedNode;
var newArguments = PermuteArgumentList(document, declarationSymbol, objCreation.ArgumentList.Arguments, signaturePermutation);
var newArguments = PermuteArgumentList(declarationSymbol, objCreation.ArgumentList.Arguments, signaturePermutation);
return objCreation.WithArgumentList(objCreation.ArgumentList.WithArguments(newArguments).WithAdditionalAnnotations(changeSignatureFormattingAnnotation));
}
......@@ -409,21 +409,21 @@ private SyntaxNode GetNodeContainingTargetNode(SyntaxNode matchingNode)
updatedNode.IsKind(SyntaxKind.BaseConstructorInitializer))
{
var objCreation = (ConstructorInitializerSyntax)updatedNode;
var newArguments = PermuteArgumentList(document, declarationSymbol, objCreation.ArgumentList.Arguments, signaturePermutation);
var newArguments = PermuteArgumentList(declarationSymbol, objCreation.ArgumentList.Arguments, signaturePermutation);
return objCreation.WithArgumentList(objCreation.ArgumentList.WithArguments(newArguments).WithAdditionalAnnotations(changeSignatureFormattingAnnotation));
}
if (updatedNode.IsKind(SyntaxKind.ElementAccessExpression))
{
var elementAccess = (ElementAccessExpressionSyntax)updatedNode;
var newArguments = PermuteArgumentList(document, declarationSymbol, elementAccess.ArgumentList.Arguments, signaturePermutation);
var newArguments = PermuteArgumentList(declarationSymbol, elementAccess.ArgumentList.Arguments, signaturePermutation);
return elementAccess.WithArgumentList(elementAccess.ArgumentList.WithArguments(newArguments).WithAdditionalAnnotations(changeSignatureFormattingAnnotation));
}
if (updatedNode.IsKind(SyntaxKind.Attribute))
{
var attribute = (AttributeSyntax)updatedNode;
var newArguments = PermuteAttributeArgumentList(document, declarationSymbol, attribute.ArgumentList.Arguments, signaturePermutation);
var newArguments = PermuteAttributeArgumentList(declarationSymbol, attribute.ArgumentList.Arguments, signaturePermutation);
return attribute.WithArgumentList(attribute.ArgumentList.WithArguments(newArguments).WithAdditionalAnnotations(changeSignatureFormattingAnnotation));
}
......@@ -538,7 +538,7 @@ private SyntaxNode GetNodeContainingTargetNode(SyntaxNode matchingNode)
}
private SeparatedSyntaxList<T> PermuteDeclaration<T>(
SeparatedSyntaxList<T> list,
SeparatedSyntaxList<T> list,
SignatureChange updatedSignature) where T : SyntaxNode
{
var originalParameters = updatedSignature.OriginalConfiguration.ToListOfParameters();
......@@ -603,12 +603,11 @@ private SyntaxNode GetNodeContainingTargetNode(SyntaxNode matchingNode)
}
private SeparatedSyntaxList<AttributeArgumentSyntax> PermuteAttributeArgumentList(
Document document,
ISymbol declarationSymbol,
SeparatedSyntaxList<AttributeArgumentSyntax> arguments,
SignatureChange updatedSignature)
{
var newArguments = PermuteArguments(document, declarationSymbol, arguments.Select(a => UnifiedArgumentSyntax.Create(a)).ToList(), updatedSignature);
var newArguments = PermuteArguments<AttributeArgumentSyntax>(declarationSymbol, arguments.Select(a => UnifiedArgumentSyntax.Create(a)).ToList(), updatedSignature);
var numSeparatorsToSkip = arguments.Count - newArguments.Count;
// copy whitespace trivia from original position
......@@ -619,13 +618,12 @@ private SyntaxNode GetNodeContainingTargetNode(SyntaxNode matchingNode)
}
private SeparatedSyntaxList<ArgumentSyntax> PermuteArgumentList(
Document document,
ISymbol declarationSymbol,
SeparatedSyntaxList<ArgumentSyntax> arguments,
SignatureChange updatedSignature,
bool isReducedExtensionMethod = false)
{
var newArguments = PermuteArguments(document, declarationSymbol, arguments.Select(a => UnifiedArgumentSyntax.Create(a)).ToList(), updatedSignature, isReducedExtensionMethod);
var newArguments = PermuteArguments<ArgumentSyntax>(declarationSymbol, arguments.Select(a => UnifiedArgumentSyntax.Create(a)).ToList(), updatedSignature, isReducedExtensionMethod);
// copy whitespace trivia from original position
var newArgumentsWithTrivia = TransferLeadingWhitespaceTrivia(
......@@ -643,7 +641,15 @@ private SyntaxNode GetNodeContainingTargetNode(SyntaxNode matchingNode)
var index = 0;
foreach (var newArgument in newArguments)
{
result.Add(TransferLeadingWhitespaceTrivia(newArgument, oldArguments[index]));
if (index < oldArguments.Count)
{
result.Add(TransferLeadingWhitespaceTrivia(newArgument, oldArguments[index]));
}
else
{
result.Add(newArgument);
}
index++;
}
......@@ -786,6 +792,23 @@ private List<SyntaxTrivia> GetPermutedTrivia(CSharpSyntaxNode node, List<XmlElem
updatedLeadingTrivia.Add(newTrivia);
}
var extraNodeList = new List<XmlNodeSyntax>();
while (index < permutedParamNodes.Count)
{
extraNodeList.Add(permutedParamNodes[index]);//.WithLeadingTrivia(node.GetLeadingTrivia()).WithTrailingTrivia(node.GetTrailingTrivia()));
index++;
}
if (extraNodeList.Any())
{
var extraDocComments = SyntaxFactory.DocumentationCommentTrivia(SyntaxKind.MultiLineDocumentationCommentTrivia, SyntaxFactory.List(extraNodeList.AsEnumerable()));
extraDocComments = extraDocComments.WithEndOfComment(SyntaxFactory.Token(SyntaxKind.EndOfDocumentationCommentToken));
extraDocComments = extraDocComments.WithLeadingTrivia(node.GetLeadingTrivia()).WithTrailingTrivia(node.GetTrailingTrivia());
var newTrivia = SyntaxFactory.Trivia(extraDocComments);
updatedLeadingTrivia.Add(newTrivia);
}
return updatedLeadingTrivia;
}
......@@ -852,9 +875,20 @@ protected override IEnumerable<AbstractFormattingRule> GetFormattingRules(Docume
return new[] { new ChangeSignatureFormattingRule() }.Concat(Formatter.GetDefaultFormattingRules(document));
}
protected override IUnifiedArgumentSyntax CreateRegularArgumentSyntax(string callsiteValue)
protected override IUnifiedArgumentSyntax CreateRegularArgumentSyntax<T>(string callsiteValue)
{
return UnifiedArgumentSyntax.Create(SyntaxFactory.Argument(SyntaxFactory.ParseExpression(callsiteValue)));
var type = typeof(T);
if (type == typeof(ArgumentSyntax))
{
return UnifiedArgumentSyntax.Create(SyntaxFactory.Argument(SyntaxFactory.ParseExpression(callsiteValue)));
}
if (type == typeof(AttributeArgumentSyntax))
{
return UnifiedArgumentSyntax.Create(SyntaxFactory.AttributeArgument(SyntaxFactory.ParseExpression(callsiteValue)));
}
return default;
}
}
}
......@@ -46,7 +46,7 @@ internal abstract class AbstractChangeSignatureService : ILanguageService
SignatureChange signaturePermutation,
CancellationToken cancellationToken);
protected abstract IUnifiedArgumentSyntax CreateRegularArgumentSyntax(string callsiteValue);
protected abstract IUnifiedArgumentSyntax CreateRegularArgumentSyntax<T>(string callsiteValue);
protected abstract IEnumerable<AbstractFormattingRule> GetFormattingRules(Document document);
......@@ -387,8 +387,7 @@ private bool TryGetNodeWithEditableSignatureOrAttributes(Location location, Solu
return nodeToUpdate != null;
}
protected List<IUnifiedArgumentSyntax> PermuteArguments(
Document document,
protected List<IUnifiedArgumentSyntax> PermuteArguments<T>(
ISymbol declarationSymbol,
List<IUnifiedArgumentSyntax> arguments,
SignatureChange updatedSignature,
......@@ -469,13 +468,12 @@ private bool TryGetNodeWithEditableSignatureOrAttributes(Location location, Solu
}
}
// 6. TODO MOVE AROUND. Add added arguments (only at end for the moment)
// 6. Add added arguments (only at end for the moment)
var brandNewParameters = updatedSignature.UpdatedConfiguration.ToListOfParameters().Where(p => p is AddedParameter).Cast<AddedParameter>();
foreach (var brandNewParameter in brandNewParameters)
{
newArguments.Add(CreateRegularArgumentSyntax(brandNewParameter.CallsiteValue));
newArguments.Add(CreateRegularArgumentSyntax<T>(brandNewParameter.CallsiteValue).WithName(brandNewParameter.ParameterName));
}
return newArguments;
......
......@@ -419,7 +419,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.ChangeSignature
declarationSymbol As ISymbol,
Optional isReducedExtensionMethod As Boolean = False) As SeparatedSyntaxList(Of ArgumentSyntax)
Dim newArguments As List(Of IUnifiedArgumentSyntax) = MyBase.PermuteArguments(document, declarationSymbol, arguments.Select(Function(a) UnifiedArgumentSyntax.Create(a)).ToList(), permutedSignature, isReducedExtensionMethod)
Dim newArguments As List(Of IUnifiedArgumentSyntax) = MyBase.PermuteArguments(Of ArgumentSyntax)(declarationSymbol, arguments.Select(Function(a) UnifiedArgumentSyntax.Create(a)).ToList(), permutedSignature, isReducedExtensionMethod)
Dim numSeparatorsToSkip = arguments.Count - newArguments.Count
Return SyntaxFactory.SeparatedList(newArguments.Select(Function(a) CType(DirectCast(a, UnifiedArgumentSyntax), ArgumentSyntax)), GetSeparators(arguments, numSeparatorsToSkip))
......@@ -618,7 +618,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.ChangeSignature
Return New AbstractFormattingRule() {New ChangeSignatureFormattingRule()}.Concat(Formatter.GetDefaultFormattingRules(document))
End Function
Protected Overrides Function CreateRegularArgumentSyntax(callsiteValue As String) As IUnifiedArgumentSyntax
Protected Overrides Function CreateRegularArgumentSyntax(Of T)(callsiteValue As String) As IUnifiedArgumentSyntax
Return UnifiedArgumentSyntax.Create(SyntaxFactory.SimpleArgument(SyntaxFactory.ParseExpression(callsiteValue)))
End Function
End Class
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册