diff --git a/src/Generator/ClassGenerator.php b/src/Generator/ClassGenerator.php index 259febf1..935d6e02 100644 --- a/src/Generator/ClassGenerator.php +++ b/src/Generator/ClassGenerator.php @@ -29,6 +29,11 @@ class ClassGenerator extends AbstractGenerator */ protected $namespaceName = null; + /** + * @var array Array of string names + */ + protected $uses = []; + /** * @var DocBlockGenerator */ @@ -663,7 +668,7 @@ public function getProperty($propertyName) */ public function addUse($use, $useAlias = null) { - $this->traitUsageGenerator->addUse($use, $useAlias); + $this->uses[$use] = $useAlias; return $this; } @@ -674,7 +679,59 @@ public function addUse($use, $useAlias = null) */ public function getUses() { - return $this->traitUsageGenerator->getUses(); + $uses = []; + foreach ($this->uses as $use => $useAlias) { + $uses[] = ! empty($useAlias) ? $use . ' as ' . $useAlias : $use; + }; + + return $uses; + } + + /** + * @param string $use + * @return bool + */ + public function hasUse($use) + { + return array_key_exists($use, $this->uses); + } + + /** + * @param string $methodName + * @return ClassGenerator + */ + public function removeUse($use) + { + if ($this->hasUse($use)) { + unset($this->uses[$use]); + } + + return $this; + } + + /** + * @param string $use + * @return bool + */ + public function hasUseAlias($use) + { + if ($this->hasUse($use)) { + return !empty($this->uses[$use]); + } + + return false; + } + + /** + * @param $use + * @return ClassGenerator + */ + public function removeUseAlias($use) + { + if ($this->hasUse($use)) { + $this->addUse($use); + } + return $this; } /** diff --git a/src/Generator/TraitUsageGenerator.php b/src/Generator/TraitUsageGenerator.php index 23cf764b..dec5af8e 100644 --- a/src/Generator/TraitUsageGenerator.php +++ b/src/Generator/TraitUsageGenerator.php @@ -33,37 +33,11 @@ class TraitUsageGenerator extends AbstractGenerator */ protected $traitOverrides = []; - /** - * @var array Array of string names - */ - protected $uses = []; - public function __construct(ClassGenerator $classGenerator) { $this->classGenerator = $classGenerator; } - /** - * @inherit Zend\Code\Generator\TraitUsageInterface - */ - public function addUse($use, $useAlias = null) - { - if (! empty($useAlias)) { - $use .= ' as ' . $useAlias; - } - - $this->uses[$use] = $use; - return $this; - } - - /** - * @inherit Zend\Code\Generator\TraitUsageInterface - */ - public function getUses() - { - return array_values($this->uses); - } - /** * @inherit Zend\Code\Generator\TraitUsageInterface */ diff --git a/test/Generator/ClassGeneratorTest.php b/test/Generator/ClassGeneratorTest.php index c79f4dcb..fd21737e 100644 --- a/test/Generator/ClassGeneratorTest.php +++ b/test/Generator/ClassGeneratorTest.php @@ -421,6 +421,48 @@ public function testAddOneUseWithAliasTwiceOnlyAddsOne() $this->assertContains('use My\First\Use\Class as MyAlias;', $generated); } + public function testHasUse() + { + $classGenerator = new ClassGenerator(); + $classGenerator->addUse('My\First\Use\Class'); + $classGenerator->addUse('My\Second\Use\Class', 'MyAlias'); + + $this->assertTrue($classGenerator->hasUse('My\First\Use\Class')); + $this->assertTrue($classGenerator->hasUse('My\Second\Use\Class')); + } + + public function testRemoveUse() + { + $classGenerator = new ClassGenerator(); + $classGenerator->addUse('My\First\Use\Class'); + $classGenerator->addUse('My\Second\Use\Class', 'MyAlias'); + + $this->assertTrue($classGenerator->hasUse('My\First\Use\Class')); + $this->assertTrue($classGenerator->hasUse('My\Second\Use\Class')); + $classGenerator->removeUse('My\First\Use\Class'); + $classGenerator->removeUse('My\Second\Use\Class'); + $this->assertFalse($classGenerator->hasUse('My\First\Use\Class')); + $this->assertFalse($classGenerator->hasUse('My\Second\Use\Class')); + } + + public function testHasUseAlias() + { + $classGenerator = new ClassGenerator(); + $classGenerator->addUse('My\First\Use\Class'); + $classGenerator->addUse('My\Second\Use\Class', 'MyAlias'); + $this->assertFalse($classGenerator->hasUseAlias('My\First\Use\Class')); + $this->assertTrue($classGenerator->hasUseAlias('My\Second\Use\Class')); + } + + public function testRemoveUseAlias() + { + $classGenerator = new ClassGenerator(); + $classGenerator->addUse('My\First\Use\Class', 'MyAlias'); + $this->assertTrue($classGenerator->hasUseAlias('My\First\Use\Class')); + $classGenerator->removeUseAlias('My\First\Use\Class'); + $this->assertFalse($classGenerator->hasUseAlias('My\First\Use\Class')); + } + public function testCreateFromArrayWithDocBlockFromArray() { $classGenerator = ClassGenerator::fromArray([