Exemple #1
0
        public void Track(SonarAnalysisContext context, params ObjectCreationCondition[] conditions)
        {
            context.RegisterCompilationStartAction(
                c =>
            {
                if (IsEnabled(c.Options))
                {
                    c.RegisterSyntaxNodeActionInNonGenerated(
                        GeneratedCodeRecognizer,
                        TrackObjectCreation,
                        TrackedSyntaxKinds);
                }
            });

            void TrackObjectCreation(SyntaxNodeAnalysisContext c)
            {
                if (IsTrackedObjectCreation(c.Node, c.SemanticModel))
                {
                    c.ReportDiagnosticWhenActive(Diagnostic.Create(Rule, c.Node.GetLocation()));
                }
            }

            bool IsTrackedObjectCreation(SyntaxNode objectCreationExpression, SemanticModel semanticModel)
            {
                var objectCreationContext = new ObjectCreationContext(objectCreationExpression, semanticModel);

                return(conditions.All(c => c(objectCreationContext)));
            }
        }
        internal override object ConstArgumentForParameter(ObjectCreationContext context, string parameterName)
        {
            var argumentList = ((ObjectCreationExpressionSyntax)context.Expression).ArgumentList;
            var values       = CSharpSyntaxHelper.ArgumentValuesForParameter(context.SemanticModel, argumentList, parameterName);

            if (values.Length == 1 && values[0] is ExpressionSyntax valueSyntax)
            {
                return(context.SemanticModel.GetConstantValue(valueSyntax).Value);
            }
            return(null);
        }
Exemple #3
0
 internal abstract object ConstArgumentForParameter(ObjectCreationContext context, string parameterName);