Exemple #1
0
 public override SyntaxNode VisitMethodBlock(MethodBlockSyntax node)
 {
     if (node.SubOrFunctionStatement.Identifier.ToString() == "_Execute")
     {
         var statements = m_userCode.GetRoot().ChildNodes();//.OfType<StatementSyntax>();
         SyntaxList <SyntaxNode> syntaxList = new SyntaxList <SyntaxNode>(statements);
         return(base.VisitMethodBlock(node.WithStatements(syntaxList)));
     }
     else
     {
         return(base.VisitMethodBlock(node));
     }
 }
        public override SyntaxNode VisitMethodBlock(MethodBlockSyntax node)
        {
            for (int a = 0; a < node.Statements.Count; a++)
            {
                if (node.Statements[a].IsKind(SyntaxKind.LocalDeclarationStatement))
                {
                    var initInvocations = new SyntaxList <StatementSyntax>();

                    foreach (var d in (node.Statements[a] as LocalDeclarationStatementSyntax).Declarators)
                    {
                        if (StructuresWithInitializer.Contains(
                                d?.AsClause?.Type().WithoutTrivia().ToString()))
                        {
                            foreach (var name in d.Names)
                            {
                                if (name.ArrayBounds != null)
                                {
                                    initInvocations = initInvocations.Add(CreateInitializer(name.Identifier.ToFullString().Trim(), d.AsClause.Type().WithoutTrivia().ToString(), true));
                                }
                                else
                                {
                                    initInvocations = initInvocations.Add(CreateInitializer(name.Identifier.ToFullString().Trim(), d.AsClause.Type().WithoutTrivia().ToString(), false));
                                }
                            }
                        }
                    }

                    foreach (var i in initInvocations)
                    {
                        node = node.WithStatements(node.Statements.Insert(a + 1, i.WithTrailingTrivia(SyntaxFactory.SyntaxTrivia(SyntaxKind.EndOfLineTrivia, Environment.NewLine))));
                    }
                }
            }

            return(base.VisitMethodBlock(node));
        }