Esempio n. 1
0
            public override SyntaxList <StatementSyntax> VisitAssignmentStatement(VBSyntax.AssignmentStatementSyntax node)
            {
                var kind = ConvertToken(node.Kind(), TokenContext.Local);
                ExpressionSyntax Left;
                ExpressionSyntax Right;

                if (node.Left.IsKind(VBasic.SyntaxKind.InvocationExpression))
                {
                    Left = (ExpressionSyntax)nodesVisitor.IndexedAccess((VBSyntax.InvocationExpressionSyntax)node.Left);
                }
                else if (node.Left.IsKind(VBasic.SyntaxKind.IdentifierName))
                {
                    var LeftID           = (VBSyntax.IdentifierNameSyntax)node.Left;
                    var symbol           = semanticModel.GetSymbolInfo(LeftID).Symbol;
                    var symbolReturnType = symbol?.GetReturnType();
                    Left = (ExpressionSyntax)node.Left.Accept(nodesVisitor);
                }
                else
                {
                    Left = (ExpressionSyntax)node.Left.Accept(nodesVisitor);
                }


                Right = (ExpressionSyntax)node.Right.Accept(nodesVisitor);

                var LeftType  = semanticModel.GetSymbolInfo(node.Left).Symbol?.GetReturnType();
                var RightType = semanticModel.GetSymbolInfo(node.Right).Symbol?.GetReturnType();

                if (LeftType != null && RightType != null && LeftType != RightType)
                {
                    Right = SyntaxFactory.CastExpression(SyntaxFactory.ParseTypeName(LeftType.Name), Right);
                }

                return(SingleStatement(SyntaxFactory.AssignmentExpression(kind, Left, Right)));
            }