/usr/share/php/ApiGen/Reflection/Extractors/MagicPropertyExtractor.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 | <?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\ReflectionPropertyMagic;
class MagicPropertyExtractor
{
/**
* @return ReflectionPropertyMagic[]|array
*/
public function extractFromClass(ReflectionClass $reflectionClass)
{
$properties = [];
if ($parentClass = $reflectionClass->getParentClass()) {
$properties += $this->extractFromParentClass($parentClass, $reflectionClass->isDocumented());
}
if ($traits = $reflectionClass->getTraits()) {
$properties += $this->extractFromTraits($traits, $reflectionClass->isDocumented());
}
return $properties;
}
/**
* @param ReflectionClass $parent
* @param bool $isDocumented
* @return ReflectionPropertyMagic[]
*/
private function extractFromParentClass(ReflectionClass $parent, $isDocumented)
{
$properties = [];
while ($parent) {
$properties = $this->extractOwnFromClass($parent, $isDocumented, $properties);
$parent = $parent->getParentClass();
}
return $properties;
}
/**
* @param array $traits
* @param bool $isDocumented
* @return ReflectionPropertyMagic[]
*/
private function extractFromTraits($traits, $isDocumented)
{
$properties = [];
foreach ($traits as $trait) {
if ( ! $trait instanceof ReflectionClass) {
continue;
}
$properties = $this->extractOwnFromClass($trait, $isDocumented, $properties);
}
return $properties;
}
/**
* @param ReflectionClass $reflectionClass
* @param bool $isDocumented
* @param array $properties
* @return ReflectionPropertyMagic[]
*/
private function extractOwnFromClass(ReflectionClass $reflectionClass, $isDocumented, array $properties)
{
foreach ($reflectionClass->getOwnMagicProperties() as $property) {
if ($this->canBeExtracted($isDocumented, $properties, $property)) {
$properties[$property->getName()] = $property;
}
}
return $properties;
}
/**
* @param bool $isDocumented
* @param array $properties
* @param ReflectionPropertyMagic $property
* @return bool
*/
private function canBeExtracted($isDocumented, array $properties, ReflectionPropertyMagic $property)
{
if (isset($properties[$property->getName()])) {
return FALSE;
}
if ($isDocumented && ! $property->isDocumented()) {
return FALSE;
}
return TRUE;
}
}
|