1<?php 2 3/* 4 * This file is part of the Prophecy. 5 * (c) Konstantin Kudryashov <ever.zet@gmail.com> 6 * Marcello Duarte <marcello.duarte@gmail.com> 7 * 8 * For the full copyright and license information, please view the LICENSE 9 * file that was distributed with this source code. 10 */ 11 12namespace Prophecy\PhpDocumentor; 13 14use phpDocumentor\Reflection\DocBlock\Tag\MethodTag as LegacyMethodTag; 15use phpDocumentor\Reflection\DocBlock\Tags\Method; 16 17/** 18 * @author Théo FIDRY <theo.fidry@gmail.com> 19 * 20 * @internal 21 */ 22final class ClassAndInterfaceTagRetriever implements MethodTagRetrieverInterface 23{ 24 private $classRetriever; 25 26 public function __construct(MethodTagRetrieverInterface $classRetriever = null) 27 { 28 if (null !== $classRetriever) { 29 $this->classRetriever = $classRetriever; 30 31 return; 32 } 33 34 $this->classRetriever = class_exists('phpDocumentor\Reflection\DocBlockFactory') && class_exists('phpDocumentor\Reflection\Types\ContextFactory') 35 ? new ClassTagRetriever() 36 : new LegacyClassTagRetriever() 37 ; 38 } 39 40 /** 41 * @param \ReflectionClass $reflectionClass 42 * 43 * @return LegacyMethodTag[]|Method[] 44 */ 45 public function getTagList(\ReflectionClass $reflectionClass) 46 { 47 return array_merge( 48 $this->classRetriever->getTagList($reflectionClass), 49 $this->getInterfacesTagList($reflectionClass) 50 ); 51 } 52 53 /** 54 * @param \ReflectionClass $reflectionClass 55 * 56 * @return LegacyMethodTag[]|Method[] 57 */ 58 private function getInterfacesTagList(\ReflectionClass $reflectionClass) 59 { 60 $interfaces = $reflectionClass->getInterfaces(); 61 $tagList = array(); 62 63 foreach($interfaces as $interface) { 64 $tagList = array_merge($tagList, $this->classRetriever->getTagList($interface)); 65 } 66 67 return $tagList; 68 } 69} 70