Exemplo n.º 1
0
 public MethodBodyVisitor(SemanticModel semanticModel, VBasic.VisualBasicSyntaxVisitor <CSharpSyntaxNode> nodesVisitor, Stack <string> withBlockTempVariableNames, TriviaConverter triviaConverter)
 {
     this._semanticModel = semanticModel;
     this._nodesVisitor  = nodesVisitor;
     this._withBlockTempVariableNames = withBlockTempVariableNames;
     CommentConvertingVisitor         = new CommentConvertingMethodBodyVisitor(this, triviaConverter);
 }
Exemplo n.º 2
0
 public ByRefParameterVisitor(VBasic.VisualBasicSyntaxVisitor <SyntaxList <StatementSyntax> > wrappedVisitor, AdditionalLocals additionalLocals,
                              SemanticModel semanticModel, HashSet <string> generatedNames)
 {
     _wrappedVisitor   = wrappedVisitor;
     _additionalLocals = additionalLocals;
     _semanticModel    = semanticModel;
     _generatedNames   = generatedNames;
 }
Exemplo n.º 3
0
 public PerScopeStateVisitorDecorator(VBasic.VisualBasicSyntaxVisitor <Task <SyntaxList <StatementSyntax> > > wrappedVisitor, PerScopeState additionalLocals,
                                      SemanticModel semanticModel, HashSet <string> generatedNames)
 {
     _wrappedVisitor   = wrappedVisitor;
     _additionalLocals = additionalLocals;
     _semanticModel    = semanticModel;
     _generatedNames   = generatedNames;
 }
Exemplo n.º 4
0
 public MethodBodyVisitor(VBasic.VisualBasicSyntaxNode methodNode, SemanticModel semanticModel,
                          VBasic.VisualBasicSyntaxVisitor <CSharpSyntaxNode> nodesVisitor,
                          Stack <string> withBlockTempVariableNames, HashSet <string> extraUsingDirectives,
                          TriviaConverter triviaConverter)
 {
     _methodNode         = methodNode;
     this._semanticModel = semanticModel;
     this._nodesVisitor  = nodesVisitor;
     this._withBlockTempVariableNames = withBlockTempVariableNames;
     _extraUsingDirectives            = extraUsingDirectives;
     CommentConvertingVisitor         = new CommentConvertingMethodBodyVisitor(this, triviaConverter);
     CommonConversions = new CommonConversions(semanticModel, _nodesVisitor);
 }
            public MethodBodyVisitor(VBasic.VisualBasicSyntaxNode methodNode, SemanticModel semanticModel,
                                     VBasic.VisualBasicSyntaxVisitor <CSharpSyntaxNode> nodesVisitor, CommonConversions commonConversions,
                                     Stack <string> withBlockTempVariableNames, HashSet <string> extraUsingDirectives,
                                     AdditionalLocals additionalLocals, TriviaConverter triviaConverter)
            {
                _methodNode                 = methodNode;
                _semanticModel              = semanticModel;
                _nodesVisitor               = nodesVisitor;
                CommonConversions           = commonConversions;
                _withBlockTempVariableNames = withBlockTempVariableNames;
                _extraUsingDirectives       = extraUsingDirectives;
                var byRefParameterVisitor = new ByRefParameterVisitor(this, additionalLocals, semanticModel, _generatedNames);

                CommentConvertingVisitor = new CommentConvertingMethodBodyVisitor(byRefParameterVisitor, triviaConverter);
            }
Exemplo n.º 6
0
            private static ExpressionSyntax IncreaseArrayUpperBoundExpression(VBSyntax.ExpressionSyntax expr, SemanticModel model, VBasic.VisualBasicSyntaxVisitor <CSharpSyntaxNode> commentConvertingNodesVisitor)
            {
                var constant = model.GetConstantValue(expr);

                if (constant.HasValue && constant.Value is int)
                {
                    return(SyntaxFactory.LiteralExpression(SyntaxKind.NumericLiteralExpression, SyntaxFactory.Literal((int)constant.Value + 1)));
                }

                return(SyntaxFactory.BinaryExpression(
                           SyntaxKind.SubtractExpression,
                           (ExpressionSyntax)expr.Accept(commentConvertingNodesVisitor), SyntaxFactory.Token(SyntaxKind.PlusToken), SyntaxFactory.LiteralExpression(SyntaxKind.NumericLiteralExpression, SyntaxFactory.Literal(1))));
            }
