提交 5fdfc33f 编写于 作者: I Ivan Basov

existing change signature service tests fixed

上级 f07ea360
......@@ -30,14 +30,14 @@ End Class]]></Text>.NormalizedValue()
End Function
<WpfFact, Trait(Traits.Feature, Traits.Features.ChangeSignature)>
Public Async Function TestReorderMethodParameters_InsufficientParameters_None() As Task
Public Async Function TestReorderMethodParameters_NoExistingParameters() As Task
Dim markup = <Text><![CDATA[
Class C
Sub $$M()
End Sub
End Class]]></Text>.NormalizedValue()
Await TestChangeSignatureViaCommandAsync(LanguageNames.VisualBasic, markup, expectedSuccess:=False, expectedErrorText:=FeaturesResources.This_signature_does_not_contain_parameters_that_can_be_changed)
Await TestChangeSignatureViaCommandAsync(LanguageNames.VisualBasic, markup, expectedSuccess:=True)
End Function
<WpfFact, Trait(Traits.Feature, Traits.Features.ChangeSignature)>
......
......@@ -448,9 +448,12 @@ private SyntaxNode GetNodeContainingTargetNode(SyntaxNode matchingNode)
return null;
}
private SeparatedSyntaxList<ArgumentSyntax> AddNewArgumentsToList(SeparatedSyntaxList<ArgumentSyntax> newArguments, SignatureChange signaturePermutation)
private SeparatedSyntaxList<ArgumentSyntax> AddNewArgumentsToList(
SeparatedSyntaxList<ArgumentSyntax> newArguments,
SignatureChange signaturePermutation)
{
List<ArgumentSyntax> fullList = new List<ArgumentSyntax>();
List<SyntaxToken> separators = new List<SyntaxToken>();
var updatedParameters = signaturePermutation.UpdatedConfiguration.ToListOfParameters();
......@@ -468,6 +471,7 @@ private SeparatedSyntaxList<ArgumentSyntax> AddNewArgumentsToList(SeparatedSynta
seenNameEquals ? SyntaxFactory.NameColon(addedParameter.Name) : default,
refKindKeyword: default,
expression: SyntaxFactory.ParseExpression(addedParameter.CallsiteValue)));
separators.Add(SyntaxFactory.Token(SyntaxKind.CommaToken));
}
}
else
......@@ -479,12 +483,28 @@ private SeparatedSyntaxList<ArgumentSyntax> AddNewArgumentsToList(SeparatedSynta
seenNameEquals = true;
}
if (indexInExistingList < newArguments.SeparatorCount)
{
separators.Add(newArguments.GetSeparator(indexInExistingList));
}
fullList.Add(newArguments[indexInExistingList++]);
}
}
}
return SyntaxFactory.SeparatedList(fullList);
// Add the rest of existing parameters, e.g. from the params argument.
while (indexInExistingList < newArguments.Count)
{
if (indexInExistingList < newArguments.SeparatorCount)
{
separators.Add(newArguments.GetSeparator(indexInExistingList));
}
fullList.Add(newArguments[indexInExistingList++]);
}
return SyntaxFactory.SeparatedList(fullList, separators);
}
private SeparatedSyntaxList<T> PermuteDeclaration<T>(SeparatedSyntaxList<T> list, SignatureChange updatedSignature) where T : SyntaxNode
......
......@@ -10,6 +10,7 @@ Imports Microsoft.CodeAnalysis.Formatting
Imports Microsoft.CodeAnalysis.Host.Mef
Imports Microsoft.CodeAnalysis.PooledObjects
Imports System.Composition
Imports Microsoft.CodeAnalysis.Utilities
Namespace Microsoft.CodeAnalysis.VisualBasic.ChangeSignature
<ExportLanguageService(GetType(AbstractChangeSignatureService), LanguageNames.VisualBasic), [Shared]>
......@@ -425,17 +426,20 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.ChangeSignature
End Function
Private Function PermuteDeclaration(Of T As SyntaxNode)(list As SeparatedSyntaxList(Of T), updatedSignature As SignatureChange) As SeparatedSyntaxList(Of T)
Dim originalParameters = updatedSignature.OriginalConfiguration.ToListOfParameters()
Dim originalParameterSymbols = updatedSignature.OriginalConfiguration.ToListOfParameters().Select(Function(p) p.Symbol).ToArray()
Dim reorderedParameters = updatedSignature.UpdatedConfiguration.ToListOfParameters()
Dim newParameters = New List(Of T)
For Each newParam In reorderedParameters
Dim pos = originalParameters.IndexOf(newParam)
Dim param = list(pos)
newParameters.Add(param)
Dim existingParam = TryCast(newParam, ExistingParameter)
If existingParam IsNot Nothing Then
Dim pos = originalParameterSymbols.IndexOf(existingParam.Symbol)
Dim param = list(pos)
newParameters.Add(param)
End If
Next
Dim numSeparatorsToSkip = originalParameters.Count - reorderedParameters.Count
Dim numSeparatorsToSkip = originalParameterSymbols.Length - reorderedParameters.Count
Return SyntaxFactory.SeparatedList(newParameters, GetSeparators(list, numSeparatorsToSkip))
End Function
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册