/** * Test sorting of traits * * @return void * @test */ public function testSorting() { $registry = new TraitRegistry(); $registry->register(TraitB::class); $registry->register(TraitC::class); $registry->register(TraitSample::class, 'Foobar\\*', 0); $registry->register(TraitA::class); $result = $registry->findByClass('Foobar\\BaseClass'); $this->assertEquals(TraitA::class, $result[0]->getName()); $this->assertEquals(TraitB::class, $result[1]->getName()); $this->assertEquals(TraitC::class, $result[2]->getName()); $this->assertEquals(TraitSample::class, $result[3]->getName()); }
/** * Generate class using any given references or traits * * @param string $className * * @return FileGenerator */ public function build($className) { $footprint = $this->_footprintRegistry->get($className); $parentClass = $footprint->getParent(); if (!$parentClass) { $parentClass = $this->_baseClassRegistry->find($className); } if ($footprint->isInterface()) { $generator = new InterfaceGenerator(); } else { $traits = $this->_traitRegistry->findByClass($className); $generator = new ClassGenerator(); $generator->useTraits($traits); } $generator->setName($className); $generator->setExtendedClass($parentClass); $generator->setImplementedInterfaces($footprint->getInterfaces()); foreach ($footprint->getConstants() as $name => $value) { $generator->addConstant($name, $value); } $file = new FileGenerator(); $file->setClass($generator); return $file; }