extensionDetails = $extensionDetails; } /** * @param string[] $excludedExtensions */ public function setExcludedExtenstions(array $excludedExtensions): void { $this->excludedExtensions = $excludedExtensions; } public function getLoadedExtensionsCount(): int { return $this->extensionDetails->getLoadedExtensionsCount(); } /** * @param string[] $usedExtensions * @return string[] */ public function getUnused(array $usedExtensions): array { return array_diff( $this->extensionDetails->getLoadedExtensions(), $usedExtensions, $this->excludedExtensions ); } /** * @param string[] $classes * @param string[] $functions * @param string[] $constants * @return array> */ public function checkUsages(array $classes, array $functions, array $constants, Closure $callback) { $usedExtensions = []; $extensionMap = $this->extensionDetails->getExtensionMap($this->excludedExtensions); foreach ($classes as $class) { $extension = $extensionMap->checkClass($class); if (!empty($extension)) { $usedExtensions[$extension]['class'] = true; } $callback(); } foreach ($functions as $function) { $extension = $extensionMap->checkFunction($function); if (!empty($extension)) { $usedExtensions[$extension]['function'] = true; } $callback(); } foreach ($constants as $constant) { $extension = $extensionMap->checkConstant($constant); if (!empty($extension)) { $usedExtensions[$extension]['constant'] = true; } $callback(); } $tmp = array_keys($usedExtensions); foreach ($tmp as $usedExtension) { $requiredExtensions = $extensionMap->checkRequiredDependency($usedExtension); if (!empty($requiredExtensions)) { foreach ($requiredExtensions as $requiredExtension) { $usedExtensions[$requiredExtension]['dependency'] = true; } } $callback(); } return $usedExtensions; } }