<?php declare(strict_types=1);
/*
 * This file is part of phpunit/php-code-coverage.
 *
 * (c) Sebastian Bergmann <sebastian@phpunit.de>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
namespace SebastianBergmann\CodeCoverage\StaticAnalysis;

use function file_get_contents;
use SebastianBergmann\CodeCoverage\Filter;

/**
 * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
 *
 * @no-named-arguments Parameter names are not covered by the backward compatibility promise for phpunit/php-code-coverage
 */
final readonly class CacheWarmer
{
    /**
     * @param non-empty-string $cacheDirectory
     *
     * @return array{cacheHits: non-negative-int, cacheMisses: non-negative-int}
     */
    public function warmCache(string $cacheDirectory, bool $useAnnotationsForIgnoringCode, bool $ignoreDeprecatedCode, Filter $filter): array
    {
        $analyser = new CachingSourceAnalyser(
            $cacheDirectory,
            new ParsingSourceAnalyser,
        );

        foreach ($filter->files() as $file) {
            $sourceCode = file_get_contents($file);

            if ($sourceCode === false) {
                // @codeCoverageIgnoreStart
                continue;
                // @codeCoverageIgnoreEnd
            }

            $analyser->analyse(
                $file,
                $sourceCode,
                $useAnnotationsForIgnoringCode,
                $ignoreDeprecatedCode,
            );
        }

        return [
            'cacheHits'   => $analyser->cacheHits(),
            'cacheMisses' => $analyser->cacheMisses(),
        ];
    }
}
