extensionDetails = $extensionDetails; } public function getUnused(array $usedExtensions) { return array_diff( $this->extensionDetails->getLoadedExtensions(), $usedExtensions ); } 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($class): ?string { $classMap = $this->extensionDetails->getExtensionClassMap(); if (!isset($classMap[$class])) { return null; } return $classMap[$class]; } private function checkFunction($function): ?string { $functionMap = $this->extensionDetails->getExtensionFunctionMap(); if (!isset($functionMap[$function])) { return null; } return $functionMap[$function]; } private function checkConstant($function): ?string { $constantMap = $this->extensionDetails->getExtensionConstantMap(); if (!isset($constantMap[$function])) { return null; } return $constantMap[$function]; } private function checkRequiredDependency($extension): array { $dependencyMap = $this->extensionDetails->getExtensionDependencyMap(); if (!isset($dependencyMap[$extension]['required'])) { return []; } return $dependencyMap[$extension]['required']; } }