Exemplo n.º 7
0
 public static IEnumerable <ExpressionSyntax> ConvertArrayBounds(VBSyntax.ArgumentListSyntax argumentListSyntax, SemanticModel model, VBasic.VisualBasicSyntaxVisitor <CSharpSyntaxNode> commentConvertingNodesVisitor)
 {
     return(argumentListSyntax.Arguments.Select(a => IncreaseArrayUpperBoundExpression(((VBSyntax.SimpleArgumentSyntax)a).Expression, model, commentConvertingNodesVisitor)));
 }
Exemplo n.º 8
0
        static Dictionary <string, VariableDeclarationSyntax> SplitVariableDeclarations(VBSyntax.VariableDeclaratorSyntax declarator, VBasic.VisualBasicSyntaxVisitor <CSharpSyntaxNode> nodesVisitor, SemanticModel semanticModel)
        {
            var rawType = (TypeSyntax)declarator.AsClause?.TypeSwitch(
                (VBSyntax.SimpleAsClauseSyntax c) => c.Type,
                (VBSyntax.AsNewClauseSyntax c) => VBasic.SyntaxExtensions.Type(c.NewExpression),
                _ => { throw new NotImplementedException($"{_.GetType().FullName} not implemented!"); }
                )?.Accept(nodesVisitor) ?? SyntaxFactory.ParseTypeName("var");

            var initializer = (ExpressionSyntax)declarator.AsClause?.TypeSwitch(
                (VBSyntax.SimpleAsClauseSyntax _) => declarator.Initializer?.Value,
                (VBSyntax.AsNewClauseSyntax c) => c.NewExpression
                )?.Accept(nodesVisitor) ?? (ExpressionSyntax)declarator.Initializer?.Value.Accept(nodesVisitor);

            var newDecls = new Dictionary <string, VariableDeclarationSyntax>();

            foreach (var name in declarator.Names)
            {
                var type = rawType;
                if (!SyntaxTokenExtensions.IsKind(name.Nullable, VBasic.SyntaxKind.None))
                {
                    if (type is ArrayTypeSyntax)
                    {
                        type = ((ArrayTypeSyntax)type).WithElementType(
                            SyntaxFactory.NullableType(((ArrayTypeSyntax)type).ElementType));
                        initializer = null;
                    }
                    else
                    {
                        type = SyntaxFactory.NullableType(type);
                    }
                }

                var rankSpecifiers = NodesVisitor.ConvertArrayRankSpecifierSyntaxes(name.ArrayRankSpecifiers, name.ArrayBounds, nodesVisitor, semanticModel, false);
                if (rankSpecifiers.Count > 0)
                {
                    var rankSpecifiersWithSizes = NodesVisitor.ConvertArrayRankSpecifierSyntaxes(name.ArrayRankSpecifiers, name.ArrayBounds, nodesVisitor, semanticModel);
                    if (!rankSpecifiersWithSizes.SelectMany(ars => ars.Sizes).OfType <OmittedArraySizeExpressionSyntax>().Any())
                    {
                        initializer =
                            SyntaxFactory.ArrayCreationExpression(
                                SyntaxFactory.ArrayType(type, rankSpecifiersWithSizes));
                    }
                    type = SyntaxFactory.ArrayType(type, rankSpecifiers);
                }

                VariableDeclarationSyntax decl;
                var    v = SyntaxFactory.VariableDeclarator(ConvertIdentifier(name.Identifier, semanticModel), null, initializer == null ? null : SyntaxFactory.EqualsValueClause(initializer));
                string k = type.ToString();
                if (newDecls.TryGetValue(k, out decl))
                {
                    newDecls[k] = decl.AddVariables(v);
                }
                else
                {
                    newDecls[k] = SyntaxFactory.VariableDeclaration(type, SyntaxFactory.SingletonSeparatedList(v));
                }
            }

            return(newDecls);
        }