112 linhas
2.8 KiB
PHP
112 linhas
2.8 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
namespace Fbrinker\ExtensionCheck\Extension;
|
|
|
|
use Closure;
|
|
|
|
class ExtensionCheck {
|
|
|
|
private $extensionDetails;
|
|
|
|
public function __construct(ExtensionDetails $extensionDetails)
|
|
{
|
|
$this->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'];
|
|
}
|
|
|
|
} |