From 3dd06ba5839629fcdcca510e87321af83415698d Mon Sep 17 00:00:00 2001 From: Bas Kamer Date: Wed, 2 Dec 2015 15:20:42 +0100 Subject: [PATCH 01/21] introduce removeProperty method --- src/Generator/ClassGenerator.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/Generator/ClassGenerator.php b/src/Generator/ClassGenerator.php index 259febf1..93eb97fd 100644 --- a/src/Generator/ClassGenerator.php +++ b/src/Generator/ClassGenerator.php @@ -677,6 +677,18 @@ public function getUses() return $this->traitUsageGenerator->getUses(); } + /** + * @param string $propertyName + * @return ClassGenerator + */ + public function removeProperty($propertyName) + { + if ($this->hasProperty($propertyName)) { + unset($this->properties[$propertyName]); + } + return $this; + } + /** * @param string $propertyName * @return bool From b48dbaa0345040cde96e4d96106cbb969c22227e Mon Sep 17 00:00:00 2001 From: Bas Kamer Date: Wed, 2 Dec 2015 15:21:06 +0100 Subject: [PATCH 02/21] add unittest --- test/Generator/ClassGeneratorTest.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/Generator/ClassGeneratorTest.php b/test/Generator/ClassGeneratorTest.php index c79f4dcb..e08963aa 100644 --- a/test/Generator/ClassGeneratorTest.php +++ b/test/Generator/ClassGeneratorTest.php @@ -193,6 +193,16 @@ public function testHasProperty() $this->assertTrue($classGenerator->hasProperty('propertyOne')); } + public function testRemoveProperty() + { + $classGenerator = new ClassGenerator(); + $classGenerator->addProperty('propertyOne'); + $this->assertTrue($classGenerator->hasProperty('propertyOne')); + + $classGenerator->removeProperty('propertyOne'); + $this->assertFalse($classGenerator->hasProperty('propertyOne')); + } + public function testToString() { $classGenerator = ClassGenerator::fromArray([ From 0928fb1e76fa4b2b11f63b04e395d5b13a9eea0e Mon Sep 17 00:00:00 2001 From: Bas Kamer Date: Fri, 8 Jan 2016 22:14:33 +0100 Subject: [PATCH 03/21] introduce removeConstant method --- src/Generator/ClassGenerator.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/Generator/ClassGenerator.php b/src/Generator/ClassGenerator.php index 93eb97fd..01a207bb 100644 --- a/src/Generator/ClassGenerator.php +++ b/src/Generator/ClassGenerator.php @@ -469,6 +469,18 @@ public function getConstants() return $this->constants; } + /** + * @param string $constantName + * @return ClassGenerator + */ + public function removeConstant($constantName) + { + if ($this->hasConstant($constantName)) { + unset($this->constants[$constantName]); + } + return $this; + } + /** * @param string $constantName * @return bool From e35bf2ddaddee57c68077fc942aa104418e6a0fa Mon Sep 17 00:00:00 2001 From: Bas Kamer Date: Fri, 8 Jan 2016 22:15:03 +0100 Subject: [PATCH 04/21] add unittest --- test/Generator/ClassGeneratorTest.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/Generator/ClassGeneratorTest.php b/test/Generator/ClassGeneratorTest.php index e08963aa..98dbe852 100644 --- a/test/Generator/ClassGeneratorTest.php +++ b/test/Generator/ClassGeneratorTest.php @@ -652,6 +652,16 @@ public function testAddConstantThrowsExceptionOnDuplicate() $classGenerator->addConstant('x', 'value1'); } + public function testRemoveConstant() + { + $classGenerator = new ClassGenerator(); + $classGenerator->addConstant('constantOne', 'foo'); + $this->assertTrue($classGenerator->hasConstant('constantOne')); + + $classGenerator->removeConstant('constantOne'); + $this->assertFalse($classGenerator->hasConstant('constantOne')); + } + /** * @group 6274 */ From c5e00128c84adc5117ee810e3787b1f966a9b210 Mon Sep 17 00:00:00 2001 From: Bas Kamer Date: Fri, 8 Jan 2016 22:35:30 +0100 Subject: [PATCH 05/21] introduce removeExtentedClass and hasExtentedClass methods --- src/Generator/ClassGenerator.php | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/Generator/ClassGenerator.php b/src/Generator/ClassGenerator.php index 01a207bb..f21bd331 100644 --- a/src/Generator/ClassGenerator.php +++ b/src/Generator/ClassGenerator.php @@ -429,6 +429,23 @@ public function getExtendedClass() return $this->extendedClass; } + /** + * @return boolean + */ + public function hasExtentedClass() + { + return !empty($this->extendedClass); + } + + /** + * @return ClassGenerator + */ + public function removeExtentedClass() + { + $this->setExtendedClass(null); + return $this; + } + /** * @param array $implementedInterfaces * @return ClassGenerator From 554e98de5bafc245168f443621e241cf1d57ddfe Mon Sep 17 00:00:00 2001 From: Bas Kamer Date: Fri, 8 Jan 2016 22:42:15 +0100 Subject: [PATCH 06/21] adds unittests --- test/Generator/ClassGeneratorTest.php | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/test/Generator/ClassGeneratorTest.php b/test/Generator/ClassGeneratorTest.php index 98dbe852..7d841a91 100644 --- a/test/Generator/ClassGeneratorTest.php +++ b/test/Generator/ClassGeneratorTest.php @@ -59,6 +59,24 @@ public function testExtendedClassAccessors() $this->assertEquals($classGenerator->getExtendedClass(), 'ExtendedClass'); } + public function testHasExtendedClass() + { + $classGenerator = new ClassGenerator(); + $classGenerator->setExtendedClass('ExtendedClass'); + + $this->assertTrue($classGenerator->hasExtentedClass()); + } + + public function testRemoveExtendedClass() + { + $classGenerator = new ClassGenerator(); + $classGenerator->setExtendedClass('ExtendedClass'); + $this->assertTrue($classGenerator->hasExtentedClass()); + + $classGenerator->removeExtentedClass(); + $this->assertFalse($classGenerator->hasExtentedClass()); + } + public function testImplementedInterfacesAccessors() { $classGenerator = new ClassGenerator(); From 0751564b1181e4f00d6aef84b6ce3bf9c0970337 Mon Sep 17 00:00:00 2001 From: Bas Kamer Date: Fri, 8 Jan 2016 22:56:00 +0100 Subject: [PATCH 07/21] introduces hasImplementedInterface and removeImplementedInterface methods --- src/Generator/ClassGenerator.php | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/Generator/ClassGenerator.php b/src/Generator/ClassGenerator.php index f21bd331..b70d648d 100644 --- a/src/Generator/ClassGenerator.php +++ b/src/Generator/ClassGenerator.php @@ -464,9 +464,29 @@ public function getImplementedInterfaces() return $this->implementedInterfaces; } + /** + * @param string $implementedInterface + * @return bool + */ + public function hasImplementedInterface($implementedInterface) + { + return in_array($implementedInterface, $this->implementedInterfaces); + } + + /** + * @param $implementedInterface + * @return ClassGenerator + */ + public function removeImplementedInterface($implementedInterface) + { + if ($this->hasImplementedInterface($implementedInterface)) { + unset($this->implementedInterfaces[array_search($implementedInterface, $this->implementedInterfaces)]); + } + return $this; + } + /** * @param string $constantName - * * @return PropertyGenerator|false */ public function getConstant($constantName) From d515195314571db1e8d5b0097c52472b32209ddb Mon Sep 17 00:00:00 2001 From: Bas Kamer Date: Fri, 8 Jan 2016 22:56:19 +0100 Subject: [PATCH 08/21] add unittests --- test/Generator/ClassGeneratorTest.php | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/test/Generator/ClassGeneratorTest.php b/test/Generator/ClassGeneratorTest.php index 7d841a91..8e546af5 100644 --- a/test/Generator/ClassGeneratorTest.php +++ b/test/Generator/ClassGeneratorTest.php @@ -84,6 +84,26 @@ public function testImplementedInterfacesAccessors() $this->assertEquals($classGenerator->getImplementedInterfaces(), ['Class1', 'Class2']); } + public function testHasImplementedInterface() + { + $classGenerator = new ClassGenerator(); + $classGenerator->setImplementedInterfaces(['Class1', 'Class2']); + + $this->assertTrue($classGenerator->hasImplementedInterface('Class1')); + } + + public function testRemoveImplementedInterface() + { + $classGenerator = new ClassGenerator(); + $classGenerator->setImplementedInterfaces(['Class1', 'Class2']); + + $this->assertTrue($classGenerator->hasImplementedInterface('Class1')); + + $classGenerator->removeImplementedInterface('Class1'); + $this->assertFalse($classGenerator->hasImplementedInterface('Class1')); + $this->assertTrue($classGenerator->hasImplementedInterface('Class2')); + } + public function testPropertyAccessors() { $classGenerator = new ClassGenerator(); From fb2353ba3526ae08cc324db9c9befa554b172e39 Mon Sep 17 00:00:00 2001 From: Bas Kamer Date: Tue, 12 Jan 2016 15:46:48 +0100 Subject: [PATCH 09/21] introduce hasUse, removeUse, hasUseAlias, removeUseAlias methods without changing the format of $this->uses --- src/Generator/ClassGenerator.php | 39 +++++++++++++++++ src/Generator/TraitUsageGenerator.php | 61 +++++++++++++++++++++++++++ 2 files changed, 100 insertions(+) diff --git a/src/Generator/ClassGenerator.php b/src/Generator/ClassGenerator.php index b70d648d..319b09a4 100644 --- a/src/Generator/ClassGenerator.php +++ b/src/Generator/ClassGenerator.php @@ -716,6 +716,44 @@ public function addUse($use, $useAlias = null) return $this; } + /** + * @param string $use + * @return ClassGenerator + */ + public function hasUse($use) + { + return $this->traitUsageGenerator->hasUse($use); + } + + /** + * @param string $use + * @return ClassGenerator + */ + public function removeUse($use) + { + $this->traitUsageGenerator->removeUse($use); + return $this; + } + + /** + * @param string $use + * @return bool + */ + public function hasUseAlias($use) + { + return $this->traitUsageGenerator->hasUseAlias($use); + } + + /** + * @param $use + * @return ClassGenerator + */ + public function removeUseAlias($use) + { + $this->traitUsageGenerator->removeUseAlias($use); + return $this; + } + /** * Returns the "use" classes * @@ -726,6 +764,7 @@ public function getUses() return $this->traitUsageGenerator->getUses(); } + /** * @param string $propertyName * @return ClassGenerator diff --git a/src/Generator/TraitUsageGenerator.php b/src/Generator/TraitUsageGenerator.php index 23cf764b..4f443d16 100644 --- a/src/Generator/TraitUsageGenerator.php +++ b/src/Generator/TraitUsageGenerator.php @@ -64,6 +64,67 @@ public function getUses() return array_values($this->uses); } + public function hasUse($use) + { + $uses = array_values($this->uses); + foreach($this->uses as $key=>$value) { + $parts = explode(' ', $value); + if ($parts[0] === $use) { + return true; + } + } + + return false; + } + + /** + * @param $use + * @return bool + */ + public function hasUseAlias($use) + { + foreach($this->uses as $key=>$value) { + $parts = explode(' as ', $value); + if ($parts[0] === $use and count($parts) == 2) { + return true; + } + }; + + return false; + } + + /** + * @param $use + * @return TraitUsageGenerator + */ + public function removeUse($use) + { + foreach($this->uses as $key=>$value) { + $parts = explode(' ', $value); + if ($parts[0] === $use) { + unset($this->uses[$value]); + } + }; + + return $this; + } + + /** + * @param $use + * @return TraitUsageGenerator + */ + public function removeUseAlias($use) + { + foreach($this->uses as $key=>$value) { + $parts = explode(' as ', $value); + if ($parts[0] === $use and count($parts) == 2) { + unset($this->uses[$value]); + } + }; + + return $this; + } + /** * @inherit Zend\Code\Generator\TraitUsageInterface */ From d36400bf8a9bb4d91d88bd736f5c207513c07c01 Mon Sep 17 00:00:00 2001 From: Bas Kamer Date: Tue, 12 Jan 2016 15:47:20 +0100 Subject: [PATCH 10/21] add unitest --- test/Generator/ClassGeneratorTest.php | 42 +++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/test/Generator/ClassGeneratorTest.php b/test/Generator/ClassGeneratorTest.php index 8e546af5..e92525dd 100644 --- a/test/Generator/ClassGeneratorTest.php +++ b/test/Generator/ClassGeneratorTest.php @@ -422,6 +422,48 @@ public function testPassingANamespacedClassnameShouldGenerateAClassnameWithoutIt $this->assertContains('class FunClass', $received, $received); } + 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')); + } + /** * @group ZF2-151 */ From ebe746f2b5a0be93cd3d1c7fea2c413532780b2c Mon Sep 17 00:00:00 2001 From: Bas Kamer Date: Tue, 12 Jan 2016 15:48:14 +0100 Subject: [PATCH 11/21] doc block note --- src/Generator/TraitUsageGenerator.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/Generator/TraitUsageGenerator.php b/src/Generator/TraitUsageGenerator.php index 4f443d16..76805626 100644 --- a/src/Generator/TraitUsageGenerator.php +++ b/src/Generator/TraitUsageGenerator.php @@ -11,6 +11,14 @@ use Reflection; use ReflectionMethod; +/** + * Class TraitUsageGenerator + * + * @todo rewrite $this->uses storage such that it easier to differentiate between the class and its alias for 3.0 + * @todo pull this logic into ClassGenerator OR rename this class to UsageGenerator for 3.0 + * + * @package Zend\Code\Generator + */ class TraitUsageGenerator extends AbstractGenerator { /** From 4a5c385b1cf3ccfe5dc9d87aaf3685ce339b3108 Mon Sep 17 00:00:00 2001 From: Bas Kamer Date: Tue, 12 Jan 2016 15:52:30 +0100 Subject: [PATCH 12/21] cleanup : docblock, leftover line and code styles --- src/Generator/TraitUsageGenerator.php | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/Generator/TraitUsageGenerator.php b/src/Generator/TraitUsageGenerator.php index 76805626..74e553a1 100644 --- a/src/Generator/TraitUsageGenerator.php +++ b/src/Generator/TraitUsageGenerator.php @@ -72,10 +72,13 @@ public function getUses() return array_values($this->uses); } + /** + * @param $use + * @return bool + */ public function hasUse($use) { - $uses = array_values($this->uses); - foreach($this->uses as $key=>$value) { + foreach ($this->uses as $key => $value) { $parts = explode(' ', $value); if ($parts[0] === $use) { return true; @@ -91,7 +94,7 @@ public function hasUse($use) */ public function hasUseAlias($use) { - foreach($this->uses as $key=>$value) { + foreach ($this->uses as $key => $value) { $parts = explode(' as ', $value); if ($parts[0] === $use and count($parts) == 2) { return true; @@ -107,7 +110,7 @@ public function hasUseAlias($use) */ public function removeUse($use) { - foreach($this->uses as $key=>$value) { + foreach ($this->uses as $key => $value) { $parts = explode(' ', $value); if ($parts[0] === $use) { unset($this->uses[$value]); @@ -123,7 +126,7 @@ public function removeUse($use) */ public function removeUseAlias($use) { - foreach($this->uses as $key=>$value) { + foreach ($this->uses as $key => $value) { $parts = explode(' as ', $value); if ($parts[0] === $use and count($parts) == 2) { unset($this->uses[$value]); From ed190e17b40df410cd08c04130e609ab06a857e0 Mon Sep 17 00:00:00 2001 From: Bas Kamer Date: Tue, 12 Jan 2016 17:03:44 +0100 Subject: [PATCH 13/21] TraitUsageGenerator deprecation in 2.7. Use UsageGenerator instead --- src/Generator/ClassGenerator.php | 40 +++++++++++++-------------- src/Generator/TraitUsageGenerator.php | 4 +-- src/Generator/UsageGenerator.php | 13 +++++++++ 3 files changed, 34 insertions(+), 23 deletions(-) create mode 100644 src/Generator/UsageGenerator.php diff --git a/src/Generator/ClassGenerator.php b/src/Generator/ClassGenerator.php index 319b09a4..a6623e1e 100644 --- a/src/Generator/ClassGenerator.php +++ b/src/Generator/ClassGenerator.php @@ -70,9 +70,9 @@ class ClassGenerator extends AbstractGenerator protected $methods = []; /** - * @var TraitUsageGenerator Object to encapsulate trait usage logic + * @var UsageGenerator Object to encapsulate trait usage logic */ - protected $traitUsageGenerator; + protected $usageGenerator; /** * Build a Code Generation Php Object from a Class Reflection @@ -232,7 +232,7 @@ public function __construct( $methods = [], $docBlock = null ) { - $this->traitUsageGenerator = new TraitUsageGenerator($this); + $this->usageGenerator = new UsageGenerator($this); if ($name !== null) { $this->setName($name); @@ -712,7 +712,7 @@ public function getProperty($propertyName) */ public function addUse($use, $useAlias = null) { - $this->traitUsageGenerator->addUse($use, $useAlias); + $this->usageGenerator->addUse($use, $useAlias); return $this; } @@ -722,7 +722,7 @@ public function addUse($use, $useAlias = null) */ public function hasUse($use) { - return $this->traitUsageGenerator->hasUse($use); + return $this->usageGenerator->hasUse($use); } /** @@ -731,7 +731,7 @@ public function hasUse($use) */ public function removeUse($use) { - $this->traitUsageGenerator->removeUse($use); + $this->usageGenerator->removeUse($use); return $this; } @@ -741,7 +741,7 @@ public function removeUse($use) */ public function hasUseAlias($use) { - return $this->traitUsageGenerator->hasUseAlias($use); + return $this->usageGenerator->hasUseAlias($use); } /** @@ -750,7 +750,7 @@ public function hasUseAlias($use) */ public function removeUseAlias($use) { - $this->traitUsageGenerator->removeUseAlias($use); + $this->usageGenerator->removeUseAlias($use); return $this; } @@ -761,7 +761,7 @@ public function removeUseAlias($use) */ public function getUses() { - return $this->traitUsageGenerator->getUses(); + return $this->usageGenerator->getUses(); } @@ -902,7 +902,7 @@ public function hasMethod($methodName) */ public function addTrait($trait) { - $this->traitUsageGenerator->addTrait($trait); + $this->usageGenerator->addTrait($trait); return $this; } @@ -911,7 +911,7 @@ public function addTrait($trait) */ public function addTraits(array $traits) { - $this->traitUsageGenerator->addTraits($traits); + $this->usageGenerator->addTraits($traits); return $this; } @@ -920,7 +920,7 @@ public function addTraits(array $traits) */ public function hasTrait($traitName) { - return $this->traitUsageGenerator->hasTrait($traitName); + return $this->usageGenerator->hasTrait($traitName); } /** @@ -928,7 +928,7 @@ public function hasTrait($traitName) */ public function getTraits() { - return $this->traitUsageGenerator->getTraits(); + return $this->usageGenerator->getTraits(); } /** @@ -936,7 +936,7 @@ public function getTraits() */ public function removeTrait($traitName) { - return $this->traitUsageGenerator->removeTrait($traitName); + return $this->usageGenerator->removeTrait($traitName); } /** @@ -944,7 +944,7 @@ public function removeTrait($traitName) */ public function addTraitAlias($method, $alias, $visibility = null) { - $this->traitUsageGenerator->addTraitAlias($method, $alias, $visibility); + $this->usageGenerator->addTraitAlias($method, $alias, $visibility); return $this; } @@ -953,7 +953,7 @@ public function addTraitAlias($method, $alias, $visibility = null) */ public function getTraitAliases() { - return $this->traitUsageGenerator->getTraitAliases(); + return $this->usageGenerator->getTraitAliases(); } /** @@ -961,7 +961,7 @@ public function getTraitAliases() */ public function addTraitOverride($method, $traitsToReplace) { - $this->traitUsageGenerator->addTraitOverride($method, $traitsToReplace); + $this->usageGenerator->addTraitOverride($method, $traitsToReplace); return $this; } @@ -970,7 +970,7 @@ public function addTraitOverride($method, $traitsToReplace) */ public function removeTraitOverride($method, $overridesToRemove = null) { - $this->traitUsageGenerator->removeTraitOverride($method, $overridesToRemove); + $this->usageGenerator->removeTraitOverride($method, $overridesToRemove); return $this; } @@ -980,7 +980,7 @@ public function removeTraitOverride($method, $overridesToRemove = null) */ public function getTraitOverrides() { - return $this->traitUsageGenerator->getTraitOverrides(); + return $this->usageGenerator->getTraitOverrides(); } /** @@ -1060,7 +1060,7 @@ public function generate() } $output .= self::LINE_FEED . '{' . self::LINE_FEED . self::LINE_FEED; - $output .= $this->traitUsageGenerator->generate(); + $output .= $this->usageGenerator->generate(); $constants = $this->getConstants(); diff --git a/src/Generator/TraitUsageGenerator.php b/src/Generator/TraitUsageGenerator.php index 74e553a1..9d83566d 100644 --- a/src/Generator/TraitUsageGenerator.php +++ b/src/Generator/TraitUsageGenerator.php @@ -14,9 +14,7 @@ /** * Class TraitUsageGenerator * - * @todo rewrite $this->uses storage such that it easier to differentiate between the class and its alias for 3.0 - * @todo pull this logic into ClassGenerator OR rename this class to UsageGenerator for 3.0 - * + * @deprecated Deprecated in 2.7. Use UsageGenerator instead * @package Zend\Code\Generator */ class TraitUsageGenerator extends AbstractGenerator diff --git a/src/Generator/UsageGenerator.php b/src/Generator/UsageGenerator.php new file mode 100644 index 00000000..64087296 --- /dev/null +++ b/src/Generator/UsageGenerator.php @@ -0,0 +1,13 @@ + Date: Tue, 12 Jan 2016 17:05:00 +0100 Subject: [PATCH 14/21] prevent addUse with different alias to be stored --- src/Generator/TraitUsageGenerator.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Generator/TraitUsageGenerator.php b/src/Generator/TraitUsageGenerator.php index 9d83566d..d5e52022 100644 --- a/src/Generator/TraitUsageGenerator.php +++ b/src/Generator/TraitUsageGenerator.php @@ -54,6 +54,8 @@ public function __construct(ClassGenerator $classGenerator) */ public function addUse($use, $useAlias = null) { + $this->removeUse($use); + if (! empty($useAlias)) { $use .= ' as ' . $useAlias; } From 4db88425a6538356e275848d89389d74012f97fc Mon Sep 17 00:00:00 2001 From: Bas Kamer Date: Wed, 13 Jan 2016 12:54:24 +0100 Subject: [PATCH 15/21] Revert "TraitUsageGenerator deprecation in 2.7. Use UsageGenerator instead" This reverts commit 1ee32e8d1123f41297ff84f360522c630cedd9f9. --- src/Generator/ClassGenerator.php | 40 +++++++++++++-------------- src/Generator/TraitUsageGenerator.php | 4 ++- src/Generator/UsageGenerator.php | 13 --------- 3 files changed, 23 insertions(+), 34 deletions(-) delete mode 100644 src/Generator/UsageGenerator.php diff --git a/src/Generator/ClassGenerator.php b/src/Generator/ClassGenerator.php index a6623e1e..319b09a4 100644 --- a/src/Generator/ClassGenerator.php +++ b/src/Generator/ClassGenerator.php @@ -70,9 +70,9 @@ class ClassGenerator extends AbstractGenerator protected $methods = []; /** - * @var UsageGenerator Object to encapsulate trait usage logic + * @var TraitUsageGenerator Object to encapsulate trait usage logic */ - protected $usageGenerator; + protected $traitUsageGenerator; /** * Build a Code Generation Php Object from a Class Reflection @@ -232,7 +232,7 @@ public function __construct( $methods = [], $docBlock = null ) { - $this->usageGenerator = new UsageGenerator($this); + $this->traitUsageGenerator = new TraitUsageGenerator($this); if ($name !== null) { $this->setName($name); @@ -712,7 +712,7 @@ public function getProperty($propertyName) */ public function addUse($use, $useAlias = null) { - $this->usageGenerator->addUse($use, $useAlias); + $this->traitUsageGenerator->addUse($use, $useAlias); return $this; } @@ -722,7 +722,7 @@ public function addUse($use, $useAlias = null) */ public function hasUse($use) { - return $this->usageGenerator->hasUse($use); + return $this->traitUsageGenerator->hasUse($use); } /** @@ -731,7 +731,7 @@ public function hasUse($use) */ public function removeUse($use) { - $this->usageGenerator->removeUse($use); + $this->traitUsageGenerator->removeUse($use); return $this; } @@ -741,7 +741,7 @@ public function removeUse($use) */ public function hasUseAlias($use) { - return $this->usageGenerator->hasUseAlias($use); + return $this->traitUsageGenerator->hasUseAlias($use); } /** @@ -750,7 +750,7 @@ public function hasUseAlias($use) */ public function removeUseAlias($use) { - $this->usageGenerator->removeUseAlias($use); + $this->traitUsageGenerator->removeUseAlias($use); return $this; } @@ -761,7 +761,7 @@ public function removeUseAlias($use) */ public function getUses() { - return $this->usageGenerator->getUses(); + return $this->traitUsageGenerator->getUses(); } @@ -902,7 +902,7 @@ public function hasMethod($methodName) */ public function addTrait($trait) { - $this->usageGenerator->addTrait($trait); + $this->traitUsageGenerator->addTrait($trait); return $this; } @@ -911,7 +911,7 @@ public function addTrait($trait) */ public function addTraits(array $traits) { - $this->usageGenerator->addTraits($traits); + $this->traitUsageGenerator->addTraits($traits); return $this; } @@ -920,7 +920,7 @@ public function addTraits(array $traits) */ public function hasTrait($traitName) { - return $this->usageGenerator->hasTrait($traitName); + return $this->traitUsageGenerator->hasTrait($traitName); } /** @@ -928,7 +928,7 @@ public function hasTrait($traitName) */ public function getTraits() { - return $this->usageGenerator->getTraits(); + return $this->traitUsageGenerator->getTraits(); } /** @@ -936,7 +936,7 @@ public function getTraits() */ public function removeTrait($traitName) { - return $this->usageGenerator->removeTrait($traitName); + return $this->traitUsageGenerator->removeTrait($traitName); } /** @@ -944,7 +944,7 @@ public function removeTrait($traitName) */ public function addTraitAlias($method, $alias, $visibility = null) { - $this->usageGenerator->addTraitAlias($method, $alias, $visibility); + $this->traitUsageGenerator->addTraitAlias($method, $alias, $visibility); return $this; } @@ -953,7 +953,7 @@ public function addTraitAlias($method, $alias, $visibility = null) */ public function getTraitAliases() { - return $this->usageGenerator->getTraitAliases(); + return $this->traitUsageGenerator->getTraitAliases(); } /** @@ -961,7 +961,7 @@ public function getTraitAliases() */ public function addTraitOverride($method, $traitsToReplace) { - $this->usageGenerator->addTraitOverride($method, $traitsToReplace); + $this->traitUsageGenerator->addTraitOverride($method, $traitsToReplace); return $this; } @@ -970,7 +970,7 @@ public function addTraitOverride($method, $traitsToReplace) */ public function removeTraitOverride($method, $overridesToRemove = null) { - $this->usageGenerator->removeTraitOverride($method, $overridesToRemove); + $this->traitUsageGenerator->removeTraitOverride($method, $overridesToRemove); return $this; } @@ -980,7 +980,7 @@ public function removeTraitOverride($method, $overridesToRemove = null) */ public function getTraitOverrides() { - return $this->usageGenerator->getTraitOverrides(); + return $this->traitUsageGenerator->getTraitOverrides(); } /** @@ -1060,7 +1060,7 @@ public function generate() } $output .= self::LINE_FEED . '{' . self::LINE_FEED . self::LINE_FEED; - $output .= $this->usageGenerator->generate(); + $output .= $this->traitUsageGenerator->generate(); $constants = $this->getConstants(); diff --git a/src/Generator/TraitUsageGenerator.php b/src/Generator/TraitUsageGenerator.php index d5e52022..d0a57a89 100644 --- a/src/Generator/TraitUsageGenerator.php +++ b/src/Generator/TraitUsageGenerator.php @@ -14,7 +14,9 @@ /** * Class TraitUsageGenerator * - * @deprecated Deprecated in 2.7. Use UsageGenerator instead + * @todo rewrite $this->uses storage such that it easier to differentiate between the class and its alias for 3.0 + * @todo pull this logic into ClassGenerator OR rename this class to UsageGenerator for 3.0 + * * @package Zend\Code\Generator */ class TraitUsageGenerator extends AbstractGenerator diff --git a/src/Generator/UsageGenerator.php b/src/Generator/UsageGenerator.php deleted file mode 100644 index 64087296..00000000 --- a/src/Generator/UsageGenerator.php +++ /dev/null @@ -1,13 +0,0 @@ - Date: Wed, 13 Jan 2016 13:58:17 +0100 Subject: [PATCH 16/21] mention added methods in docs --- doc/book/generator/reference.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/doc/book/generator/reference.md b/doc/book/generator/reference.md index 473b6586..5b733e04 100644 --- a/doc/book/generator/reference.md +++ b/doc/book/generator/reference.md @@ -104,6 +104,7 @@ class Zend\Code\Generator\ClassGenerator extends Zend\Code\Generator\AbstractGen public function addConstant($property) public function getConstants() public function getConstant($propertyName) + public function removeConstant($constantName) public function setDocblock(Zend\Code\Generator\DocBlockGenerator $docblock) public function getDocblock() public function setName($name) @@ -112,17 +113,26 @@ class Zend\Code\Generator\ClassGenerator extends Zend\Code\Generator\AbstractGen public function isAbstract() public function setExtendedClass($extendedClass) public function getExtendedClass() + public function hasExtentedClass() + public function removeExtentedClass() public function setImplementedInterfaces(Array $implementedInterfaces) public function getImplementedInterfaces() public function addProperties(Array $properties) public function addProperty($property) public function getProperties() public function getProperty($propertyName) + public function removeProperty($propertyName) public function addMethods(Array $methods) public function addMethod($method) public function getMethods() public function getMethod($methodName) public function hasMethod($methodName) + public function hasUse($use) + public function removeUse($use) + public function hasUseAlias($use) + public function removeUseAlias($use) + public function hasImplementedInterface($implementedInterface) + public function removeImplementedInterface($implementedInterface) public function isSourceDirty() public function generate() } From 6e7f0c6bfc627c79c7d466423566f2d708659d5e Mon Sep 17 00:00:00 2001 From: Bas Kamer Date: Wed, 13 Jan 2016 13:58:53 +0100 Subject: [PATCH 17/21] Revert "doc block note" This reverts commit 24870929d8205ebdabcc7cdce185a56d93c58e2a. --- src/Generator/TraitUsageGenerator.php | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/Generator/TraitUsageGenerator.php b/src/Generator/TraitUsageGenerator.php index d0a57a89..8329d4a0 100644 --- a/src/Generator/TraitUsageGenerator.php +++ b/src/Generator/TraitUsageGenerator.php @@ -11,14 +11,6 @@ use Reflection; use ReflectionMethod; -/** - * Class TraitUsageGenerator - * - * @todo rewrite $this->uses storage such that it easier to differentiate between the class and its alias for 3.0 - * @todo pull this logic into ClassGenerator OR rename this class to UsageGenerator for 3.0 - * - * @package Zend\Code\Generator - */ class TraitUsageGenerator extends AbstractGenerator { /** From 3304e2c55761c294331c5898e951e4cf77d47ef9 Mon Sep 17 00:00:00 2001 From: Bas Kamer Date: Mon, 25 Jan 2016 13:08:19 +0100 Subject: [PATCH 18/21] return types --- src/Generator/ClassGenerator.php | 64 ++++++++++++++++---------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/src/Generator/ClassGenerator.php b/src/Generator/ClassGenerator.php index 319b09a4..acb7a19e 100644 --- a/src/Generator/ClassGenerator.php +++ b/src/Generator/ClassGenerator.php @@ -78,7 +78,7 @@ class ClassGenerator extends AbstractGenerator * Build a Code Generation Php Object from a Class Reflection * * @param ClassReflection $classReflection - * @return ClassGenerator + * @return self */ public static function fromReflection(ClassReflection $classReflection) { @@ -167,7 +167,7 @@ public static function fromReflection(ClassReflection $classReflection) * * @throws Exception\InvalidArgumentException * @param array $array - * @return ClassGenerator + * @return self */ public static function fromArray(array $array) { @@ -262,7 +262,7 @@ public function __construct( /** * @param string $name - * @return ClassGenerator + * @return self */ public function setName($name) { @@ -286,7 +286,7 @@ public function getName() /** * @param string $namespaceName - * @return ClassGenerator + * @return self */ public function setNamespaceName($namespaceName) { @@ -304,7 +304,7 @@ public function getNamespaceName() /** * @param FileGenerator $fileGenerator - * @return ClassGenerator + * @return self */ public function setContainingFileGenerator(FileGenerator $fileGenerator) { @@ -322,7 +322,7 @@ public function getContainingFileGenerator() /** * @param DocBlockGenerator $docBlock - * @return ClassGenerator + * @return self */ public function setDocBlock(DocBlockGenerator $docBlock) { @@ -340,7 +340,7 @@ public function getDocBlock() /** * @param array|string $flags - * @return ClassGenerator + * @return self */ public function setFlags($flags) { @@ -359,7 +359,7 @@ public function setFlags($flags) /** * @param string $flag - * @return ClassGenerator + * @return self */ public function addFlag($flag) { @@ -369,7 +369,7 @@ public function addFlag($flag) /** * @param string $flag - * @return ClassGenerator + * @return self */ public function removeFlag($flag) { @@ -379,7 +379,7 @@ public function removeFlag($flag) /** * @param bool $isAbstract - * @return ClassGenerator + * @return self */ public function setAbstract($isAbstract) { @@ -396,7 +396,7 @@ public function isAbstract() /** * @param bool $isFinal - * @return ClassGenerator + * @return self */ public function setFinal($isFinal) { @@ -413,7 +413,7 @@ public function isFinal() /** * @param string $extendedClass - * @return ClassGenerator + * @return self */ public function setExtendedClass($extendedClass) { @@ -430,7 +430,7 @@ public function getExtendedClass() } /** - * @return boolean + * @return bool */ public function hasExtentedClass() { @@ -438,7 +438,7 @@ public function hasExtentedClass() } /** - * @return ClassGenerator + * @return self */ public function removeExtentedClass() { @@ -448,7 +448,7 @@ public function removeExtentedClass() /** * @param array $implementedInterfaces - * @return ClassGenerator + * @return self */ public function setImplementedInterfaces(array $implementedInterfaces) { @@ -475,7 +475,7 @@ public function hasImplementedInterface($implementedInterface) /** * @param $implementedInterface - * @return ClassGenerator + * @return self */ public function removeImplementedInterface($implementedInterface) { @@ -508,7 +508,7 @@ public function getConstants() /** * @param string $constantName - * @return ClassGenerator + * @return self */ public function removeConstant($constantName) { @@ -532,7 +532,7 @@ public function hasConstant($constantName) * * @param PropertyGenerator $constant * @throws Exception\InvalidArgumentException - * @return ClassGenerator + * @return self */ public function addConstantFromGenerator(PropertyGenerator $constant) { @@ -565,7 +565,7 @@ public function addConstantFromGenerator(PropertyGenerator $constant) * * @throws Exception\InvalidArgumentException * - * @return ClassGenerator + * @return self */ public function addConstant($name, $value) { @@ -586,7 +586,7 @@ public function addConstant($name, $value) /** * @param PropertyGenerator[]|array[] $constants * - * @return ClassGenerator + * @return self */ public function addConstants(array $constants) { @@ -605,7 +605,7 @@ public function addConstants(array $constants) /** * @param array $properties - * @return ClassGenerator + * @return self */ public function addProperties(array $properties) { @@ -631,7 +631,7 @@ public function addProperties(array $properties) * @param string|array $defaultValue * @param int $flags * @throws Exception\InvalidArgumentException - * @return ClassGenerator + * @return self */ public function addProperty($name, $defaultValue = null, $flags = PropertyGenerator::FLAG_PUBLIC) { @@ -657,7 +657,7 @@ public function addProperty($name, $defaultValue = null, $flags = PropertyGenera * * @param PropertyGenerator $property * @throws Exception\InvalidArgumentException - * @return ClassGenerator + * @return self */ public function addPropertyFromGenerator(PropertyGenerator $property) { @@ -708,7 +708,7 @@ public function getProperty($propertyName) * * @param string $use * @param string|null $useAlias - * @return ClassGenerator + * @return self */ public function addUse($use, $useAlias = null) { @@ -718,7 +718,7 @@ public function addUse($use, $useAlias = null) /** * @param string $use - * @return ClassGenerator + * @return self */ public function hasUse($use) { @@ -727,7 +727,7 @@ public function hasUse($use) /** * @param string $use - * @return ClassGenerator + * @return self */ public function removeUse($use) { @@ -746,7 +746,7 @@ public function hasUseAlias($use) /** * @param $use - * @return ClassGenerator + * @return self */ public function removeUseAlias($use) { @@ -767,7 +767,7 @@ public function getUses() /** * @param string $propertyName - * @return ClassGenerator + * @return self */ public function removeProperty($propertyName) { @@ -788,7 +788,7 @@ public function hasProperty($propertyName) /** * @param array $methods - * @return ClassGenerator + * @return self */ public function addMethods(array $methods) { @@ -816,7 +816,7 @@ public function addMethods(array $methods) * @param string $body * @param string $docBlock * @throws Exception\InvalidArgumentException - * @return ClassGenerator + * @return self */ public function addMethod( $name = null, @@ -841,7 +841,7 @@ public function addMethod( * * @param MethodGenerator $method * @throws Exception\InvalidArgumentException - * @return ClassGenerator + * @return self */ public function addMethodFromGenerator(MethodGenerator $method) { @@ -877,7 +877,7 @@ public function getMethod($methodName) /** * @param string $methodName - * @return ClassGenerator + * @return self */ public function removeMethod($methodName) { From 3e74da84081a8d504a41fdfa308d8a75ff5d6ded Mon Sep 17 00:00:00 2001 From: Bas Kamer Date: Mon, 25 Jan 2016 13:08:47 +0100 Subject: [PATCH 19/21] Can always directly unset(), no check needed --- src/Generator/ClassGenerator.php | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/src/Generator/ClassGenerator.php b/src/Generator/ClassGenerator.php index acb7a19e..6c81263a 100644 --- a/src/Generator/ClassGenerator.php +++ b/src/Generator/ClassGenerator.php @@ -479,9 +479,7 @@ public function hasImplementedInterface($implementedInterface) */ public function removeImplementedInterface($implementedInterface) { - if ($this->hasImplementedInterface($implementedInterface)) { - unset($this->implementedInterfaces[array_search($implementedInterface, $this->implementedInterfaces)]); - } + unset($this->implementedInterfaces[array_search($implementedInterface, $this->implementedInterfaces)]); return $this; } @@ -512,9 +510,8 @@ public function getConstants() */ public function removeConstant($constantName) { - if ($this->hasConstant($constantName)) { - unset($this->constants[$constantName]); - } + unset($this->constants[$constantName]); + return $this; } @@ -771,9 +768,8 @@ public function getUses() */ public function removeProperty($propertyName) { - if ($this->hasProperty($propertyName)) { - unset($this->properties[$propertyName]); - } + unset($this->properties[$propertyName]); + return $this; } @@ -881,9 +877,7 @@ public function getMethod($methodName) */ public function removeMethod($methodName) { - if ($this->hasMethod($methodName)) { - unset($this->methods[strtolower($methodName)]); - } + unset($this->methods[strtolower($methodName)]); return $this; } From 00d9fbec8d9d88a2d1d217dd77b1dbcc2dd525c2 Mon Sep 17 00:00:00 2001 From: Bas Kamer Date: Mon, 25 Jan 2016 15:33:29 +0100 Subject: [PATCH 20/21] I would also check against \\ strings... --- src/Generator/ClassGenerator.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/Generator/ClassGenerator.php b/src/Generator/ClassGenerator.php index 6c81263a..4ed30f7c 100644 --- a/src/Generator/ClassGenerator.php +++ b/src/Generator/ClassGenerator.php @@ -452,6 +452,10 @@ public function removeExtentedClass() */ public function setImplementedInterfaces(array $implementedInterfaces) { + array_map(function($implementedInterface) { + return (string) TypeGenerator::fromTypeString($implementedInterface); + }, $implementedInterfaces); + $this->implementedInterfaces = $implementedInterfaces; return $this; } @@ -470,6 +474,7 @@ public function getImplementedInterfaces() */ public function hasImplementedInterface($implementedInterface) { + $implementedInterface = (string) TypeGenerator::fromTypeString($implementedInterface); return in_array($implementedInterface, $this->implementedInterfaces); } @@ -479,6 +484,7 @@ public function hasImplementedInterface($implementedInterface) */ public function removeImplementedInterface($implementedInterface) { + $implementedInterface = (string) TypeGenerator::fromTypeString($implementedInterface); unset($this->implementedInterfaces[array_search($implementedInterface, $this->implementedInterfaces)]); return $this; } From 801e093361a53fb242f3c7442d07852b3df21c29 Mon Sep 17 00:00:00 2001 From: Bas Kamer Date: Thu, 4 Feb 2016 16:16:30 +0100 Subject: [PATCH 21/21] cs --- src/Generator/ClassGenerator.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Generator/ClassGenerator.php b/src/Generator/ClassGenerator.php index 4ed30f7c..2b032129 100644 --- a/src/Generator/ClassGenerator.php +++ b/src/Generator/ClassGenerator.php @@ -452,7 +452,7 @@ public function removeExtentedClass() */ public function setImplementedInterfaces(array $implementedInterfaces) { - array_map(function($implementedInterface) { + array_map(function ($implementedInterface) { return (string) TypeGenerator::fromTypeString($implementedInterface); }, $implementedInterfaces);