* @license MIT */ class LazyLoadingMethodInterceptor extends MethodGenerator { /** * @param \Zend\Code\Reflection\MethodReflection $originalMethod * @param \Zend\Code\Generator\PropertyGenerator $initializerProperty * @param \Zend\Code\Generator\PropertyGenerator $valueHolderProperty * * @return LazyLoadingMethodInterceptor|static */ public static function generateMethod( MethodReflection $originalMethod, PropertyGenerator $initializerProperty, PropertyGenerator $valueHolderProperty ) { /* @var $method self */ $method = static::fromReflection($originalMethod); $initializerName = $initializerProperty->getName(); $valueHolderName = $valueHolderProperty->getName(); $parameters = $originalMethod->getParameters(); $methodName = $originalMethod->getName(); $initializerParams = array(); $forwardedParams = array(); foreach ($parameters as $parameter) { $parameterName = $parameter->getName(); $initializerParams[] = var_export($parameterName, true) . ' => $' . $parameterName; $forwardedParams[] = '$' . $parameterName; } $method->setBody( '$this->' . $initializerName . ' && $this->' . $initializerName . '->__invoke($this->' . $valueHolderName . ', $this, ' . var_export($methodName, true) . ', array(' . implode(', ', $initializerParams) . '), $this->' . $initializerName . ");\n\n" . 'return $this->' . $valueHolderName . '->' . $methodName . '(' . implode(', ', $forwardedParams) . ');' ); $method->setDocblock('{@inheritDoc}'); return $method; } }