Chris@0
|
1 <?php
|
Chris@0
|
2 /*
|
Chris@0
|
3 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
Chris@0
|
4 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
Chris@0
|
5 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
Chris@0
|
6 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
Chris@0
|
7 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
Chris@0
|
8 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
Chris@0
|
9 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
Chris@0
|
10 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
Chris@0
|
11 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
Chris@0
|
12 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
Chris@0
|
13 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
Chris@0
|
14 *
|
Chris@0
|
15 * This software consists of voluntary contributions made by many individuals
|
Chris@0
|
16 * and is licensed under the MIT license. For more information, see
|
Chris@0
|
17 * <http://www.doctrine-project.org>.
|
Chris@0
|
18 */
|
Chris@0
|
19
|
Chris@0
|
20 namespace Doctrine\Common\Annotations;
|
Chris@0
|
21
|
Chris@0
|
22 /**
|
Chris@0
|
23 * Simple Annotation Reader.
|
Chris@0
|
24 *
|
Chris@0
|
25 * This annotation reader is intended to be used in projects where you have
|
Chris@0
|
26 * full-control over all annotations that are available.
|
Chris@0
|
27 *
|
Chris@0
|
28 * @since 2.2
|
Chris@0
|
29 * @author Johannes M. Schmitt <schmittjoh@gmail.com>
|
Chris@0
|
30 * @author Fabio B. Silva <fabio.bat.silva@gmail.com>
|
Chris@0
|
31 */
|
Chris@0
|
32 class SimpleAnnotationReader implements Reader
|
Chris@0
|
33 {
|
Chris@0
|
34 /**
|
Chris@0
|
35 * @var DocParser
|
Chris@0
|
36 */
|
Chris@0
|
37 private $parser;
|
Chris@0
|
38
|
Chris@0
|
39 /**
|
Chris@0
|
40 * Constructor.
|
Chris@0
|
41 *
|
Chris@0
|
42 * Initializes a new SimpleAnnotationReader.
|
Chris@0
|
43 */
|
Chris@0
|
44 public function __construct()
|
Chris@0
|
45 {
|
Chris@0
|
46 $this->parser = new DocParser();
|
Chris@0
|
47 $this->parser->setIgnoreNotImportedAnnotations(true);
|
Chris@0
|
48 }
|
Chris@0
|
49
|
Chris@0
|
50 /**
|
Chris@0
|
51 * Adds a namespace in which we will look for annotations.
|
Chris@0
|
52 *
|
Chris@0
|
53 * @param string $namespace
|
Chris@0
|
54 *
|
Chris@0
|
55 * @return void
|
Chris@0
|
56 */
|
Chris@0
|
57 public function addNamespace($namespace)
|
Chris@0
|
58 {
|
Chris@0
|
59 $this->parser->addNamespace($namespace);
|
Chris@0
|
60 }
|
Chris@0
|
61
|
Chris@0
|
62 /**
|
Chris@0
|
63 * {@inheritDoc}
|
Chris@0
|
64 */
|
Chris@0
|
65 public function getClassAnnotations(\ReflectionClass $class)
|
Chris@0
|
66 {
|
Chris@0
|
67 return $this->parser->parse($class->getDocComment(), 'class '.$class->getName());
|
Chris@0
|
68 }
|
Chris@0
|
69
|
Chris@0
|
70 /**
|
Chris@0
|
71 * {@inheritDoc}
|
Chris@0
|
72 */
|
Chris@0
|
73 public function getMethodAnnotations(\ReflectionMethod $method)
|
Chris@0
|
74 {
|
Chris@0
|
75 return $this->parser->parse($method->getDocComment(), 'method '.$method->getDeclaringClass()->name.'::'.$method->getName().'()');
|
Chris@0
|
76 }
|
Chris@0
|
77
|
Chris@0
|
78 /**
|
Chris@0
|
79 * {@inheritDoc}
|
Chris@0
|
80 */
|
Chris@0
|
81 public function getPropertyAnnotations(\ReflectionProperty $property)
|
Chris@0
|
82 {
|
Chris@0
|
83 return $this->parser->parse($property->getDocComment(), 'property '.$property->getDeclaringClass()->name.'::$'.$property->getName());
|
Chris@0
|
84 }
|
Chris@0
|
85
|
Chris@0
|
86 /**
|
Chris@0
|
87 * {@inheritDoc}
|
Chris@0
|
88 */
|
Chris@0
|
89 public function getClassAnnotation(\ReflectionClass $class, $annotationName)
|
Chris@0
|
90 {
|
Chris@0
|
91 foreach ($this->getClassAnnotations($class) as $annot) {
|
Chris@0
|
92 if ($annot instanceof $annotationName) {
|
Chris@0
|
93 return $annot;
|
Chris@0
|
94 }
|
Chris@0
|
95 }
|
Chris@0
|
96
|
Chris@0
|
97 return null;
|
Chris@0
|
98 }
|
Chris@0
|
99
|
Chris@0
|
100 /**
|
Chris@0
|
101 * {@inheritDoc}
|
Chris@0
|
102 */
|
Chris@0
|
103 public function getMethodAnnotation(\ReflectionMethod $method, $annotationName)
|
Chris@0
|
104 {
|
Chris@0
|
105 foreach ($this->getMethodAnnotations($method) as $annot) {
|
Chris@0
|
106 if ($annot instanceof $annotationName) {
|
Chris@0
|
107 return $annot;
|
Chris@0
|
108 }
|
Chris@0
|
109 }
|
Chris@0
|
110
|
Chris@0
|
111 return null;
|
Chris@0
|
112 }
|
Chris@0
|
113
|
Chris@0
|
114 /**
|
Chris@0
|
115 * {@inheritDoc}
|
Chris@0
|
116 */
|
Chris@0
|
117 public function getPropertyAnnotation(\ReflectionProperty $property, $annotationName)
|
Chris@0
|
118 {
|
Chris@0
|
119 foreach ($this->getPropertyAnnotations($property) as $annot) {
|
Chris@0
|
120 if ($annot instanceof $annotationName) {
|
Chris@0
|
121 return $annot;
|
Chris@0
|
122 }
|
Chris@0
|
123 }
|
Chris@0
|
124
|
Chris@0
|
125 return null;
|
Chris@0
|
126 }
|
Chris@0
|
127 }
|