Skip to content

Instantly share code, notes, and snippets.

@EIrwin
Created November 7, 2014 21:58
Show Gist options
  • Save EIrwin/dc03b6143c28e3d78f81 to your computer and use it in GitHub Desktop.
Save EIrwin/dc03b6143c28e3d78f81 to your computer and use it in GitHub Desktop.
FixInternalUserOrdinal Method Implementation
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