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); }