File: //usr/share/php/ProxyManager/ProxyGenerator/RemoteObject/MethodGenerator/RemoteObjectMethod.php
<?php
declare(strict_types=1);
namespace ProxyManager\ProxyGenerator\RemoteObject\MethodGenerator;
use ProxyManager\Generator\MethodGenerator;
use ProxyManager\Generator\Util\ProxiedMethodReturnExpression;
use ReflectionClass;
use Zend\Code\Generator\PropertyGenerator;
use Zend\Code\Reflection\MethodReflection;
use function var_export;
/**
* Method decorator for remote objects
*/
class RemoteObjectMethod extends MethodGenerator
{
/**
*
* @return self|static
*/
public static function generateMethod(
MethodReflection $originalMethod,
PropertyGenerator $adapterProperty,
ReflectionClass $originalClass
) : self {
/** @var self $method */
$method = static::fromReflectionWithoutBodyAndDocBlock($originalMethod);
$method->setBody(
'$return = $this->' . $adapterProperty->getName()
. '->call(' . var_export($originalClass->getName(), true)
. ', ' . var_export($originalMethod->getName(), true) . ', \func_get_args());' . "\n\n"
. ProxiedMethodReturnExpression::generate('$return', $originalMethod)
);
return $method;
}
}