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; }