Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }