private void VirtualizeAtClassInstanceLevel(List <Tuple <MethodDeclarationSyntax, List <string>, int> > instanceClassLevelVirtualizedMethods, ref MemberDeclarationSyntax[] members)
        {
            if (_virtualizationContext.RefactoringOn)
            {
                return;
            }
            //call reset _virtualizationContext before each method so that the code[] and data[] do not overlap
            _virtualizationContext.Operations.Clear();
            _virtualizationContext.SetInstanceLevelVirtualization();
            if (instanceClassLevelVirtualizedMethods.Count() == 0)
            {
                return;
            }
            var methodVirtualiztionVisitor = new MethodVirtualizationVisitor(_virtualizationContext);

            foreach (var method in instanceClassLevelVirtualizedMethods)
            {
                _virtualizationContext.Reset();
                _virtualizationContext.Options = method.Item2;
                //VIRTUALIZATION
                var virtualizedMethod = (MethodDeclarationSyntax)methodVirtualiztionVisitor.Visit(method.Item1);
                members[method.Item3] = virtualizedMethod;
            }
            var membersExtended = members.ToList();

            List <StatementSyntax> statements = VirtualizationInterpreter(SyntaxFactory.Space, _virtualizationContext);
            BlockSyntax            block      = SyntaxFactory.Block(statements);
            var instanceClassInterpreter      = SyntaxFactoryExtensions.MethodDeclarationSyntax(_virtualizationContext.InterpreterIdentifier(), block).NormalizeWhitespace().WithLeadingTrivia(SyntaxFactory.EndOfLine(Environment.NewLine)).WithTrailingTrivia(SyntaxFactory.EndOfLine(Environment.NewLine));

            membersExtended.Add(instanceClassInterpreter);

            members = membersExtended.ToArray();
        }
        private void VirtualizeAtMethodLevel(List <Tuple <MethodDeclarationSyntax, List <string>, int> > methodLevelVirtualizedMethods, ref MemberDeclarationSyntax[] members)
        {
            if (_virtualizationContext.RefactoringOn)
            {
                return;
            }
            _virtualizationContext.SetMethodLevelVirtualization();

            List <MethodDeclarationSyntax> virtualizedMethodLevel = new List <MethodDeclarationSyntax>();

            if (methodLevelVirtualizedMethods.Count() == 0)
            {
                return;
            }
            var methodVirtualiztionVisitor = new MethodVirtualizationVisitor(_virtualizationContext);

            foreach (var method in methodLevelVirtualizedMethods)
            {
                //call reset _virtualizationContext before each method so that the code[] and data[] do not overlap
                _virtualizationContext.Reset();
                _virtualizationContext.Options = method.Item2;
                //VIRTUALIZATION
                var virtualizedMethod = (MethodDeclarationSyntax)methodVirtualiztionVisitor.Visit(method.Item1);
                members[method.Item3] = virtualizedMethod; //replace method
                virtualizedMethodLevel.Add(virtualizedMethod);
            }
        }