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

104 lines
2.6 KiB
PHP
Raw Normal View History

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;
2021-05-08 23:57:02 +00:00
/** @var string[] */
private $excludedExtensions = [];
2021-05-08 21:09:48 +00:00
public function __construct(ExtensionDetails $extensionDetails)
{
$this->extensionDetails = $extensionDetails;
}
2021-05-08 23:57:02 +00:00
/**
* @param string[] $excludedExtensions
*/
public function setExcludedExtenstions(array $excludedExtensions): void
{
$this->excludedExtensions = $excludedExtensions;
}
public function getLoadedExtensionsCount(): int
{
return $this->extensionDetails->getLoadedExtensionsCount();
}
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(),
2021-05-08 23:57:02 +00:00
$usedExtensions,
$this->excludedExtensions
2021-05-08 21:09:48 +00:00
);
}
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 23:57:02 +00:00
$extensionMap = $this->extensionDetails->getExtensionMap($this->excludedExtensions);
2021-05-08 21:09:48 +00:00
2021-05-08 22:50:26 +00:00
foreach ($classes as $class) {
2021-05-08 23:57:02 +00:00
$extension = $extensionMap->checkClass($class);
2021-05-08 21:09:48 +00:00
if (!empty($extension)) {
$usedExtensions[$extension]['class'] = true;
}
$callback();
}
2021-05-08 22:50:26 +00:00
foreach ($functions as $function) {
2021-05-08 23:57:02 +00:00
$extension = $extensionMap->checkFunction($function);
2021-05-08 21:09:48 +00:00
if (!empty($extension)) {
$usedExtensions[$extension]['function'] = true;
}
$callback();
}
2021-05-08 22:50:26 +00:00
foreach ($constants as $constant) {
2021-05-08 23:57:02 +00:00
$extension = $extensionMap->checkConstant($constant);
2021-05-08 21:09:48 +00:00
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 23:57:02 +00:00
$requiredExtensions = $extensionMap->checkRequiredDependency($usedExtension);
2021-05-08 21:09:48 +00:00
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
}