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); }
internal abstract object ConstArgumentForParameter(ObjectCreationContext context, string parameterName);