Пример #1
0
        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);
        }
Пример #2
0
        public CSharpSyntaxNode Find(CSharpSyntaxNode root)
        {
            foreach (var fieldDeclaration in (ClassNodeFinder.Find(root) as ClassDeclarationSyntax).Members.OfType <FieldDeclarationSyntax>())
            {
                foreach (var variableDeclaration in fieldDeclaration.Declaration.Variables)
                {
                    if (variableDeclaration.Identifier.Text == Name)
                    {
                        return(variableDeclaration);
                    }
                }
            }

            return(null);
        }
Пример #3
0
 public CSharpSyntaxNode Find(CSharpSyntaxNode root)
 {
     return((ClassNodeFinder.Find(root) as ClassDeclarationSyntax).Members
            .OfType <MethodDeclarationSyntax>()
            .FirstOrDefault(n => n.Identifier.Text == Name));
 }
Пример #4
0
 public MethodNodeFinder(ClassNodeFinder classNodeFinder, string name)
 {
     ClassNodeFinder = classNodeFinder;
     Name            = name;
 }
Пример #5
0
 public FieldNodeFinder(ClassNodeFinder classNodeFinder, string name)
 {
     ClassNodeFinder = classNodeFinder;
     Name            = name;
 }
 public PropertyNodeFinder(ClassNodeFinder classNodeFinder, string name)
 {
     ClassNodeFinder = classNodeFinder;
     Name            = name;
 }