Chris@17: and($trait); Chris@17: } Chris@17: } Chris@17: Chris@17: /** Chris@17: * Adds used trait. Chris@17: * Chris@17: * @param Node\Name|string $trait Trait name Chris@17: * Chris@17: * @return $this The builder instance (for fluid interface) Chris@17: */ Chris@17: public function and($trait) { Chris@17: $this->traits[] = BuilderHelpers::normalizeName($trait); Chris@17: return $this; Chris@17: } Chris@17: Chris@17: /** Chris@17: * Adds trait adaptation. Chris@17: * Chris@17: * @param Stmt\TraitUseAdaptation|Builder\TraitUseAdaptation $adaptation Trait adaptation Chris@17: * Chris@17: * @return $this The builder instance (for fluid interface) Chris@17: */ Chris@17: public function with($adaptation) { Chris@17: $adaptation = BuilderHelpers::normalizeNode($adaptation); Chris@17: Chris@17: if (!$adaptation instanceof Stmt\TraitUseAdaptation) { Chris@17: throw new \LogicException('Adaptation must have type TraitUseAdaptation'); Chris@17: } Chris@17: Chris@17: $this->adaptations[] = $adaptation; Chris@17: return $this; Chris@17: } Chris@17: Chris@17: /** Chris@17: * Returns the built node. Chris@17: * Chris@17: * @return Node The built node Chris@17: */ Chris@17: public function getNode() : Node { Chris@17: return new Stmt\TraitUse($this->traits, $this->adaptations); Chris@17: } Chris@17: }