/** * @param Class_|Trait_ $class * @param Stmt\Class_|Stmt\Trait_ $node */ protected function processUsedTraits(ClassLike $class, Stmt\ClassLike $node) { foreach ($node->stmts as $child) { if ($child instanceof Stmt\TraitUse) { foreach ($child->traits as $trait) { $class->addTrait(Type::nameToString($trait)); } foreach ($child->adaptations as $adaptation) { if ($adaptation instanceof Stmt\TraitUseAdaptation\Precedence) { $insteadOf = new TraitInsteadOf(); $insteadOf->setTrait(Type::nameToString($adaptation->trait)); $insteadOf->setMethod($adaptation->method); foreach ($adaptation->insteadof as $insteadOfNode) { $insteadOf->addInsteadOf(Type::nameToString($insteadOfNode)); } $class->addTraitInsteadOf($insteadOf); } elseif ($adaptation instanceof Stmt\TraitUseAdaptation\Alias) { $alias = new TraitAlias(); $alias->setTrait(Type::nameToString($adaptation->trait)); $alias->setMethod($adaptation->method); $alias->setNewName($adaptation->newName); $alias->setNewAccessibility($adaptation->newModifier === Stmt\Class_::MODIFIER_PRIVATE ? ClassLike::M_PRIVATE : ($adaptation->newModifier === Stmt\Class_::MODIFIER_PROTECTED ? ClassLike::M_PROTECTED : ($adaptation->newModifier === Stmt\Class_::MODIFIER_PUBLIC ? ClassLike::M_PUBLIC : null))); $class->addTraitAlias($alias); } } } } }