Example #1
0
        private Constructor TraverseConstructor(ConstructorBlockSyntax css)
        {
            Constructor retConstructor = new Constructor();

            retConstructor.Name = "New";

            /*
            Preprocessors = new List<Preprocessor>();
            Encapsulation = new List<Encapsulation>();
            Base = new List<InvokedMethod>();
            ReturnType = new Type();
            Qualifiers = new List<Qualifiers>();
            Parameters = new List<Variables>();
            Decisions = new Decisions();
            AccessedVariables = new List<Variables>();
            LabelStatements = new List<LabelStatement>();
            GoToStatements = new List<GoTo>();
            InvokedMethods = new List<InvokedMethod>();
             */

            //Encapsulation
            //TODO: Not sure if Begin is the right thing here...
            foreach (SyntaxToken st in css.Begin.Modifiers)
            {
                string modifier = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(st.ValueText);
                Encapsulation encap;
                Qualifiers qual;
                if (System.Enum.TryParse<Encapsulation>(modifier, out encap))
                {
                    retConstructor.Encapsulation.Add(encap);
                }
                else if (System.Enum.TryParse<Qualifiers>(modifier, out qual))
                {
                    retConstructor.Qualifiers.Add(qual);
                }
            }

            //TODO: Need to determine what the qualifers are

            //TODO: Qualifiers

            //TODO: Not Sure About This!
            ParameterListSyntax pls = css.Begin.ParameterList;

            //Parameters
            foreach (ParameterSyntax ps in pls.Parameters)
            {
                retConstructor.Parameters.Add(TraverseParameters(ps));
            }

            //Decisions
            List<MultiLineIfBlockSyntax> multiIfStms = new List<MultiLineIfBlockSyntax>();
            List<SingleLineIfStatementSyntax> ifStms = new List<SingleLineIfStatementSyntax>();
            List<ElseStatementSyntax> elseStm = new List<ElseStatementSyntax>();
            List<ForEachStatementSyntax> foreachStm = new List<ForEachStatementSyntax>();
            List<ForBlockSyntax> forStm = new List<ForBlockSyntax>();
            List<DoLoopBlockSyntax> doWhileStm = new List<DoLoopBlockSyntax>();
            List<WhileBlockSyntax> whileStm = new List<WhileBlockSyntax>();
            List<SelectBlockSyntax> switchStm = new List<SelectBlockSyntax>();
            List<CatchPartSyntax> catchStmm = new List<CatchPartSyntax>();
            //Access Variables
            List<LocalDeclarationStatementSyntax> accessVarDefs = new List<LocalDeclarationStatementSyntax>();
            List<AssignmentStatementSyntax> accessVars = new List<AssignmentStatementSyntax>();
            //Label Statements
            List<LabelStatementSyntax> labelStms = new List<LabelStatementSyntax>();
            //GoTo Statements
            List<GoToStatementSyntax> gotoStms = new List<GoToStatementSyntax>();
            //InvokedMethods
            List<CallStatementSyntax> invokedMethods = new List<CallStatementSyntax>();
            List<InvocationExpressionSyntax> invokedMethods2 = new List<InvocationExpressionSyntax>();
            //Returns
            List<ReturnStatementSyntax> returns = new List<ReturnStatementSyntax>();

            //MethodBlockSyntax mbs = css.Parent as MethodBlockSyntax;

            foreach (SyntaxNode sn in css.Statements)
            {
                if (sn is MultiLineIfBlockSyntax)
                {
                    multiIfStms.Add(sn as MultiLineIfBlockSyntax);
                }
                if (sn is SingleLineIfStatementSyntax)
                {
                    ifStms.Add(sn as SingleLineIfStatementSyntax);
                }
                else if (sn is ElseStatementSyntax)
                {
                    elseStm.Add(sn as ElseStatementSyntax);
                }
                else if (sn is ForEachStatementSyntax)
                {
                    foreachStm.Add(sn as ForEachStatementSyntax);
                }
                else if (sn is ForBlockSyntax)
                {
                    forStm.Add(sn as ForBlockSyntax);
                }
                else if (sn is DoLoopBlockSyntax)
                {
                    doWhileStm.Add(sn as DoLoopBlockSyntax);
                }
                else if (sn is WhileBlockSyntax)
                {
                    whileStm.Add(sn as WhileBlockSyntax);
                }
                else if (sn is SelectBlockSyntax)
                {
                    switchStm.Add(sn as SelectBlockSyntax);
                }
                else if (sn is CatchPartSyntax)
                {
                    catchStmm.Add(sn as CatchPartSyntax);
                }
                else if (sn is LocalDeclarationStatementSyntax)
                {
                    accessVarDefs.Add(sn as LocalDeclarationStatementSyntax);
                }
                else if (sn is AssignmentStatementSyntax)
                {
                    accessVars.Add(sn as AssignmentStatementSyntax);
                }
                else if (sn is LabelStatementSyntax)
                {
                    labelStms.Add(sn as LabelStatementSyntax);
                }
                else if (sn is LabelStatementSyntax)
                {
                    gotoStms.Add(sn as GoToStatementSyntax);
                }
                else if (sn is GoToStatementSyntax)
                {
                    gotoStms.Add(sn as GoToStatementSyntax);
                }
                else if (sn is CallStatementSyntax)
                {
                    invokedMethods.Add(sn as CallStatementSyntax);
                }
                else if (sn is InvocationExpressionSyntax)
                {
                    invokedMethods2.Add(sn as InvocationExpressionSyntax);
                }
                else if (sn is ReturnStatementSyntax)
                {
                    returns.Add(sn as ReturnStatementSyntax);
                }
            }

            foreach (MultiLineIfBlockSyntax mlbs in multiIfStms)
            {
                int exitPoints = retConstructor.ExitPoints;
                Decisions tempDecision = TraverseMultiIfStatement(mlbs, ref exitPoints);

                retConstructor.Decisions.IfStatements.AddRange(tempDecision.IfStatements);
                retConstructor.Decisions.ElseStatements.AddRange(tempDecision.ElseStatements);
                retConstructor.Decisions.ForEachStatements.AddRange(tempDecision.ForEachStatements);
                retConstructor.Decisions.ForStatements.AddRange(tempDecision.ForStatements);
                retConstructor.Decisions.WhileLoops.AddRange(tempDecision.WhileLoops);
                retConstructor.Decisions.DoWhileLoops.AddRange(tempDecision.DoWhileLoops);
                retConstructor.Decisions.Catches.AddRange(tempDecision.Catches);
                retConstructor.Decisions.SwitchStatements.AddRange(tempDecision.SwitchStatements);
                retConstructor.ExitPoints = exitPoints;
            }

            foreach (SingleLineIfStatementSyntax iss in ifStms)
            {
                int exitPoints = retConstructor.ExitPoints;
                Decisions tempDecision = TraverseIfStatement(iss, ref exitPoints);
                retConstructor.Decisions.IfStatements.AddRange(tempDecision.IfStatements);
                retConstructor.Decisions.ElseStatements.AddRange(tempDecision.ElseStatements);
                retConstructor.Decisions.ForEachStatements.AddRange(tempDecision.ForEachStatements);
                retConstructor.Decisions.ForStatements.AddRange(tempDecision.ForStatements);
                retConstructor.Decisions.WhileLoops.AddRange(tempDecision.WhileLoops);
                retConstructor.Decisions.DoWhileLoops.AddRange(tempDecision.DoWhileLoops);
                retConstructor.Decisions.Catches.AddRange(tempDecision.Catches);
                retConstructor.Decisions.SwitchStatements.AddRange(tempDecision.SwitchStatements);
                retConstructor.ExitPoints = exitPoints;
            }
            foreach (ElseStatementSyntax ess in elseStm)
            {
                int exitPoints = retConstructor.ExitPoints;
                retConstructor.Decisions.ElseStatements.Add(TravsereElseStatement(ess, ref exitPoints));
                retConstructor.ExitPoints = exitPoints;
            }
            foreach (ForEachStatementSyntax fess in foreachStm)
            {
                int exitPoints = retConstructor.ExitPoints;
                retConstructor.Decisions.ForEachStatements.Add(TraverseForeachStatement(fess, ref exitPoints));
                retConstructor.ExitPoints = exitPoints;
            }
            foreach (ForBlockSyntax fss in forStm)
            {
                int exitPoints = retConstructor.ExitPoints;
                Decisions tempDecision = TraverseForStatement(fss, ref exitPoints);
                retConstructor.Decisions.IfStatements.AddRange(tempDecision.IfStatements);
                retConstructor.Decisions.ElseStatements.AddRange(tempDecision.ElseStatements);
                retConstructor.Decisions.ForEachStatements.AddRange(tempDecision.ForEachStatements);
                retConstructor.Decisions.ForStatements.AddRange(tempDecision.ForStatements);
                retConstructor.Decisions.WhileLoops.AddRange(tempDecision.WhileLoops);
                retConstructor.Decisions.DoWhileLoops.AddRange(tempDecision.DoWhileLoops);
                retConstructor.Decisions.Catches.AddRange(tempDecision.Catches);
                retConstructor.Decisions.SwitchStatements.AddRange(tempDecision.SwitchStatements);
                retConstructor.ExitPoints = exitPoints;
            }
            foreach (DoLoopBlockSyntax dss in doWhileStm)
            {
                int exitPoints = retConstructor.ExitPoints;
                retConstructor.Decisions.DoWhileLoops.Add(TraverseDoWhileLoop(dss, ref exitPoints));
                retConstructor.ExitPoints = exitPoints;
            }
            foreach (WhileBlockSyntax wbs in whileStm)
            {
                int exitPoints = retConstructor.ExitPoints;
                retConstructor.Decisions.WhileLoops.Add(TraverseWhileLoop(wbs, ref exitPoints));
                retConstructor.ExitPoints = exitPoints;
            }
            foreach (SelectBlockSyntax sbs in switchStm)
            {
                int exitPoints = retConstructor.ExitPoints;
                retConstructor.Decisions.SwitchStatements.Add(TraverseSwitchStatement(sbs, ref exitPoints));
                retConstructor.ExitPoints = exitPoints;
            }
            foreach (CatchPartSyntax cps in catchStmm)
            {
                int exitPoints = retConstructor.ExitPoints;
                retConstructor.Decisions.Catches.Add(TraverseCatchStatement(cps, ref exitPoints));
                retConstructor.ExitPoints = exitPoints;
            }

            foreach (LocalDeclarationStatementSyntax vds in accessVarDefs)
            {
                Method tempMethod = TraverseVarDecls(vds);
                retConstructor.AccessedVariables.AddRange(tempMethod.AccessedVariables);
                retConstructor.InvokedMethods.AddRange(tempMethod.InvokedMethods);
            }

            foreach (AssignmentStatementSyntax vns in accessVars)
            {
                Method tempMethod = TraverseAccessVars(vns);

                retConstructor.AccessedVariables.AddRange(tempMethod.AccessedVariables);
                retConstructor.InvokedMethods.AddRange(tempMethod.InvokedMethods);
            }

            foreach (LabelStatementSyntax lss in labelStms)
            {
                retConstructor.LabelStatements.Add(TraverseLabel(lss));
            }

            foreach (GoToStatementSyntax gtss in gotoStms)
            {
                retConstructor.GoToStatements.Add(TraverseGoTo(retConstructor.LabelStatements, gtss));
            }

            foreach (CallStatementSyntax mss in invokedMethods)
            {
                retConstructor.InvokedMethods.Add(TraverseInvokedMethod(mss));
            }

            foreach (InvocationExpressionSyntax ies in invokedMethods2)
            {
                retConstructor.InvokedMethods.Add(TraverseInvokedMethod(ies));
            }

            return retConstructor;
        }
        private Constructor TransverseConstructors(ConstructorDeclarationSyntax cds)
        {
            Constructor retConstructor = new Constructor();
            //public int DecisionsCount { get; }
            //public int ExitPoints { get; set; }
            //public bool IsFriend { get; }
            //public bool IsPolymophic { get; }
            //public bool IsPublic { get; }
            //public bool IsStatic { get; }
            //public List<Preprocessor> Preprocessors { get; set; }
            retConstructor.Name = cds.Identifier.ValueText;

            if (cds.HasLeadingTrivia)
            {
                SetOuterComments(retConstructor, cds.GetLeadingTrivia().ToFullString());
            }

            if (cds.HasTrailingTrivia)
            {
                SetInnerComments(retConstructor, cds.GetTrailingTrivia().ToFullString());
            }

            foreach (SyntaxToken st in cds.Modifiers)
            {
                string modifier = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(st.ValueText);
                Encapsulation encap;
                Qualifiers qual;
                if (System.Enum.TryParse<Encapsulation>(modifier, out encap))
                {
                    retConstructor.Encapsulation.Add(encap);
                }
                else if (System.Enum.TryParse<Qualifiers>(modifier, out qual))
                {
                    retConstructor.Qualifiers.Add(qual);
                }
            }

            //TypeSyntax ts = cds.ReturnType;
            //Model.Type retType = new Model.Type();
            //retType.Name = ts.ToString();
            //retType.IsKnownType = ts.Kind.IsKeywordKind();
            //retType.IsNotUserDefined = ts.Kind.IsKeywordKind();
            //TODO
            //rettype.generictype
            //retConstructor.ReturnType = retType;

            ParameterListSyntax pls = cds.ParameterList;
            foreach (ParameterSyntax ps in pls.Parameters)
            {
                retConstructor.Parameters.Add(TraverseParamaters(ps));
            }
            BlockSyntax bs = cds.Body;
            var labelStatements = from aLabelStatement in bs.ChildNodes().OfType<LabeledStatementSyntax>() select aLabelStatement;
            foreach (LabeledStatementSyntax lss in labelStatements)
            {
                retConstructor.LabelStatements.Add(TraverseLabelStatements(lss));
            }

            var goToStatements = from aGoToStatement in bs.ChildNodes().OfType<GotoStatementSyntax>() select aGoToStatement;
            foreach (GotoStatementSyntax gtss in goToStatements)
            {
                GoTo gt = TraverseGoToStatements(gtss);
                retConstructor.GoToStatements.Add(gt);
            }

            //Preprocessors = new List<Preprocessor>();
            //Base = new List<InvokedMethod>();
            //Decisions = new Decisions();

            var accessVarsDecl = from aAccessVarsDecl in bs.ChildNodes().OfType<LocalDeclarationStatementSyntax>() select aAccessVarsDecl;
            foreach (LocalDeclarationStatementSyntax ldss in accessVarsDecl)
            {
                Method tempMethod = TransverseAccessVars(ldss);
                retConstructor.AccessedVariables.AddRange(tempMethod.AccessedVariables);
                retConstructor.InvokedMethods.AddRange(tempMethod.InvokedMethods);
            }

            var ifStatements = from aIfStatement in bs.ChildNodes().OfType<IfStatementSyntax>() select aIfStatement;
            foreach (IfStatementSyntax iss in ifStatements)
            {
                int exitPoints = retConstructor.ExitPoints;
                Decisions tempDecision = TraverseIfStatements(iss, ref exitPoints);
                retConstructor.Decisions.IfStatements.AddRange(tempDecision.IfStatements);
                retConstructor.Decisions.ElseStatements.AddRange(tempDecision.ElseStatements);
                retConstructor.Decisions.ForEachStatements.AddRange(tempDecision.ForEachStatements);
                retConstructor.Decisions.ForStatements.AddRange(tempDecision.ForStatements);
                retConstructor.Decisions.WhileLoops.AddRange(tempDecision.WhileLoops);
                retConstructor.Decisions.DoWhileLoops.AddRange(tempDecision.DoWhileLoops);
                retConstructor.Decisions.Catches.AddRange(tempDecision.Catches);
                retConstructor.Decisions.SwitchStatements.AddRange(tempDecision.SwitchStatements);
                retConstructor.ExitPoints = exitPoints;
            }
            var elseStatements = from aElseStatements in bs.ChildNodes().OfType<ElseClauseSyntax>() select aElseStatements;
            foreach (ElseClauseSyntax ecs in elseStatements)
            {
                int exitPoints = retConstructor.ExitPoints;
                Decisions tempDecision = TraverseElseClauses(ecs, ref exitPoints);
                retConstructor.Decisions.IfStatements.AddRange(tempDecision.IfStatements);
                retConstructor.Decisions.ElseStatements.AddRange(tempDecision.ElseStatements);
                retConstructor.Decisions.ForEachStatements.AddRange(tempDecision.ForEachStatements);
                retConstructor.Decisions.ForStatements.AddRange(tempDecision.ForStatements);
                retConstructor.Decisions.WhileLoops.AddRange(tempDecision.WhileLoops);
                retConstructor.Decisions.DoWhileLoops.AddRange(tempDecision.DoWhileLoops);
                retConstructor.Decisions.Catches.AddRange(tempDecision.Catches);
                retConstructor.Decisions.SwitchStatements.AddRange(tempDecision.SwitchStatements);
                retConstructor.ExitPoints = exitPoints;
            }
            var whileLoops = from aWhileLoop in bs.ChildNodes().OfType<WhileStatementSyntax>() select aWhileLoop;
            foreach (WhileStatementSyntax wss in whileLoops)
            {
                int exitPoints = retConstructor.ExitPoints;
                Decisions tempDecision = TraverseWhileLoops(wss, ref exitPoints);
                retConstructor.Decisions.IfStatements.AddRange(tempDecision.IfStatements);
                retConstructor.Decisions.ElseStatements.AddRange(tempDecision.ElseStatements);
                retConstructor.Decisions.ForEachStatements.AddRange(tempDecision.ForEachStatements);
                retConstructor.Decisions.ForStatements.AddRange(tempDecision.ForStatements);
                retConstructor.Decisions.WhileLoops.AddRange(tempDecision.WhileLoops);
                retConstructor.Decisions.DoWhileLoops.AddRange(tempDecision.DoWhileLoops);
                retConstructor.Decisions.Catches.AddRange(tempDecision.Catches);
                retConstructor.Decisions.SwitchStatements.AddRange(tempDecision.SwitchStatements);
                retConstructor.ExitPoints = exitPoints;
            }
            var doWhileLoops = from aDoWhileLoop in bs.ChildNodes().OfType<DoStatementSyntax>() select aDoWhileLoop;
            foreach (DoStatementSyntax dss in doWhileLoops)
            {
                int exitPoints = retConstructor.ExitPoints;
                Decisions tempDecision = TraverseDoStatements(dss, ref exitPoints);
                retConstructor.Decisions.IfStatements.AddRange(tempDecision.IfStatements);
                retConstructor.Decisions.ElseStatements.AddRange(tempDecision.ElseStatements);
                retConstructor.Decisions.ForEachStatements.AddRange(tempDecision.ForEachStatements);
                retConstructor.Decisions.ForStatements.AddRange(tempDecision.ForStatements);
                retConstructor.Decisions.WhileLoops.AddRange(tempDecision.WhileLoops);
                retConstructor.Decisions.DoWhileLoops.AddRange(tempDecision.DoWhileLoops);
                retConstructor.Decisions.Catches.AddRange(tempDecision.Catches);
                retConstructor.Decisions.SwitchStatements.AddRange(tempDecision.SwitchStatements);
                retConstructor.ExitPoints = exitPoints;
            }
            var forLoops = from aForLoop in bs.ChildNodes().OfType<ForStatementSyntax>() select aForLoop;
            foreach (ForStatementSyntax fss in forLoops)
            {
                int exitPoints = retConstructor.ExitPoints;
                Decisions tempDecision = TraverseForStatements(fss, ref exitPoints);
                retConstructor.Decisions.IfStatements.AddRange(tempDecision.IfStatements);
                retConstructor.Decisions.ElseStatements.AddRange(tempDecision.ElseStatements);
                retConstructor.Decisions.ForEachStatements.AddRange(tempDecision.ForEachStatements);
                retConstructor.Decisions.ForStatements.AddRange(tempDecision.ForStatements);
                retConstructor.Decisions.WhileLoops.AddRange(tempDecision.WhileLoops);
                retConstructor.Decisions.DoWhileLoops.AddRange(tempDecision.DoWhileLoops);
                retConstructor.Decisions.Catches.AddRange(tempDecision.Catches);
                retConstructor.Decisions.SwitchStatements.AddRange(tempDecision.SwitchStatements);
                retConstructor.ExitPoints = exitPoints;
            }
            var foreachLoops = from aForeachLoop in bs.ChildNodes().OfType<ForEachStatementSyntax>() select aForeachLoop;
            foreach(ForEachStatementSyntax fess in foreachLoops)
            {
                int exitPoints = retConstructor.ExitPoints;
                Decisions tempDecision = TraverseForEachStatements(fess, ref exitPoints);
                retConstructor.Decisions.IfStatements.AddRange(tempDecision.IfStatements);
                retConstructor.Decisions.ElseStatements.AddRange(tempDecision.ElseStatements);
                retConstructor.Decisions.ForEachStatements.AddRange(tempDecision.ForEachStatements);
                retConstructor.Decisions.ForStatements.AddRange(tempDecision.ForStatements);
                retConstructor.Decisions.WhileLoops.AddRange(tempDecision.WhileLoops);
                retConstructor.Decisions.DoWhileLoops.AddRange(tempDecision.DoWhileLoops);
                retConstructor.Decisions.Catches.AddRange(tempDecision.Catches);
                retConstructor.Decisions.SwitchStatements.AddRange(tempDecision.SwitchStatements);
                retConstructor.ExitPoints = exitPoints;
            }
            var switches = from aSwitch in bs.ChildNodes().OfType<SwitchStatementSyntax>() select aSwitch;
            foreach (SwitchStatementSyntax sss in switches)
            {
                int exitPoints = retConstructor.ExitPoints;
                Decisions tempDecision = TraverseSwitchStatements(sss, ref exitPoints);
                retConstructor.Decisions.IfStatements.AddRange(tempDecision.IfStatements);
                retConstructor.Decisions.ElseStatements.AddRange(tempDecision.ElseStatements);
                retConstructor.Decisions.ForEachStatements.AddRange(tempDecision.ForEachStatements);
                retConstructor.Decisions.ForStatements.AddRange(tempDecision.ForStatements);
                retConstructor.Decisions.WhileLoops.AddRange(tempDecision.WhileLoops);
                retConstructor.Decisions.DoWhileLoops.AddRange(tempDecision.DoWhileLoops);
                retConstructor.Decisions.Catches.AddRange(tempDecision.Catches);
                retConstructor.Decisions.SwitchStatements.AddRange(tempDecision.SwitchStatements);
                retConstructor.ExitPoints = exitPoints;
            }
            var catches = from aCatch in bs.ChildNodes().OfType<CatchClauseSyntax>() select aCatch;
            foreach (CatchClauseSyntax ccs in catches)
            {
                int exitPoints = retConstructor.ExitPoints;
                Decisions tempDecision = TraverseCatchClauses(ccs, ref exitPoints);
                retConstructor.Decisions.IfStatements.AddRange(tempDecision.IfStatements);
                retConstructor.Decisions.ElseStatements.AddRange(tempDecision.ElseStatements);
                retConstructor.Decisions.ForEachStatements.AddRange(tempDecision.ForEachStatements);
                retConstructor.Decisions.ForStatements.AddRange(tempDecision.ForStatements);
                retConstructor.Decisions.WhileLoops.AddRange(tempDecision.WhileLoops);
                retConstructor.Decisions.DoWhileLoops.AddRange(tempDecision.DoWhileLoops);
                retConstructor.Decisions.Catches.AddRange(tempDecision.Catches);
                retConstructor.Decisions.SwitchStatements.AddRange(tempDecision.SwitchStatements);
                retConstructor.ExitPoints = exitPoints;
            }
            var breaks = from aBreak in bs.ChildNodes().OfType<BreakStatementSyntax>() select aBreak;
            foreach(BreakStatementSyntax bss in breaks)
            {
                //TODO get breaks
                //note that breaks are NOT in retMethod.Decisions
            }
            var checks = from aCheck in bs.ChildNodes().OfType<CheckedStatementSyntax>() select aCheck;
            foreach(CheckedStatementSyntax css in checks)
            {
                //TODO get checks
                //note that checks are NOT in retMethod.Decisions
            }
            var continues = from aContinue in bs.ChildNodes().OfType<ContinueStatementSyntax>() select aContinue;
            foreach(ContinueStatementSyntax css in continues)
            {
                //TODO get continues
                //note that continues are NOT in retMethod.Decisions
            }
            var emptys = from aEmpty in bs.ChildNodes().OfType<EmptyStatementSyntax>() select aEmpty;
            foreach(EmptyStatementSyntax ess in emptys)
            {
                //TODO get emptys
                //note that emptys are NOT in retMethod.Decisions
            }
            var exprs = from aExpr in bs.ChildNodes().OfType<ExpressionStatementSyntax>() select aExpr;
            foreach(ExpressionStatementSyntax ess in exprs)
            {
                //TODO get expressions
                //note that expressions are NOT in retMethod.Decisions
            }
            var fixeds = from aFixed in bs.ChildNodes().OfType<FixedStatementSyntax>() select aFixed;
            foreach(FixedStatementSyntax fss in fixeds)
            {
                //TODO get fixed
                //note that these are NOT in retMethod.Decisions
            }
            var locks = from aLock in bs.ChildNodes().OfType<LockStatementSyntax>() select aLock;
            foreach(LockStatementSyntax lss in locks)
            {
                //TODO get lock
                //note that these are NOT in retMethod.Decisions
            }
            var returns = from aReturn in bs.ChildNodes().OfType<ReturnStatementSyntax>() select aReturn;
            foreach(ReturnStatementSyntax rss in returns)
            {
                //TODO get returns
                //note that these are NOT in retMethod.Decisions
            }
            var throws = from aThrow in bs.ChildNodes().OfType<ThrowStatementSyntax>() select aThrow;
            foreach(ThrowStatementSyntax tss in throws)
            {
                //TODO get throws
                //note that these are NOT in retMethod.Decisions
            }
            var trys = from aTry in bs.ChildNodes().OfType<TryStatementSyntax>() select aTry;
            foreach(TryStatementSyntax tss in trys)
            {
                //TODO get trys
                //note that these are NOT in retMethod.Decisions
            }
            var unsafes = from aUnsafe in bs.ChildNodes().OfType<UnsafeStatementSyntax>() select aUnsafe;
            foreach(UnsafeStatementSyntax uss in unsafes)
            {
                //TODO get unsafes
                //note that these are NOT in retMethod.Decisions
            }
            var usings = from aUsing in bs.ChildNodes().OfType<UsingStatementSyntax>() select aUsing;
            foreach(UsingStatementSyntax uss in usings)
            {
                //TODO get usings
                //note that these are NOT in retMethod.Decisions
            }
            var yields = from aYield in bs.ChildNodes().OfType<YieldStatementSyntax>() select aYield;
            foreach(YieldStatementSyntax yss in yields)
            {
                //TODO get yields
                //note that these are NOT in retMethod.Decisions
            }
            var invokedMethods = from aInvokedMethod in bs.ChildNodes().OfType<InvocationExpressionSyntax>() select aInvokedMethod;
            foreach(InvocationExpressionSyntax ies in invokedMethods)
            {
                Method tempMethod = TraverseInvocationExpression(ies);
                retConstructor.InvokedMethods.AddRange(tempMethod.InvokedMethods);
                retConstructor.AccessedVariables.AddRange(tempMethod.AccessedVariables);
            }

            //InvokedMethods = new List<InvokedMethod>();
            return retConstructor;
        }