61 lines
2.1 KiB
PHP
61 lines
2.1 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
namespace StubTests\Parsers;
|
|
|
|
use ReflectionClass;
|
|
use ReflectionFunction;
|
|
use StubTests\Model\PHPClass;
|
|
use StubTests\Model\PHPDefineConstant;
|
|
use StubTests\Model\PHPFunction;
|
|
use StubTests\Model\PHPInterface;
|
|
use StubTests\Model\StubsContainer;
|
|
|
|
class PHPReflectionParser
|
|
{
|
|
|
|
public static function getStubs(): StubsContainer
|
|
{
|
|
$stubs = new StubsContainer();
|
|
|
|
$jsonData = json_decode(file_get_contents(__DIR__ . '/../TestData/mutedProblems.json'));
|
|
$const_groups = get_defined_constants(true);
|
|
unset($const_groups['user']);
|
|
$const_groups = Utils::flattenArray($const_groups, true);
|
|
foreach ($const_groups as $name => $value) {
|
|
$constant = (new PHPDefineConstant())->readObjectFromReflection([$name, $value]);
|
|
$constant->readMutedProblems($jsonData->constants);
|
|
$stubs->addConstant($constant);
|
|
}
|
|
|
|
/**@var ReflectionFunction $function */
|
|
foreach (get_defined_functions()['internal'] as $function) {
|
|
$phpFunction = (new PHPFunction())->readObjectFromReflection($function);
|
|
$phpFunction->readMutedProblems($jsonData->functions);
|
|
$stubs->addFunction($phpFunction);
|
|
}
|
|
|
|
/**@var ReflectionClass $clazz */
|
|
foreach (get_declared_classes() as $clazz) {
|
|
$reflectionClass = new ReflectionClass($clazz);
|
|
if ($reflectionClass->isInternal()) {
|
|
$class = (new PHPClass())->readObjectFromReflection($clazz);
|
|
$class->readMutedProblems($jsonData->classes);
|
|
$stubs->addClass($class);
|
|
}
|
|
}
|
|
|
|
/**@var ReflectionClass $interface */
|
|
foreach (get_declared_interfaces() as $interface) {
|
|
$reflectionInterface = new ReflectionClass($interface);
|
|
if ($reflectionInterface->isInternal()) {
|
|
$phpInterface = (new PHPInterface())->readObjectFromReflection($interface);
|
|
$phpInterface->readMutedProblems($jsonData->interfaces);
|
|
$stubs->addInterface($phpInterface);
|
|
}
|
|
}
|
|
|
|
return $stubs;
|
|
}
|
|
}
|