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); }
public override SyntaxNode VisitIdentifierName(IdentifierNameSyntax node) { if (AttributeMatchUtil.HasTriviaAnnotationSimple(node.GetLeadingTrivia(), WidenAttributeName)) { node = (IdentifierNameSyntax)WidenType(node); } node = (IdentifierNameSyntax)base.VisitIdentifierName(node); return(node); }
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; }
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); }
// 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); }
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); }
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); }