Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 30 |
CRAP | |
0.00% |
0 / 363 |
ClassConfig\ClassGenerator | |
0.00% |
0 / 1 |
|
0.00% |
0 / 30 |
1892 | |
0.00% |
0 / 363 |
camelCase | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
getTypeHint | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 5 |
|||
getCommentTypeHint | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 8 |
|||
getCanonicalClassName | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
__construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
__toString | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 19 |
|||
generateProperty | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 6 |
|||
generateGet | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 12 |
|||
generateSet | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 12 |
|||
generateIsset | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 8 |
|||
generateUnset | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 9 |
|||
generateListSet | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 15 |
|||
generateListGetAt | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 15 |
|||
generateListSetAt | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 20 |
|||
generateListPush | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 15 |
|||
generateListUnshift | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 15 |
|||
generateMapSet | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 15 |
|||
generateMapGetAt | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 14 |
|||
generateMapSetAt | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 16 |
|||
generateArrayPop | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 12 |
|||
generateArrayShift | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 12 |
|||
generateArrayClear | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 9 |
|||
generateConfigGet | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 12 |
|||
generateConfigSet | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 9 |
|||
generateConfigIsset | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 9 |
|||
generateConfigUnset | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 9 |
|||
generateMagicGet | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 20 |
|||
generateMagicSet | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 22 |
|||
generateMagicIsset | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 20 |
|||
generateMagicUnset | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 20 |
<?php | |
namespace ClassConfig; | |
use ClassConfig\Annotation\Config; | |
use Nette\InvalidArgumentException; | |
use Nette\PhpGenerator\ClassType; | |
use Nette\PhpGenerator\PhpNamespace; | |
use Nette\PhpGenerator\Property; | |
/** | |
* Class ClassGenerator | |
* @package ClassConfig | |
*/ | |
class ClassGenerator | |
{ | |
/** | |
* @var ClassType | |
*/ | |
protected $class; | |
/** | |
* @var string | |
*/ | |
protected $ownerCanonicalClassName; | |
/** | |
* @param string $value | |
* @return string | |
*/ | |
protected static function camelCase(string $value): string | |
{ | |
return lcfirst(str_replace(' ', '', ucwords(str_replace('_', ' ', $value)))); | |
} | |
/** | |
* @param string $type | |
* @return string | |
*/ | |
protected function getTypeHint(string $type) | |
{ | |
if ('[]' === substr($type, -2)) { | |
return 'array'; | |
} | |
if ('mixed' === $type) { | |
return ''; | |
} | |
return $type; | |
} | |
/** | |
* @param string $type | |
* @return string | |
*/ | |
protected function getCommentTypeHint(string $type) | |
{ | |
if (preg_match('/^(.+?)((?:\[\])+)$/', $type, $match)) { | |
$type = $match[1]; | |
$brackets = $match[2]; | |
} else { | |
$brackets = ''; | |
} | |
if (!in_array($type, ['string', 'int', 'float', 'bool', 'mixed'], true)) { | |
$this->class->getNamespace()->addUse($type); | |
return $this->class->getNamespace()->unresolveName($type) . $brackets; | |
} | |
return $type . $brackets; | |
} | |
/** | |
* @return string | |
*/ | |
protected function getCanonicalClassName(): string | |
{ | |
return $this->class->getNamespace()->getName() . '\\' . $this->class->getName(); | |
} | |
/** | |
* ClassGenerator constructor. | |
* | |
* @param Config $annotation | |
* @param string $className | |
* @param string $classNamespace | |
* @param string $ownerCanonicalClassName | |
*/ | |
public function __construct( | |
Config $annotation, | |
string $className, | |
string $classNamespace, | |
string $ownerCanonicalClassName | |
) { | |
$this->class = (new PhpNamespace($classNamespace))->addClass($className); | |
$this->ownerCanonicalClassName = $ownerCanonicalClassName; | |
} | |
/** | |
* @inheritDoc | |
*/ | |
public function __toString() | |
{ | |
$this->class | |
->getNamespace() | |
->addUse(AbstractConfig::class); | |
$this->class | |
->setFinal(true) | |
->addExtend(AbstractConfig::class) | |
->addComment( | |
'THIS IS AN AUTOMATICALLY GENERATED FILE, PLEASE DO NOT MODIFY IT.' . PHP_EOL . | |
'YOU MAY SAFELY DELETE THE FILE AS IT WILL BE REGENERATED ON-DEMAND.' | |
); | |
$this->class | |
->addMethod('end') | |
->addComment( | |
'@return ' . $this->getCommentTypeHint($this->ownerCanonicalClassName) | |
)->setReturnType($this->getTypeHint($this->ownerCanonicalClassName)) | |
->setBody( | |
'/** @var ' . $this->getCommentTypeHint($this->ownerCanonicalClassName) . ' $owner */' . PHP_EOL . | |
'$owner = $this->___owner;' . PHP_EOL . | |
'return $owner;' | |
); | |
return '<?php' . PHP_EOL . PHP_EOL . (string) $this->class->getNamespace(); | |
} | |
/** | |
* @param string $name | |
* @param string $type | |
* @param null $default | |
* @return ClassGenerator | |
*/ | |
public function generateProperty(string $name, string $type, $default = null): ClassGenerator | |
{ | |
$this->class | |
->addProperty('__' . $name . '__', [null, $default]) | |
->addComment( | |
'@var ' . $this->getCommentTypeHint($type . '[]') | |
)->setVisibility('private'); | |
return $this; | |
} | |
/** | |
* @param string $name | |
* @param string $type | |
* @return ClassGenerator | |
*/ | |
public function generateGet(string $name, string $type): ClassGenerator | |
{ | |
$this->class | |
->addMethod(static::camelCase('get_' . $name)) | |
->addComment( | |
'@return null|' . $this->getCommentTypeHint($type) | |
)->setReturnType($this->getTypeHint($type)) | |
->setReturnNullable(true) | |
->setBody( | |
'if (isset($this->__' . $name . '__[0])) {' . PHP_EOL . | |
' return $this->__' . $name . '__[0];' . PHP_EOL . | |
'}' . PHP_EOL . | |
'return $this->__' . $name . '__[1];' | |
); | |
return $this; | |
} | |
/** | |
* @param string $name | |
* @param string $type | |
* @return ClassGenerator | |
*/ | |
public function generateSet(string $name, string $type): ClassGenerator | |
{ | |
$this->class | |
->addMethod(static::camelCase('set_' . $name)) | |
->addComment( | |
'@param ' . $this->getCommentTypeHint($type) . ' $value' . PHP_EOL . | |
'@return ' . $this->class->getName() | |
)->setReturnType($this->getCanonicalClassName()) | |
->setBody( | |
'$this->__' . $name . '__[0] = $value;' . PHP_EOL . | |
'return $this;' | |
)->addParameter('value') | |
->setTypeHint($this->getTypeHint($type)); | |
return $this; | |
} | |
/** | |
* @param string $name | |
* @return ClassGenerator | |
*/ | |
public function generateIsset(string $name): ClassGenerator | |
{ | |
$this->class | |
->addMethod(static::camelCase('isset_' . $name)) | |
->addComment( | |
'@return bool' | |
)->setReturnType('bool') | |
->setBody( | |
'return isset($this->__' . $name . '__[0]);' | |
); | |
return $this; | |
} | |
/** | |
* @param string $name | |
* @return ClassGenerator | |
*/ | |
public function generateUnset(string $name): ClassGenerator | |
{ | |
$this->class | |
->addMethod(static::camelCase('unset_' . $name)) | |
->addComment( | |
'@return ' . $this->class->getName() | |
)->setReturnType($this->getCanonicalClassName()) | |
->setBody( | |
'unset($this->__' . $name . '__[0]);' . PHP_EOL . | |
'return $this;' | |
); | |
return $this; | |
} | |
/** | |
* @param string $name | |
* @param string $type | |
* @return ClassGenerator | |
*/ | |
public function generateListSet(string $name, string $type): ClassGenerator | |
{ | |
$this->class | |
->addMethod(static::camelCase('set_' . $name)) | |
->addComment( | |
'@param ' . $this->getCommentTypeHint($type) . ' $values' . PHP_EOL . | |
'@return ' . $this->class->getName() | |
)->setReturnType($this->getCanonicalClassName()) | |
->setBody( | |
'$this->' . static::camelCase('clear_' . $name) . '();' . PHP_EOL . | |
'foreach ($values as $value) {' . PHP_EOL . | |
' $this->' . static::camelCase('push_' . $name) . '($value);' . PHP_EOL . | |
'}' . PHP_EOL . | |
'return $this;' | |
)->addParameter('values') | |
->setTypeHint($this->getTypeHint($type)); | |
return $this; | |
} | |
/** | |
* @param string $name | |
* @param string $type | |
* @return ClassGenerator | |
*/ | |
public function generateListGetAt(string $name, string $type): ClassGenerator | |
{ | |
$this->class | |
->addMethod(static::camelCase('get_' . $name . '_at')) | |
->addComment( | |
'@param int $index' . PHP_EOL . | |
'@return ' . $this->getCommentTypeHint($type) | |
)->setReturnType($this->getTypeHint($type)) | |
->setReturnNullable(true) | |
->setBody( | |
'if (isset($this->__' . $name . '__[0]) && array_key_exists($index, $this->__' . $name . '__[0])) {' . | |
PHP_EOL . ' return $this->__' . $name . '__[0][$index];' . PHP_EOL . | |
'}' . PHP_EOL . | |
'return null;' | |
)->addParameter('index') | |
->setTypeHint('int'); | |
return $this; | |
} | |
/** | |
* @param string $name | |
* @param string $type | |
* @return ClassGenerator | |
*/ | |
public function generateListSetAt(string $name, string $type): ClassGenerator | |
{ | |
$method = $this->class | |
->addMethod(static::camelCase('set_' . $name . '_at')) | |
->addComment( | |
'@param int $index' . PHP_EOL . | |
'@param ' . $this->getCommentTypeHint($type) . ' $value' . PHP_EOL . | |
'@return ' . $this->class->getName() | |
)->setReturnType($this->getCanonicalClassName()) | |
->setBody( | |
'if (0 > $index || (0 < $index && (!isset($this->__' . $name . '__[0]) ||' . PHP_EOL . | |
' empty($this->__' . $name . '__[0])) || $index > count($this->__' . $name . '__[0]))) {' . PHP_EOL . | |
' return $this;' . PHP_EOL . | |
'}' . PHP_EOL . PHP_EOL . | |
'if (!isset($this->__' . $name . '__[0])) {' . PHP_EOL . | |
' $this->__' . $name . '__[0] = [];' . PHP_EOL . | |
'}' . PHP_EOL . PHP_EOL . | |
'$this->__' . $name . '__[0][$index] = $value;' . PHP_EOL . | |
'return $this;' | |
); | |
$method->addParameter('index')->setTypeHint('int'); | |
$method->addParameter('value')->setTypeHint($this->getTypeHint($type)); | |
return $this; | |
} | |
/** | |
* @param string $name | |
* @param string $type | |
* @return ClassGenerator | |
*/ | |
public function generateListPush(string $name, string $type): ClassGenerator | |
{ | |
$this->class | |
->addMethod(static::camelCase('push_' . $name)) | |
->addComment( | |
'@param ' . $this->getCommentTypeHint($type) . ' $value' . PHP_EOL . | |
'@return ' . $this->class->getName() | |
)->setReturnType($this->getCanonicalClassName()) | |
->setBody( | |
'if (!isset($this->__' . $name . '__[0])) {' . PHP_EOL . | |
' $this->__' . $name . '__[0] = [];' . PHP_EOL . | |
'}' . PHP_EOL . | |
'array_push($this->__' . $name . '__[0], $value);' . PHP_EOL . | |
'return $this;' | |
)->addParameter('value') | |
->setTypeHint($this->getTypeHint($type)); | |
return $this; | |
} | |
/** | |
* @param string $name | |
* @param string $type | |
* @return ClassGenerator | |
*/ | |
public function generateListUnshift(string $name, string $type): ClassGenerator | |
{ | |
$this->class | |
->addMethod(static::camelCase('unshift_' . $name)) | |
->addComment( | |
'@param ' . $this->getCommentTypeHint($type) . ' $value' . PHP_EOL . | |
'@return ' . $this->class->getName() | |
)->setReturnType($this->getCanonicalClassName()) | |
->setBody( | |
'if (!isset($this->__' . $name . '__[0])) {' . PHP_EOL . | |
' $this->__' . $name . '__[0] = [];' . PHP_EOL . | |
'}' . PHP_EOL . | |
'array_unshift($this->__' . $name . '__[0], $value);' . PHP_EOL . | |
'return $this;' | |
)->addParameter('value') | |
->setTypeHint($this->getTypeHint($type)); | |
return $this; | |
} | |
/** | |
* @param string $name | |
* @param string $type | |
* @return ClassGenerator | |
*/ | |
public function generateMapSet(string $name, string $type): ClassGenerator | |
{ | |
$this->class | |
->addMethod(static::camelCase('set_' . $name)) | |
->addComment( | |
'@param ' . $this->getCommentTypeHint($type) . ' $values' . PHP_EOL . | |
'@return ' . $this->class->getName() | |
)->setReturnType($this->getCanonicalClassName()) | |
->setBody( | |
'$this->' . static::camelCase('clear_' . $name) . '();' . PHP_EOL . | |
'foreach ($values as $key => $value) {' . PHP_EOL . | |
' $this->' . static::camelCase('set_' . $name . '_at') . '($key, $value);' . PHP_EOL . | |
'}' . PHP_EOL . | |
'return $this;' | |
)->addParameter('values') | |
->setTypeHint($this->getTypeHint($type)); | |
return $this; | |
} | |
/** | |
* @param string $name | |
* @param string $type | |
* @return ClassGenerator | |
*/ | |
public function generateMapGetAt(string $name, string $type): ClassGenerator | |
{ | |
$this->class | |
->addMethod(static::camelCase('get_' . $name . '_at')) | |
->addComment( | |
'@param mixed $key' . PHP_EOL . | |
'@return ' . $this->getCommentTypeHint($type) | |
)->setReturnType($this->getTypeHint($type)) | |
->setReturnNullable(true) | |
->setBody( | |
'if (isset($this->__' . $name . '__[0]) && array_key_exists($key, $this->__' . $name . '__[0])) {' . | |
PHP_EOL . ' return $this->__' . $name . '__[0][$key];' . PHP_EOL . | |
'}' . PHP_EOL . | |
'return null;' | |
)->addParameter('key'); | |
return $this; | |
} | |
/** | |
* @param string $name | |
* @param string $type | |
* @return ClassGenerator | |
*/ | |
public function generateMapSetAt(string $name, string $type): ClassGenerator | |
{ | |
$method = $this->class | |
->addMethod(static::camelCase('set_' . $name . '_at')) | |
->addComment( | |
'@param mixed $key' . PHP_EOL . | |
'@param ' . $this->getCommentTypeHint($type) . ' $value' . PHP_EOL . | |
'@return ' . $this->class->getName() | |
)->setReturnType($this->getCanonicalClassName()) | |
->setBody( | |
'if (!isset($this->__' . $name . '__[0])) {' . PHP_EOL . | |
' $this->__' . $name . '__[0] = [];' . PHP_EOL . | |
'}' . PHP_EOL . PHP_EOL . | |
'$this->__' . $name . '__[0][$key] = $value;' . PHP_EOL . | |
'return $this;' | |
); | |
$method->addParameter('key'); | |
$method->addParameter('value')->setTypeHint($this->getTypeHint($type)); | |
return $this; | |
} | |
/** | |
* @param string $name | |
* @param string $type | |
* @return ClassGenerator | |
*/ | |
public function generateArrayPop(string $name, string $type): ClassGenerator | |
{ | |
$this->class | |
->addMethod(static::camelCase('pop_' . $name)) | |
->addComment( | |
'@return null|' . $this->getCommentTypeHint($type) | |
)->setReturnType($this->getTypeHint($type)) | |
->setReturnNullable(true) | |
->setBody( | |
'if (!isset($this->__' . $name . '__[0])) {' . PHP_EOL . | |
' return null;' . PHP_EOL . | |
'}' . PHP_EOL . | |
'return array_pop($this->__' . $name . '__[0]);' | |
); | |
return $this; | |
} | |
/** | |
* @param string $name | |
* @param string $type | |
* @return ClassGenerator | |
*/ | |
public function generateArrayShift(string $name, string $type): ClassGenerator | |
{ | |
$this->class | |
->addMethod(static::camelCase('shift_' . $name)) | |
->addComment( | |
'@return null|' . $this->getCommentTypeHint($type) | |
)->setReturnType($this->getTypeHint($type)) | |
->setReturnNullable(true) | |
->setBody( | |
'if (!isset($this->__' . $name . '__[0])) {' . PHP_EOL . | |
' return null;' . PHP_EOL . | |
'}' . PHP_EOL . | |
'return array_shift($this->__' . $name . '__[0]);' | |
); | |
return $this; | |
} | |
/** | |
* @param string $name | |
* @return ClassGenerator | |
*/ | |
public function generateArrayClear(string $name): ClassGenerator | |
{ | |
$this->class | |
->addMethod(static::camelCase('clear_' . $name)) | |
->addComment( | |
'@return ' . $this->class->getName() | |
)->setReturnType($this->getCanonicalClassName()) | |
->setBody( | |
'unset($this->__' . $name . '__[0]);' . PHP_EOL . | |
'return $this;' | |
); | |
return $this; | |
} | |
/** | |
* @param string $name | |
* @param string $type | |
* @return ClassGenerator | |
*/ | |
public function generateConfigGet(string $name, string $type): ClassGenerator | |
{ | |
$this->class | |
->addMethod(static::camelCase('get_' . $name)) | |
->addComment( | |
'@return null|' . $this->getCommentTypeHint($type) | |
)->setReturnType($this->getTypeHint($type)) | |
->setBody( | |
'if (!isset($this->__' . $name . '__[0])) {' . PHP_EOL . | |
' $this->__' . $name . '__[0] = new ' . $this->getCommentTypeHint($type) . | |
'($this->___owner, $this, \'' . $name . '\');' . PHP_EOL . | |
'}' . PHP_EOL . | |
'return $this->__' . $name . '__[0];' | |
); | |
return $this; | |
} | |
/** | |
* @param string $name | |
* @return ClassGenerator | |
*/ | |
public function generateConfigSet(string $name): ClassGenerator | |
{ | |
$this->class | |
->addMethod(static::camelCase('set_' . $name)) | |
->addComment( | |
'@return ' . $this->class->getName() | |
)->setReturnType($this->getCanonicalClassName()) | |
->setBody( | |
'// config is immutable' . PHP_EOL . | |
'return $this;' | |
); | |
return $this; | |
} | |
/** | |
* @param string $name | |
* @return ClassGenerator | |
*/ | |
public function generateConfigIsset(string $name): ClassGenerator | |
{ | |
$this->class | |
->addMethod(static::camelCase('isset_' . $name)) | |
->addComment( | |
'@return bool' | |
)->setReturnType('bool') | |
->setBody( | |
'// config is immutable' . PHP_EOL . | |
'return true;' | |
); | |
return $this; | |
} | |
/** | |
* @param string $name | |
* @return ClassGenerator | |
*/ | |
public function generateConfigUnset(string $name): ClassGenerator | |
{ | |
$this->class | |
->addMethod(static::camelCase('unset_' . $name)) | |
->addComment( | |
'@return ' . $this->class->getName() | |
)->setReturnType($this->getCanonicalClassName()) | |
->setBody( | |
'// config is immutable' . PHP_EOL . | |
'return $this;' | |
); | |
return $this; | |
} | |
/** | |
* @return ClassGenerator | |
*/ | |
public function generateMagicGet(): ClassGenerator | |
{ | |
$cases = ''; | |
/** @var Property $property */ | |
foreach ($this->class->getProperties() as $property) { | |
$getter = static::camelCase('get_' . $property->getName()); | |
try { | |
$this->class->getMethod($getter); | |
} catch (InvalidArgumentException $e) { | |
continue; | |
} | |
$cases .= | |
' case \'' . substr($property->getName(), 2, -2) . '\':' . PHP_EOL . | |
' return $this->' . $getter . '();' . PHP_EOL . PHP_EOL; | |
} | |
$this->class | |
->addMethod('__get') | |
->addComment( | |
'@inheritDoc' | |
)->setBody( | |
'switch ($name) {' . PHP_EOL . | |
$cases . | |
' default:' . PHP_EOL . | |
' return null;' . PHP_EOL . | |
'}' | |
)->addParameter('name'); | |
return $this; | |
} | |
/** | |
* @return ClassGenerator | |
*/ | |
public function generateMagicSet(): ClassGenerator | |
{ | |
$cases = ''; | |
/** @var Property $property */ | |
foreach ($this->class->getProperties() as $property) { | |
$setter = static::camelCase('set_' . $property->getName()); | |
try { | |
$setterMethod = $this->class->getMethod($setter); | |
} catch (InvalidArgumentException $e) { | |
continue; | |
} | |
$cases .= | |
' case \'' . substr($property->getName(), 2, -2) . '\':' . PHP_EOL . | |
' return $this->' . $setter . '(' . (0 < count($setterMethod->getParameters()) ? '$value' : '') . | |
');' . PHP_EOL . PHP_EOL; | |
} | |
$method = $this->class | |
->addMethod('__set') | |
->addComment( | |
'@inheritDoc' | |
)->setBody( | |
'switch ($name) {' . PHP_EOL . | |
$cases . | |
' default:' . PHP_EOL . | |
' return null;' . PHP_EOL . | |
'}' | |
); | |
$method->addParameter('name'); | |
$method->addParameter('value'); | |
return $this; | |
} | |
/** | |
* @return ClassGenerator | |
*/ | |
public function generateMagicIsset(): ClassGenerator | |
{ | |
$cases = ''; | |
/** @var Property $property */ | |
foreach ($this->class->getProperties() as $property) { | |
$isset = static::camelCase('isset_' . $property->getName()); | |
try { | |
$this->class->getMethod($isset); | |
} catch (InvalidArgumentException $e) { | |
continue; | |
} | |
$cases .= | |
' case \'' . substr($property->getName(), 2, -2) . '\':' . PHP_EOL . | |
' return $this->' . $isset . '();' . PHP_EOL . PHP_EOL; | |
} | |
$this->class | |
->addMethod('__isset') | |
->addComment( | |
'@inheritDoc' | |
)->setBody( | |
'switch ($name) {' . PHP_EOL . | |
$cases . | |
' default:' . PHP_EOL . | |
' return false;' . PHP_EOL . | |
'}' | |
)->addParameter('name'); | |
return $this; | |
} | |
/** | |
* @return ClassGenerator | |
*/ | |
public function generateMagicUnset(): ClassGenerator | |
{ | |
$cases = ''; | |
/** @var Property $property */ | |
foreach ($this->class->getProperties() as $property) { | |
$unset = static::camelCase('unset_' . $property->getName()); | |
try { | |
$this->class->getMethod($unset); | |
} catch (InvalidArgumentException $e) { | |
continue; | |
} | |
$cases .= | |
' case \'' . substr($property->getName(), 2, -2) . '\':' . PHP_EOL . | |
' return $this->' . $unset . '();' . PHP_EOL . PHP_EOL; | |
} | |
$this->class | |
->addMethod('__unset') | |
->addComment( | |
'@inheritDoc' | |
)->setBody( | |
'switch ($name) {' . PHP_EOL . | |
$cases . | |
' default:' . PHP_EOL . | |
' return $this;' . PHP_EOL . | |
'}' | |
)->addParameter('name'); | |
return $this; | |
} | |
} |