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)));
        }
Beispiel #2
0
        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)));
        }