/usr/share/php/ApiGen/Reflection/Extractors/MagicMethodExtractor.php is in php-apigen 4.1.2-1ubuntu2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | <?php
/**
* This file is part of the ApiGen (http://apigen.org)
*
* For the full copyright and license information, please view
* the file license.md that was distributed with this source code.
*/
namespace ApiGen\Reflection\Extractors;
use ApiGen\Reflection\ReflectionClass;
use ApiGen\Reflection\ReflectionMethodMagic;
class MagicMethodExtractor
{
/**
* @return ReflectionMethodMagic[]|array
*/
public function extractFromClass(ReflectionClass $reflectionClass)
{
$methods = [];
if ($parentClass = $reflectionClass->getParentClass()) {
$methods += $this->extractFromParentClass($parentClass, $reflectionClass->isDocumented());
}
if ($traits = $reflectionClass->getTraits()) {
$methods += $this->extractFromTraits($traits, $reflectionClass->isDocumented());
}
return $methods;
}
/**
* @param ReflectionClass $parent
* @param bool $isDocumented
* @return ReflectionMethodMagic[]
*/
private function extractFromParentClass(ReflectionClass $parent, $isDocumented)
{
$methods = [];
while ($parent) {
$methods = $this->extractOwnFromClass($parent, $isDocumented, $methods);
$parent = $parent->getParentClass();
}
return $methods;
}
/**
* @param array $traits
* @param bool $isDocumented
* @return ReflectionMethodMagic[]
*/
private function extractFromTraits($traits, $isDocumented)
{
$methods = [];
foreach ($traits as $trait) {
if ( ! $trait instanceof ReflectionClass) {
continue;
}
$methods = $this->extractOwnFromClass($trait, $isDocumented, $methods);
}
return $methods;
}
/**
* @param ReflectionClass $reflectionClass
* @param bool $isDocumented
* @param array $methods
* @return ReflectionMethodMagic[]
*/
private function extractOwnFromClass(ReflectionClass $reflectionClass, $isDocumented, array $methods)
{
foreach ($reflectionClass->getOwnMagicMethods() as $method) {
if ($this->canBeExtracted($isDocumented, $methods, $method)) {
$methods[$method->getName()] = $method;
}
}
return $methods;
}
/**
* @param bool $isDocumented
* @param array $methods
* @param ReflectionMethodMagic $method
* @return bool
*/
private function canBeExtracted($isDocumented, array $methods, ReflectionMethodMagic $method)
{
if (isset($methods[$method->getName()])) {
return FALSE;
}
if ($isDocumented && ! $method->isDocumented()) {
return FALSE;
}
return TRUE;
}
}
|