/** * @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); } } }