/**
  * @covers \ProxyManager\ProxyGenerator\RemoteObject\MethodGenerator\RemoteObjectMethod
  */
 public function testBodyStructureWithoutParameters()
 {
     $adapter = $this->getMock('Zend\\Code\\Generator\\PropertyGenerator');
     $adapter->expects($this->any())->method('getName')->will($this->returnValue('adapter'));
     $reflectionMethod = new MethodReflection(__CLASS__, 'testBodyStructureWithoutParameters');
     $method = RemoteObjectMethod::generateMethod($reflectionMethod, $adapter, new ReflectionClass('Zend\\Code\\Generator\\PropertyGenerator'));
     $this->assertSame('testBodyStructureWithoutParameters', $method->getName());
     $this->assertCount(0, $method->getParameters());
     $this->assertSame('$return = $this->adapter->call(\'Zend\\\\Code\\\\Generator\\\\PropertyGenerator\', ' . '\'testBodyStructureWithoutParameters\', array());' . "\n\nreturn \$return;", $method->getBody());
 }
 /**
  * {@inheritDoc}
  */
 public function generate(ReflectionClass $originalClass, ClassGenerator $classGenerator)
 {
     CanProxyAssertion::assertClassCanBeProxied($originalClass);
     $interfaces = [RemoteObjectInterface::class];
     if ($originalClass->isInterface()) {
         $interfaces[] = $originalClass->getName();
     } else {
         $classGenerator->setExtendedClass($originalClass->getName());
     }
     $classGenerator->setImplementedInterfaces($interfaces);
     $classGenerator->addPropertyFromGenerator($adapter = new AdapterProperty());
     array_map(function (MethodGenerator $generatedMethod) use($originalClass, $classGenerator) {
         ClassGeneratorUtils::addMethodIfNotFinal($originalClass, $classGenerator, $generatedMethod);
     }, array_merge(array_map(function (ReflectionMethod $method) use($adapter, $originalClass) : RemoteObjectMethod {
         return RemoteObjectMethod::generateMethod(new MethodReflection($method->getDeclaringClass()->getName(), $method->getName()), $adapter, $originalClass);
     }, ProxiedMethodsFilter::getProxiedMethods($originalClass, ['__get', '__set', '__isset', '__unset'])), [new StaticProxyConstructor($originalClass, $adapter), new MagicGet($originalClass, $adapter), new MagicSet($originalClass, $adapter), new MagicIsset($originalClass, $adapter), new MagicUnset($originalClass, $adapter)]));
 }
Пример #3
0
 /**
  * {@inheritDoc}
  */
 public function generate(ReflectionClass $originalClass, ClassGenerator $classGenerator)
 {
     $interfaces = array('ProxyManager\\Proxy\\RemoteObjectInterface');
     if ($originalClass->isInterface()) {
         $interfaces[] = $originalClass->getName();
     } else {
         $classGenerator->setExtendedClass($originalClass->getName());
     }
     $classGenerator->setImplementedInterfaces($interfaces);
     $classGenerator->addPropertyFromGenerator($adapter = new AdapterProperty());
     $methods = ProxiedMethodsFilter::getProxiedMethods($originalClass, array('__get', '__set', '__isset', '__unset'));
     foreach ($methods as $method) {
         $classGenerator->addMethodFromGenerator(RemoteObjectMethod::generateMethod(new MethodReflection($method->getDeclaringClass()->getName(), $method->getName()), $adapter, $originalClass));
     }
     $classGenerator->addMethodFromGenerator(new Constructor($originalClass, $adapter));
     $classGenerator->addMethodFromGenerator(new MagicGet($originalClass, $adapter));
     $classGenerator->addMethodFromGenerator(new MagicSet($originalClass, $adapter));
     $classGenerator->addMethodFromGenerator(new MagicIsset($originalClass, $adapter));
     $classGenerator->addMethodFromGenerator(new MagicUnset($originalClass, $adapter));
 }