public CSharpSyntaxNode Find(CSharpSyntaxNode root) { return((MethodNodeFinder.Find(root) as MethodDeclarationSyntax) .ParameterList .Parameters .FirstOrDefault(n => n.Identifier.Text == Name)); }
private static async Task <IEnumerable <ISyntaxNodeFinder> > GetItemsForTransform(Project project, Compilation compilation, Document doc) { var nodeFinders = new List <ISyntaxNodeFinder>(); var root = await doc.GetSyntaxRootAsync(); var model = compilation.GetSemanticModel(root.SyntaxTree); foreach (var classDeclaration in root.DescendantNodesAndSelf().OfType <ClassDeclarationSyntax>()) { var classNodeFinder = new ClassNodeFinder(classDeclaration.Identifier.Text); var publicMembers = classDeclaration.Members.Where(m => m.Modifiers.Any(mm => mm.Text == "public")); foreach (var member in publicMembers) { if (member is MethodDeclarationSyntax methodDelcaration) { var methodNodeFinder = new MethodNodeFinder(classNodeFinder, methodDelcaration.Identifier.Text); foreach (var parameter in methodDelcaration?.ParameterList?.Parameters) { if (ShouldBeTransformed(parameter.Identifier.Text)) { var parameterNodeFinder = new MethodParameterNodeFinder(methodNodeFinder, parameter.Identifier.Text); nodeFinders.Add(parameterNodeFinder); } } if (ShouldBeTransformed(methodDelcaration.Identifier.Text)) { nodeFinders.Add(methodNodeFinder); } } else if (member is PropertyDeclarationSyntax propertyDeclaration) { if (ShouldBeTransformed(propertyDeclaration.Identifier.Text)) { var propertyNodeFinder = new PropertyNodeFinder(classNodeFinder, propertyDeclaration.Identifier.Text); nodeFinders.Add(propertyNodeFinder); } } else if (member is FieldDeclarationSyntax fieldDeclaration) { foreach (var variableNode in fieldDeclaration.Declaration.Variables) { if (ShouldBeTransformed(variableNode.Identifier.Text)) { var fieldNodeFinder = new FieldNodeFinder(classNodeFinder, variableNode.Identifier.Text); nodeFinders.Add(fieldNodeFinder); } } } } } return(nodeFinders); }
public MethodParameterNodeFinder(MethodNodeFinder methodNodeFinder, string name) { MethodNodeFinder = methodNodeFinder; Name = name; }