Ejemplo n.º 1
0
        public override SyntaxNode VisitCastExpression(CastExpressionSyntax node)
        {
            // reassociate trivia from cast's enclosing open paren to type expression
            node = node
                   .WithOpenParenToken(
                node.OpenParenToken.WithTrailingTrivia(SyntaxTriviaList.Empty))
                   .WithType(
                node.Type.WithLeadingTrivia(
                    node.OpenParenToken.TrailingTrivia.AddRange(node.Type.GetLeadingTrivia())));

            PredefinedTypeSyntax predefinedType;

            if ((predefinedType = node.Type as PredefinedTypeSyntax) != null)
            {
                if (predefinedType.Keyword.IsKind(SyntaxKind.IntKeyword) || predefinedType.Keyword.IsKind(SyntaxKind.UIntKeyword))
                {
                    if (AttributeMatchUtil.HasTriviaAnnotationSimple(node.Type.GetLeadingTrivia(), WidenAttributeName))
                    {
                        node = node.WithType(WidenType(node.Type));
                    }
                }
            }

            node = (CastExpressionSyntax)base.VisitCastExpression(node);
            return(node);
        }
Ejemplo n.º 2
0
        public override SyntaxNode VisitIdentifierName(IdentifierNameSyntax node)
        {
            if (AttributeMatchUtil.HasTriviaAnnotationSimple(node.GetLeadingTrivia(), WidenAttributeName))
            {
                node = (IdentifierNameSyntax)WidenType(node);
            }

            node = (IdentifierNameSyntax)base.VisitIdentifierName(node);
            return(node);
        }
Ejemplo n.º 3
0
        public override SyntaxNode VisitLocalDeclarationStatement(LocalDeclarationStatementSyntax node)
        {
            node = (LocalDeclarationStatementSyntax)base.VisitLocalDeclarationStatement(node);

            if (AttributeMatchUtil.HasTriviaAnnotationSimple(node.GetLeadingTrivia(), CountAttributeName))
            {
                node = node.WithDeclaration(node.Declaration.WithType(NarrowIntegerType(node.Declaration.Type)));
            }

            return node;
        }
Ejemplo n.º 4
0
        public override SyntaxNode VisitGenericName(GenericNameSyntax node)
        {
            node = node.WithTypeArgumentList((TypeArgumentListSyntax)VisitTypeArgumentList(node.TypeArgumentList));
            // Don't call base.VisitGenericName(), since VisitIdentifierName() may double-widen identifier

            if (AttributeMatchUtil.HasTriviaAnnotationSimple(node.GetLeadingTrivia(), WidenAttributeName))
            {
                node = (GenericNameSyntax)WidenType(node);
            }

            return(node);
        }
Ejemplo n.º 5
0
        // this one does both proper and pseudo attributes
        public override SyntaxNode VisitParameter(ParameterSyntax node)
        {
            // Normal parameter lists use a proper attribute: [Widen]
            // Anonymous delegate parameter lists do not permit attributes, so must use trivia: /*[Widen]*/
            // Therefore, check for both
            if (AttributeMatchUtil.HasAttributeSimple(node.AttributeLists, WidenAttributeName) ||
                AttributeMatchUtil.HasTriviaAnnotationSimple(node.GetLeadingTrivia(), WidenAttributeName))
            {
                node = node.WithType(WidenType(node.Type));
            }

            node = (ParameterSyntax)base.VisitParameter(node);
            return(node);
        }
Ejemplo n.º 6
0
        public override SyntaxNode VisitLocalDeclarationStatement(LocalDeclarationStatementSyntax node)
        {
            node = (LocalDeclarationStatementSyntax)base.VisitLocalDeclarationStatement(node);

            if (AttributeMatchUtil.HasTriviaAnnotationSimple(node.GetLeadingTrivia(), WidenAttributeName))
            {
                if (node.Declaration.Type.IsKind(SyntaxKind.PredefinedType))
                {
                    node = node.WithDeclaration(
                        node.Declaration.WithType(
                            WidenType(node.Declaration.Type)).WithTriviaFrom(node.Declaration.Type));
                }
            }

            return(node);
        }
Ejemplo n.º 7
0
        public override SyntaxNode VisitTypeArgumentList(TypeArgumentListSyntax node)
        {
            node = (TypeArgumentListSyntax)base.VisitTypeArgumentList(node);

            int i = 0;

            foreach (TypeSyntax type in node.Arguments)
            {
                if (AttributeMatchUtil.HasTriviaAnnotationSimple(type.GetLeadingTrivia(), WidenAttributeName))
                {
                    if ((type is PredefinedTypeSyntax) || (type is GenericNameSyntax))
                    {
                        node = node.WithArguments(
                            node.Arguments.RemoveAt(i).Insert(i, WidenType(type).WithTriviaFrom(type)));
                    }
                }
                i++;
            }

            return(node);
        }