protected sealed override void Initialize(SonarAnalysisContext context) { context.RegisterSyntaxNodeActionInNonGenerated( c => { var statement = (ExpressionStatementSyntax)c.Node; var expression = statement.Expression; if (expression is AwaitExpressionSyntax awaitExpression) { expression = awaitExpression.Expression; } var method = c.SemanticModel.GetSymbolInfo(expression).Symbol as IMethodSymbol; if (method == null || !ReadMethodNames.Contains(method.Name, StringComparer.Ordinal)) { return; } if (method.ContainingType.Is(KnownType.System_IO_Stream) || method.IsOverride && method.ContainingType.DerivesOrImplements(KnownType.System_IO_Stream)) { c.ReportDiagnosticWhenActive(Diagnostic.Create(rule, expression.GetLocation(), method.Name)); } }, SyntaxKind.ExpressionStatement); }
public override void Initialize(AnalysisContext context) { context.RegisterSyntaxNodeActionInNonGenerated( c => { var statement = (ExpressionStatementSyntax)c.Node; var expression = statement.Expression; var awaitExpression = expression as AwaitExpressionSyntax; if (awaitExpression != null) { expression = awaitExpression.Expression; } var method = c.SemanticModel.GetSymbolInfo(expression).Symbol as IMethodSymbol; if (method == null || !ReadMethodNames.Contains(method.Name, StringComparer.InvariantCulture)) { return; } var streamType = c.SemanticModel.Compilation.GetTypeByMetadataName("System.IO.Stream"); if (streamType == null) { return; } if (method.ContainingType.DerivesOrImplementsAny(streamType)) { c.ReportDiagnostic(Diagnostic.Create(Rule, expression.GetLocation(), method.Name)); } }, SyntaxKind.ExpressionStatement); }