private static void SetupInvocationTracker(InvocationTracker <SyntaxKind> tracker, TrackerInput input) { const int parameterCount = 2; tracker.Track(input, tracker.MatchMethod(new MemberDescriptor(KnownType.System_Collections_Generic_IDictionary_TKey_TValue, "Add")), tracker.MethodHasParameters(parameterCount), c => IsFirstArgumentAccessControlAllowOrigin((InvocationExpressionSyntax)c.Node, c.SemanticModel) && IsSecondArgumentStarString((InvocationExpressionSyntax)c.Node, c.SemanticModel), tracker.IsIHeadersDictionary()); tracker.Track(input, tracker.MatchMethod(new MemberDescriptor(KnownType.Microsoft_AspNetCore_Http_HeaderDictionaryExtensions, "Append"), new MemberDescriptor(KnownType.System_Web_HttpResponse, "AppendHeader"), new MemberDescriptor(KnownType.System_Web_HttpResponseBase, "AddHeader"), new MemberDescriptor(KnownType.System_Collections_Specialized_NameValueCollection, "Add"), new MemberDescriptor(KnownType.System_Net_Http_Headers_HttpHeaders, "Add")), tracker.MethodHasParameters(parameterCount), c => IsFirstArgumentAccessControlAllowOrigin((InvocationExpressionSyntax)c.Node, c.SemanticModel) && IsSecondArgumentStarString((InvocationExpressionSyntax)c.Node, c.SemanticModel)); tracker.Track(input, tracker.MatchMethod(new MemberDescriptor(KnownType.Microsoft_AspNetCore_Cors_Infrastructure_CorsPolicyBuilder, "WithOrigins")), c => ContainsStar(((InvocationExpressionSyntax)c.Node).ArgumentList.Arguments.Select(a => a.Expression), c.SemanticModel)); tracker.Track(input, tracker.MatchMethod(new MemberDescriptor(KnownType.Microsoft_AspNetCore_Cors_Infrastructure_CorsPolicyBuilder, "AllowAnyOrigin"))); }
protected override void Initialize(SonarAnalysisContext context) { InvocationTracker.Track(context, InvocationTracker.MatchMethod(new MemberDescriptor(KnownType.System_Diagnostics_Process, "Start")), Conditions.ExceptWhen( InvocationTracker.ArgumentAtIndexIs(0, KnownType.System_Diagnostics_ProcessStartInfo)), InvocationTracker.MethodHasParameters()); PropertyAccessTracker.Track(context, PropertyAccessTracker.MatchProperty( new MemberDescriptor(KnownType.System_Diagnostics_ProcessStartInfo, "FileName")), PropertyAccessTracker.MatchSetter()); ObjectCreationTracker.Track(context, ObjectCreationTracker.MatchConstructor(KnownType.System_Diagnostics_ProcessStartInfo), ObjectCreationTracker.ArgumentAtIndexIs(0, KnownType.System_String)); }