php-extension-check/src/Extension/ExtensionCheck.php

134 sor
3.2 KiB
PHP

2021-05-08 21:09:48 +00:00
<?php
2021-05-08 22:50:26 +00:00
2021-05-08 21:09:48 +00:00
declare(strict_types=1);
2021-05-08 22:50:26 +00:00
2021-05-08 21:09:48 +00:00
namespace Fbrinker\ExtensionCheck\Extension;
use Closure;
2021-05-08 22:50:26 +00:00
class ExtensionCheck
{
2021-05-08 21:09:48 +00:00
private $extensionDetails;
public function __construct(ExtensionDetails $extensionDetails)
{
$this->extensionDetails = $extensionDetails;
}
2021-05-08 22:50:26 +00:00
/**
* @param string[] $usedExtensions
* @return string[]
*/
public function getUnused(array $usedExtensions): array
{
2021-05-08 21:09:48 +00:00
return array_diff(
$this->extensionDetails->getLoadedExtensions(),
$usedExtensions
);
}
2021-05-08 22:50:26 +00:00
/**
* @param string[] $classes
* @param string[] $functions
* @param string[] $constants
* @return array<string,array<string,bool>>
*/
public function checkUsages(array $classes, array $functions, array $constants, Closure $callback)
{
2021-05-08 21:09:48 +00:00
$usedExtensions = [];
2021-05-08 22:50:26 +00:00
foreach ($classes as $class) {
2021-05-08 21:09:48 +00:00
$extension = $this->checkClass($class);
if (!empty($extension)) {
$usedExtensions[$extension]['class'] = true;
}
$callback();
}
2021-05-08 22:50:26 +00:00
foreach ($functions as $function) {
2021-05-08 21:09:48 +00:00
$extension = $this->checkFunction($function);
if (!empty($extension)) {
$usedExtensions[$extension]['function'] = true;
}
$callback();
}
2021-05-08 22:50:26 +00:00
foreach ($constants as $constant) {
2021-05-08 21:09:48 +00:00
$extension = $this->checkConstant($constant);
if (!empty($extension)) {
$usedExtensions[$extension]['constant'] = true;
}
$callback();
}
$tmp = array_keys($usedExtensions);
2021-05-08 22:50:26 +00:00
foreach ($tmp as $usedExtension) {
2021-05-08 21:09:48 +00:00
$requiredExtensions = $this->checkRequiredDependency($usedExtension);
if (!empty($requiredExtensions)) {
2021-05-08 22:50:26 +00:00
foreach ($requiredExtensions as $requiredExtension) {
2021-05-08 21:09:48 +00:00
$usedExtensions[$requiredExtension]['dependency'] = true;
}
}
$callback();
}
return $usedExtensions;
}
2021-05-08 22:50:26 +00:00
private function checkClass(string $class): ?string
{
2021-05-08 21:09:48 +00:00
$classMap = $this->extensionDetails->getExtensionClassMap();
if (!isset($classMap[$class])) {
return null;
}
return $classMap[$class];
}
2021-05-08 22:50:26 +00:00
private function checkFunction(string $function): ?string
{
2021-05-08 21:09:48 +00:00
$functionMap = $this->extensionDetails->getExtensionFunctionMap();
if (!isset($functionMap[$function])) {
return null;
}
return $functionMap[$function];
}
2021-05-08 22:50:26 +00:00
private function checkConstant(string $function): ?string
{
2021-05-08 21:09:48 +00:00
$constantMap = $this->extensionDetails->getExtensionConstantMap();
if (!isset($constantMap[$function])) {
return null;
}
return $constantMap[$function];
}
2021-05-08 22:50:26 +00:00
/**
* @return string[]
*/
private function checkRequiredDependency(string $extension): array
{
2021-05-08 21:09:48 +00:00
$dependencyMap = $this->extensionDetails->getExtensionDependencyMap();
if (!isset($dependencyMap[$extension]['required'])) {
return [];
}
return $dependencyMap[$extension]['required'];
}
2021-05-08 22:50:26 +00:00
}