* @license MIT */ class NullObjectGenerator implements ProxyGeneratorInterface { /** * {@inheritDoc} * * @throws InvalidProxiedClassException * @throws \Zend\Code\Generator\Exception\InvalidArgumentException */ public function generate(ReflectionClass $originalClass, ClassGenerator $classGenerator) { CanProxyAssertion::assertClassCanBeProxied($originalClass); $interfaces = [NullObjectInterface::class]; if ($originalClass->isInterface()) { $interfaces[] = $originalClass->getName(); } else { $classGenerator->setExtendedClass($originalClass->getName()); } $classGenerator->setImplementedInterfaces($interfaces); foreach (ProxiedMethodsFilter::getProxiedMethods($originalClass, []) as $method) { $classGenerator->addMethodFromGenerator( NullObjectMethodInterceptor::generateMethod( new MethodReflection($method->getDeclaringClass()->getName(), $method->getName()) ) ); } ClassGeneratorUtils::addMethodIfNotFinal( $originalClass, $classGenerator, new StaticProxyConstructor($originalClass) ); } }