public function regenerate($includeTests)
    {
        // Reset the manifest so stale info doesn't cause errors.
        $this->loadState([]);
        $this->roots = [];
        $this->children = [];

        $finder = new ManifestFileFinder();
        $finder->setOptions(array(
            'name_regex' => '/^[^_].*\\.php$/',
            'ignore_files' => array('index.php', 'cli-script.php'),
            'ignore_tests' => !$includeTests,
            'file_callback' => function ($basename, $pathname, $depth) use ($includeTests, $finder) {
                $this->handleFile($basename, $pathname, $includeTests);
            },
        ));
        $finder->find($this->base);

        foreach ($this->roots as $root) {
            $this->coalesceDescendants($root);
        }

        if ($this->cache) {
            $data = $this->getState();
            $this->cache->set($this->cacheKey, $data);
        }
    }