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