* @license MIT */ class StaticProxyConstructor extends MethodGenerator { /** * Static constructor * * @param PropertyGenerator $initializerProperty * @param Properties $properties * * @throws \Zend\Code\Generator\Exception\InvalidArgumentException */ public function __construct(PropertyGenerator $initializerProperty, Properties $properties) { parent::__construct('staticProxyConstructor', [], static::FLAG_PUBLIC | static::FLAG_STATIC); $this->setParameter(new ParameterGenerator('initializer')); $this->setDocBlock("Constructor for lazy initialization\n\n@param \\Closure|null \$initializer"); $this->setBody( 'static $reflection;' . "\n\n" . '$reflection = $reflection ?? $reflection = new \ReflectionClass(__CLASS__);' . "\n" . '$instance = $reflection->newInstanceWithoutConstructor();' . "\n\n" . UnsetPropertiesGenerator::generateSnippet($properties, 'instance') . '$instance->' . $initializerProperty->getName() . ' = $initializer;' . "\n\n" . 'return $instance;' ); } }