Created
November 7, 2014 21:58
-
-
Save EIrwin/dc03b6143c28e3d78f81 to your computer and use it in GitHub Desktop.
FixInternalUserOrdinal Method Implementation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private async Task<Document> FixIInternalUserOrdinal(Document document,MethodDeclarationSyntax methodDeclaration,CancellationToken cancellationToken) | |
{ | |
//Document to return; | |
Document newDocument = null; | |
//Retrieve original paramater list syntax node from method declaration | |
ParameterListSyntax originalParameterListSyntax = methodDeclaration.ParameterList; | |
//Retrieve original paramater list from paramater list syntax nodes | |
IEnumerable <SyntaxNode> parameters = originalParameterListSyntax.ChildNodes(); | |
//Retrieve only paramaters with identifier name child nodes from original paramater list | |
IEnumerable <SyntaxNode> parametersWithIdentifierNames = parameters.Where(p => p.ChildNodes().Any(q => q is IdentifierNameSyntax)); | |
SyntaxNode internalUserSyntaxNode = null; | |
//Iterate over parameter list | |
foreach (SyntaxNode syntaxNode in parametersWithIdentifierNames) | |
{ | |
//Grab identifier token text from identifier name | |
string identifierTokenText = syntaxNode.ChildNodes().First().GetFirstToken().Text; | |
//Set as IInternalUserSyntax if matching | |
if (identifierTokenText == "IInternalUser") | |
internalUserSyntaxNode = syntaxNode; | |
} | |
if (internalUserSyntaxNode != null) | |
{ | |
//Create new paramater list | |
SeparatedSyntaxList<ParameterSyntax> newParamList = new SeparatedSyntaxList<ParameterSyntax>(); | |
//Add IInternalUser parameter first | |
newParamList = newParamList.Add((ParameterSyntax)internalUserSyntaxNode); | |
//Iterate over old list of parameters | |
foreach (SyntaxNode parameter in parameters) | |
{ | |
//Add to new list if not IInternalUser Parameter | |
if (!parameter.GetText().ToString().Contains("IInternalUser")) | |
newParamList = newParamList.Add((ParameterSyntax)parameter); | |
} | |
//Replace the parameter list in the method declaration | |
ParameterListSyntax newParameterListSyntax = originalParameterListSyntax.WithParameters(newParamList); | |
//Replace the old paramater list declaration with the new paramater list declaration | |
SyntaxNode oldRoot = await document.GetSyntaxRootAsync(cancellationToken); | |
SyntaxNode newRoot = oldRoot.ReplaceNode(originalParameterListSyntax, newParameterListSyntax); | |
//Returned document with transformed tree | |
newDocument = document.WithSyntaxRoot(newRoot); | |
} | |
//Return new document | |
return newDocument; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment