internal override async Task <TemplateResolutionResult> ResolveTemplatesAsync(ListCommandArgs args, string?defaultLanguage, CancellationToken cancellationToken)
        {
            IEnumerable <TemplateGroup> templateGroups = await GetTemplateGroupsAsync(cancellationToken).ConfigureAwait(false);

            IEnumerable <Func <TemplateGroup, MatchInfo?> > groupFilters = new[]
            {
                CliFilters.NameTemplateGroupFilter(args.ListNameCriteria)
            };

            IEnumerable <Func <ITemplateInfo, MatchInfo?> > templateFilters =
                args.AppliedFilters
                .OfType <TemplateFilterOptionDefinition>()
                .Select(filter => filter.TemplateMatchFilter(args.GetFilterValue(filter)));

            if (!args.IgnoreConstraints && _constraintManager is not null)
            {
                templateFilters = templateFilters.Concat(WellKnownSearchFilters.ConstraintFilters(await _constraintManager.GetConstraintsAsync(templateGroups.SelectMany(tg => tg.Templates).Cast <ITemplateInfo>(), cancellationToken).ConfigureAwait(false)));
            }

            IEnumerable <TemplateGroupMatchInfo> matchInformation =
                templateGroups.Select(
                    group =>
                    TemplateGroupMatchInfo.ApplyFilters(
                        group,
                        groupFilters,
                        templateFilters,
                        CliFilters.EmptyTemplateParameterFilter()));

            return(new TemplateResolutionResult(matchInformation, this));
        }