private void AnalyzeSymbol(SyntaxNodeAnalysisContext context)
        {
            var expression     = (VariableDeclarationSyntax)context.Node;
            var typeExpression = expression.Type;

            if (!(typeExpression is IdentifierNameSyntax))
            {
                return;
            }

            if (typeExpression.IsVar)
            {
                return;
            }

            var symbol        = context.SemanticModel.GetSymbolInfo(typeExpression).Symbol;
            var typeName      = symbol.MetadataName;
            var namespaceName = symbol.ContainingNamespace.Name;

            if (namespaceName != "System")
            {
                return;
            }

            if (MapConcreteTypeToPredefinedTypeAlias.ContainsKey(typeName))
            {
                context.ReportDiagnostic(Diagnostic.Create(Rule, typeExpression.GetLocation(),
                                                           MapConcreteTypeToPredefinedTypeAlias.First(kvp => kvp.Key == typeName).Value, typeName));
            }
        }
        private async Task <Solution> AsToCastAsync(Document document, SyntaxNode root, SyntaxNode statement)
        {
            var semanticModel = await document.GetSemanticModelAsync();

            var typeName = semanticModel.GetSymbolInfo((IdentifierNameSyntax)statement).Symbol.MetadataName;

            var aliasToken =
                MapConcreteTypeToPredefinedTypeAlias.First(
                    kvp => kvp.Key == typeName).Value;

            var newExpression = SyntaxFactory.PredefinedType(SyntaxFactory.Token(aliasToken)).WithAdditionalAnnotations(Formatter.Annotation);
            var newRoot       = root.ReplaceNode(statement, newExpression);
            var newDocument   = document.WithSyntaxRoot(newRoot);

            return(newDocument.Project.Solution);
        }