/usr/share/php/ApiGen/Reflection/Extractors/ParentClassElementsExtractor.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 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | <?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\ReflectionMethod;
use ApiGen\Reflection\ReflectionProperty;
class ParentClassElementsExtractor
{
/**
* @var ReflectionClass
*/
private $reflectionClass;
public function __construct(ReflectionClass $reflectionClass)
{
$this->reflectionClass = $reflectionClass;
}
/**
* @return array
*/
public function getInheritedConstants()
{
return array_filter(
array_map(
function (ReflectionClass $class) {
$reflections = $class->getOwnConstants();
ksort($reflections);
return $reflections;
},
$this->getParentClassesAndInterfaces()
)
);
}
/**
* @return array {[ className => ReflectionProperties[] ]}
*/
public function getInheritedProperties()
{
$properties = [];
$allProperties = array_flip(array_map(function (ReflectionProperty $property) {
return $property->getName();
}, $this->reflectionClass->getOwnProperties()));
foreach ($this->reflectionClass->getParentClasses() as $class) {
$inheritedProperties = [];
foreach ($class->getOwnProperties() as $property) {
if ( ! array_key_exists($property->getName(), $allProperties) && ! $property->isPrivate()) {
$inheritedProperties[$property->getName()] = $property;
$allProperties[$property->getName()] = NULL;
}
}
$properties = $this->sortElements($inheritedProperties, $properties, $class);
}
return $properties;
}
/**
* @return array {[ className => ReflectionMethod[] ]}
*/
public function getInheritedMethods()
{
$methods = [];
$allMethods = array_flip(array_map(function (ReflectionMethod $method) {
return $method->getName();
}, $this->reflectionClass->getOwnMethods()));
foreach ($this->getParentClassesAndInterfaces() as $class) {
$inheritedMethods = [];
foreach ($class->getOwnMethods() as $method) {
if ( ! array_key_exists($method->getName(), $allMethods) && ! $method->isPrivate()) {
$inheritedMethods[$method->getName()] = $method;
$allMethods[$method->getName()] = NULL;
}
}
$methods = $this->sortElements($inheritedMethods, $methods, $class);
}
return $methods;
}
/**
* @return ReflectionClass[]|array
*/
private function getParentClassesAndInterfaces()
{
return array_merge($this->reflectionClass->getParentClasses(), $this->reflectionClass->getInterfaces());
}
/**
* @return array
*/
private function sortElements(array $elements, array $allElements, ReflectionClass $reflectionClass)
{
if ( ! empty($elements)) {
ksort($elements);
$allElements[$reflectionClass->getName()] = array_values($elements);
}
return $allElements;
}
}
|