public void Handle()

in src/Core/Compiling/Policy/CacheLookupCompiler.cs [18:73]


    public void Handle(ICompilationContext context, InvocationExpressionSyntax node)
    {
        if (!node.TryExtractingConfigParameter<CacheLookupConfig>(context, "check-header", out var values))
        {
            return;
        }

        var element = new XElement("cache-lookup");

        if (!element.AddAttribute(values, nameof(CacheLookupConfig.VaryByDeveloper), "vary-by-developer"))
        {
            context.Report(Diagnostic.Create(
                CompilationErrors.RequiredParameterNotDefined,
                node.GetLocation(),
                "cache-lookup",
                nameof(CacheLookupConfig.VaryByDeveloper)
            ));
            return;
        }

        if (!element.AddAttribute(values, nameof(CacheLookupConfig.VaryByDeveloperGroups), "vary-by-developer-groups"))
        {
            context.Report(Diagnostic.Create(
                CompilationErrors.RequiredParameterNotDefined,
                node.GetLocation(),
                "cache-lookup",
                nameof(CacheLookupConfig.VaryByDeveloperGroups)
            ));
            return;
        }

        element.AddAttribute(values, nameof(CacheLookupConfig.CachingType), "caching-type");
        element.AddAttribute(values, nameof(CacheLookupConfig.DownstreamCachingType), "downstream-caching-type");
        element.AddAttribute(values, nameof(CacheLookupConfig.MustRevalidate), "must-revalidate");
        element.AddAttribute(values, nameof(CacheLookupConfig.AllowPrivateResponseCaching), "allow-private-response-caching");

        if (values.TryGetValue(nameof(CacheLookupConfig.VaryByHeaders), out var headers) &&
            headers.UnnamedValues is not null)
        {
            foreach (var value in headers.UnnamedValues)
            {
                element.Add(new XElement("vary-by-header", value.Value!));
            }
        }

        if (values.TryGetValue(nameof(CacheLookupConfig.VaryByQueryParameters), out var queryParams) &&
            queryParams.UnnamedValues is not null)
        {
            foreach (var value in queryParams.UnnamedValues)
            {
                element.Add(new XElement("vary-by-query-parameter", value.Value!));
            }
        }

        context.AddPolicy(element);
    }