private SyntaxList <StatementSyntax> AddLocalVariables(VBasic.VisualBasicSyntaxNode node) { _additionalLocals.PushScope(); IEnumerable <SyntaxNode> csNodes = _wrappedVisitor.Visit(node); var additionalDeclarations = new List <StatementSyntax>(); if (_additionalLocals.Count() > 0) { var newNames = new Dictionary <string, string>(); csNodes = csNodes.Select(csNode => csNode.ReplaceNodes(csNode.GetAnnotatedNodes(AdditionalLocals.Annotation), (an, _) => { var id = (an as IdentifierNameSyntax).Identifier.ValueText; newNames[id] = NameGenerator.GetUniqueVariableNameInScope(_semanticModel, _generatedNames, node, _additionalLocals[id].Prefix); return(SyntaxFactory.IdentifierName(newNames[id])); })).ToList(); foreach (var additionalLocal in _additionalLocals) { var decl = CommonConversions.CreateVariableDeclarationAndAssignment(newNames[additionalLocal.Key], additionalLocal.Value.Initializer); additionalDeclarations.Add(SyntaxFactory.LocalDeclarationStatement(decl)); } } _additionalLocals.PopScope(); return(SyntaxFactory.List(additionalDeclarations.Concat(csNodes))); }
private async Task <SyntaxList <StatementSyntax> > AddLocalVariables(VBasic.VisualBasicSyntaxNode node) { _additionalLocals.PushScope(); IEnumerable <SyntaxNode> csNodes; List <StatementSyntax> additionalDeclarations; try { (csNodes, additionalDeclarations) = await CreateLocals(node); } finally { _additionalLocals.PopScope(); } return(SyntaxFactory.List(additionalDeclarations.Concat(csNodes))); }