Maslosoft Addendum API
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 123 124 125 126 127 128 129 130 131 132 133 134
<?php
/**
* This software package is licensed under AGPL, Commercial license.
*
* @package maslosoft/addendum
* @licence AGPL, Commercial
* @copyright Copyright (c) Piotr Masełkowski <pmaselkowski@gmail.com> (Meta container, further improvements, bugfixes)
* @copyright Copyright (c) Maslosoft (Meta container, further improvements, bugfixes)
* @copyright Copyright (c) Jan Suchal (Original version, builder, parser)
* @link https://maslosoft.com/addendum/ - maslosoft addendum
* @link https://code.google.com/p/addendum/ - original addendum project
*/
namespace Maslosoft\Addendum\Reflection;
use Maslosoft\Addendum\Addendum;
use Maslosoft\Addendum\Builder\Builder;
use Maslosoft\Addendum\Collections\AnnotationsCollection;
use Maslosoft\Addendum\Interfaces\AnnotatedReflectorInterface;
use Maslosoft\Addendum\Utilities\ConflictChecker;
use ReflectionClass;
class ReflectionAnnotatedClass extends ReflectionClass implements AnnotatedReflectorInterface
{
/**
* Annotations collection
* @var AnnotationsCollection
*/
private $annotations = null;
/**
* Addendum instance
* @var Addendum
*/
private $addendum = null;
public function __construct($class, Addendum $addendum = null)
{
parent::__construct($class);
$this->annotations = (new Builder($addendum))->build($this);
$this->addendum = $addendum;
ConflictChecker::check($this, $this->annotations);
}
public function hasAnnotation($class)
{
return $this->annotations->hasAnnotation($class);
}
public function getAnnotation($annotation)
{
return $this->annotations->getAnnotation($annotation);
}
public function getAnnotations()
{
return $this->annotations->getAnnotations();
}
public function getAllAnnotations($restriction = false)
{
return $this->annotations->getAllAnnotations($restriction);
}
public function getConstructor()
{
return $this->createReflectionAnnotatedMethod(parent::getConstructor());
}
public function getMethod($name)
{
return $this->createReflectionAnnotatedMethod(parent::getMethod($name));
}
public function getMethods($filter = -1)
{
$result = [];
foreach (parent::getMethods($filter) as $method)
{
$result[] = $this->createReflectionAnnotatedMethod($method);
}
return $result;
}
public function getProperty($name)
{
return $this->createReflectionAnnotatedProperty(parent::getProperty($name));
}
public function getProperties($filter = -1)
{
$result = [];
foreach (parent::getProperties($filter) as $property)
{
$result[] = $this->createReflectionAnnotatedProperty($property);
}
return $result;
}
public function getInterfaces()
{
$result = [];
foreach (parent::getInterfaces() as $interface)
{
$result[] = $this->createReflectionAnnotatedClass($interface);
}
return $result;
}
public function getParentClass()
{
$class = parent::getParentClass();
return $this->createReflectionAnnotatedClass($class);
}
private function createReflectionAnnotatedClass($class)
{
return ($class !== false) ? new ReflectionAnnotatedClass($class->name, $this->addendum) : false;
}
private function createReflectionAnnotatedMethod($method)
{
return ($method !== null) ? new ReflectionAnnotatedMethod($this->name, $method->name, $this->addendum) : null;
}
private function createReflectionAnnotatedProperty($property)
{
return ($property !== null) ? new ReflectionAnnotatedProperty($this->name, $property->name, $this->addendum) : null;
}
}
API documentation generated by ApiGen