123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Framework\Code\Generator;
- use Zend\Code\Generator\MethodGenerator;
- use Zend\Code\Generator\PropertyGenerator;
- class ClassGenerator extends \Zend\Code\Generator\ClassGenerator implements
- \Magento\Framework\Code\Generator\CodeGeneratorInterface
- {
- /**
- * Possible doc block options
- *
- * @var array
- */
- protected $_docBlockOptions = [
- 'shortDescription' => 'setShortDescription',
- 'longDescription' => 'setLongDescription',
- 'tags' => 'setTags',
- ];
- /**
- * Possible class property options
- *
- * @var array
- */
- protected $_propertyOptions = [
- 'name' => 'setName',
- 'const' => 'setConst',
- 'static' => 'setStatic',
- 'visibility' => 'setVisibility',
- 'defaultValue' => 'setDefaultValue',
- ];
- /**
- * Possible class method options
- *
- * @var array
- */
- protected $_methodOptions = [
- 'name' => 'setName',
- 'final' => 'setFinal',
- 'static' => 'setStatic',
- 'abstract' => 'setAbstract',
- 'visibility' => 'setVisibility',
- 'body' => 'setBody',
- 'returntype' => 'setReturnType'
- ];
- /**
- * Possible method parameter options
- *
- * @var array
- */
- protected $_parameterOptions = [
- 'name' => 'setName',
- 'type' => 'setType',
- 'defaultValue' => 'setDefaultValue',
- 'passedByReference' => 'setPassedByReference',
- 'variadic' => 'setVariadic',
- ];
- /**
- * @param object $object
- * @param array $data
- * @param array $map
- * @return void
- */
- protected function _setDataToObject($object, array $data, array $map)
- {
- foreach ($map as $arrayKey => $setterName) {
- if (isset($data[$arrayKey])) {
- $object->{$setterName}($data[$arrayKey]);
- }
- }
- }
- /**
- * Set class dock block
- *
- * @param array $docBlock
- * @return $this
- */
- public function setClassDocBlock(array $docBlock)
- {
- $docBlockObject = new \Zend\Code\Generator\DocBlockGenerator();
- $docBlockObject->setWordWrap(false);
- $this->_setDataToObject($docBlockObject, $docBlock, $this->_docBlockOptions);
- return parent::setDocBlock($docBlockObject);
- }
- /**
- * addMethods()
- *
- * @param array $methods
- * @return $this
- */
- public function addMethods(array $methods)
- {
- foreach ($methods as $methodOptions) {
- $methodObject = $this->createMethodGenerator();
- $this->_setDataToObject($methodObject, $methodOptions, $this->_methodOptions);
- if (isset(
- $methodOptions['parameters']
- ) && is_array(
- $methodOptions['parameters']
- ) && count(
- $methodOptions['parameters']
- ) > 0
- ) {
- $parametersArray = [];
- foreach ($methodOptions['parameters'] as $parameterOptions) {
- $parameterObject = new \Zend\Code\Generator\ParameterGenerator();
- $this->_setDataToObject($parameterObject, $parameterOptions, $this->_parameterOptions);
- $parametersArray[] = $parameterObject;
- }
- $methodObject->setParameters($parametersArray);
- }
- if (isset($methodOptions['docblock']) && is_array($methodOptions['docblock'])) {
- $docBlockObject = new \Zend\Code\Generator\DocBlockGenerator();
- $docBlockObject->setWordWrap(false);
- $this->_setDataToObject($docBlockObject, $methodOptions['docblock'], $this->_docBlockOptions);
- $methodObject->setDocBlock($docBlockObject);
- }
- if (!empty($methodOptions['returnType'])) {
- $methodObject->setReturnType($methodOptions['returnType']);
- }
- $this->addMethodFromGenerator($methodObject);
- }
- return $this;
- }
- /**
- * Add method from MethodGenerator
- *
- * @param MethodGenerator $method
- * @return $this
- * @throws \InvalidArgumentException
- */
- public function addMethodFromGenerator(MethodGenerator $method)
- {
- if (!is_string($method->getName())) {
- throw new \InvalidArgumentException('addMethodFromGenerator() expects string for name');
- }
- return parent::addMethodFromGenerator($method);
- }
- /**
- * addProperties()
- *
- * @param array $properties
- * @return $this
- * @throws \InvalidArgumentException
- */
- public function addProperties(array $properties)
- {
- foreach ($properties as $propertyOptions) {
- $propertyObject = new PropertyGenerator();
- $this->_setDataToObject($propertyObject, $propertyOptions, $this->_propertyOptions);
- if (isset($propertyOptions['docblock'])) {
- $docBlock = $propertyOptions['docblock'];
- if (is_array($docBlock)) {
- $docBlockObject = new \Zend\Code\Generator\DocBlockGenerator();
- $docBlockObject->setWordWrap(false);
- $this->_setDataToObject($docBlockObject, $docBlock, $this->_docBlockOptions);
- $propertyObject->setDocBlock($docBlockObject);
- }
- }
- $this->addPropertyFromGenerator($propertyObject);
- }
- return $this;
- }
- /**
- * Add property from PropertyGenerator
- *
- * @param PropertyGenerator $property
- * @return $this
- * @throws \InvalidArgumentException
- */
- public function addPropertyFromGenerator(PropertyGenerator $property)
- {
- if (!is_string($property->getName())) {
- throw new \InvalidArgumentException('addPropertyFromGenerator() expects string for name');
- }
- return parent::addPropertyFromGenerator($property);
- }
- /**
- * Instantiate method generator object.
- *
- * @return MethodGenerator
- */
- protected function createMethodGenerator()
- {
- return new MethodGenerator();
- }
- /**
- * @return string|null
- */
- public function getNamespaceName()
- {
- return ltrim(parent::getNamespaceName(), '\\') ?: null;
- }
- }
|