예제 #1
0
 /**
  * @param Method[]      $methods
  * @param Class_|Trait_ $class
  */
 protected function addMethodsFromUsedTraits(array &$methods, ClassLike $class)
 {
     $traitMethods = [];
     foreach ($class->getTraits() as $traitName) {
         if ($this->isTrait($traitName)) {
             foreach ($this->findAllMethods($traitName) as $method) {
                 $traitMethods[strtolower($traitName)][strtolower($method->getName())] = $method;
             }
         }
     }
     foreach ($class->getTraitAliases() as $alias) {
         if (isset($traitMethods[strtolower($alias->getTrait())][strtolower($alias->getMethod())])) {
             $method = $traitMethods[strtolower($alias->getTrait())][strtolower($alias->getMethod())];
             $method = clone $method;
             $method->setName($alias->getNewName());
             if ($alias->getNewAccessibility() !== null) {
                 $method->setAccessibility($alias->getNewAccessibility());
             }
             $this->mergeMethod($methods, $method);
         }
     }
     foreach ($class->getTraitInsteadOfs() as $insteadOf) {
         foreach ($insteadOf->getInsteadOfs() as $insteadOfTrait) {
             unset($traitMethods[strtolower($insteadOfTrait)][strtolower($insteadOf->getMethod())]);
         }
     }
     foreach ($traitMethods as $traitTraitMethods) {
         foreach ($traitTraitMethods as $method) {
             $this->mergeMethod($methods, clone $method);
         }
     }
 }