extensionDetails = $extensionDetails; } /** * @param string[] $usedExtensions * @return string[] */ public function getUnused(array $usedExtensions): array { return array_diff( $this->extensionDetails->getLoadedExtensions(), $usedExtensions ); } /** * @param string[] $classes * @param string[] $functions * @param string[] $constants * @return array> */ public function checkUsages(array $classes, array $functions, array $constants, Closure $callback) { $usedExtensions = []; foreach ($classes as $class) { $extension = $this->checkClass($class); if (!empty($extension)) { $usedExtensions[$extension]['class'] = true; } $callback(); } foreach ($functions as $function) { $extension = $this->checkFunction($function); if (!empty($extension)) { $usedExtensions[$extension]['function'] = true; } $callback(); } foreach ($constants as $constant) { $extension = $this->checkConstant($constant); if (!empty($extension)) { $usedExtensions[$extension]['constant'] = true; } $callback(); } $tmp = array_keys($usedExtensions); foreach ($tmp as $usedExtension) { $requiredExtensions = $this->checkRequiredDependency($usedExtension); if (!empty($requiredExtensions)) { foreach ($requiredExtensions as $requiredExtension) { $usedExtensions[$requiredExtension]['dependency'] = true; } } $callback(); } return $usedExtensions; } private function checkClass(string $class): ?string { $classMap = $this->extensionDetails->getExtensionClassMap(); if (!isset($classMap[$class])) { return null; } return $classMap[$class]; } private function checkFunction(string $function): ?string { $functionMap = $this->extensionDetails->getExtensionFunctionMap(); if (!isset($functionMap[$function])) { return null; } return $functionMap[$function]; } private function checkConstant(string $function): ?string { $constantMap = $this->extensionDetails->getExtensionConstantMap(); if (!isset($constantMap[$function])) { return null; } return $constantMap[$function]; } /** * @return string[] */ private function checkRequiredDependency(string $extension): array { $dependencyMap = $this->extensionDetails->getExtensionDependencyMap(); if (!isset($dependencyMap[$extension]['required'])) { return []; } return $dependencyMap[$extension]['required']; } }