public static ImmutableArray <Diagnostic> GetDiagnostics(
        SyntaxNode node,
        SemanticModel model,
        CancellationToken token)
    {
        var nullableParametersVisitor = new NullableParametersVisitor(model, token);

        nullableParametersVisitor.Visit(node);
        var nullableParameters = nullableParametersVisitor.NullableParameters;

        var existingNullChecksVisitor = new ExistingNullChecksVisitor(model, token);

        existingNullChecksVisitor.Visit(node);
        var existingNullChecks = existingNullChecksVisitor.ExistingNullChecks;

        var builder = ImmutableArray.CreateBuilder <Diagnostic>();

        foreach (var nullableParameter in nullableParameters)
        {
            if (!existingNullChecks.Any(nullCheck => nullCheck.ParameterIndex == nullableParameter.Index))
            {
                var diagnostic = Diagnostic.Create(
                    Descriptor,
                    nullableParameter.Syntax.Identifier.GetLocation(),
                    properties: ImmutableDictionary <string, string?> .Empty.Add(
                        nameof(NullableParameter.Index),
                        nullableParameter.Index.ToString()));
                builder.Add(diagnostic);
            }
        }
        return(builder.ToImmutable());
    }
    private void VisitBaseMethodDeclaration(CSharpSyntaxNode node)
    {
        var existingNullChecksVisitor = new ExistingNullChecksVisitor(model, token);

        existingNullChecksVisitor.Visit(node);
        existingNullChecks = existingNullChecksVisitor.ExistingNullChecks;
    }