public override void VisitConstructorDeclaration(ConstructorDeclarationSyntax node) { var isPartial = node.ChildTokens().Any(x => x.Kind() == SyntaxKind.PartialKeyword); var defineName = node.ChildTokens().FirstOrDefault(x => x.Kind() == SyntaxKind.IdentifierToken).ToString(); var methodArguments = new List <MethodArgument>(); if (node.ChildNodes().OfType <ParameterListSyntax>().FirstOrDefault().ChildNodes().Any()) { var listNode = node.ChildNodes().OfType <ParameterListSyntax>().FirstOrDefault(); methodArguments = GetMethodArguments(listNode); } var startLength = node.Span.Start; var endLength = node.Span.End; var parentNamespace = GetNamespace(DefineKinds.Constructor, startLength, endLength); UserDefinitions.Add(new UserDefinition { DefineKinds = DefineKinds.Constructor, IsPartial = isPartial, Namespace = parentNamespace, DefineName = defineName, DefineFullName = $"{parentNamespace}.{defineName}", MethodArguments = methodArguments, SourceFile = SourceFile, StartLength = startLength, EndLength = endLength, }); base.VisitConstructorDeclaration(node); }
/// <summary> /// Réordonne les assignations d'un constructeur. /// </summary> /// <param name="document">Le document.</param> /// <param name="constructeur">Le constructeur.</param> /// <param name="jetonAnnulation">Le jeton d'annulation.</param> /// <returns>Le nouveau document.</returns> private async Task <Document> OrdonnerAssignations(Document document, ConstructorDeclarationSyntax constructeur, CancellationToken jetonAnnulation) { // On récupère la racine et le modèle sémantique. var racine = await document .GetSyntaxRootAsync(jetonAnnulation) .ConfigureAwait(false); var modèleSémantique = await document.GetSemanticModelAsync(jetonAnnulation); // On récupère le corps du constructeur. var corps = constructeur.ChildNodes().First(nœud => nœud as BlockSyntax != null) as BlockSyntax; // On récupère toutes les conditions sur les paramètres. var conditions = ConstructorOrdering.TrouveConditionsParametres(corps.Statements, constructeur.ParameterList, modèleSémantique); // On récupère les assignations et on les ordonne. var assignations = ConstructorOrdering.TrouverAssignations(corps.Statements, modèleSémantique) .OrderBy(e => e.ToString()); // On construit le nouveau corps du constructeur. var corpsOrdonné = corps.WithStatements( SyntaxFactory.List( conditions .Concat(assignations) .Concat(corps.Statements .Except(conditions) .Except(assignations)))); // Et on met à jour la racine. var nouvelleRacine = racine.ReplaceNode(corps, corpsOrdonné); return(document.WithSyntaxRoot(nouvelleRacine)); }