/**
  * Generate a proxy from a class name
  *
  * @param string  $className
  * @param mixed[] $proxyOptions
  *
  * @return string proxy class name
  */
 protected function generateProxy($className, array $proxyOptions = [])
 {
     if (isset($this->checkedClasses[$className])) {
         return $this->checkedClasses[$className];
     }
     $proxyParameters = ['className' => $className, 'factory' => get_class($this), 'proxyManagerVersion' => Version::VERSION];
     $proxyClassName = $this->configuration->getClassNameInflector()->getProxyClassName($className, $proxyParameters);
     if (!class_exists($proxyClassName)) {
         $this->generateProxyClass($proxyClassName, $className, $proxyParameters, $proxyOptions);
     }
     $this->configuration->getSignatureChecker()->checkSignature(new ReflectionClass($proxyClassName), $proxyParameters);
     return $this->checkedClasses[$className] = $proxyClassName;
 }
 private function generateProxyForSuperClass(ReflectionClass $class, ReflectionClass $superClass)
 {
     $cacheKey = $this->getSurrogateClassName($class, $superClass);
     if (isset($this->checkedClasses[$cacheKey])) {
         return $this->checkedClasses[$cacheKey];
     }
     $proxyParameters = ['cacheKey' => $cacheKey, 'factory' => get_class($this), 'proxyManagerVersion' => Version::VERSION];
     $proxyClassName = $this->configuration->getClassNameInflector()->getProxyClassName($cacheKey, $proxyParameters);
     if (!class_exists($proxyClassName)) {
         $baseClass = $this->getBaseClass($class, $superClass);
         $this->generateProxyClass($proxyClassName, $baseClass, $superClass, $proxyParameters);
     }
     $this->configuration->getSignatureChecker()->checkSignature(new ReflectionClass($proxyClassName), $proxyParameters);
     return $this->checkedClasses[$cacheKey] = $proxyClassName;
 }
 /**
  * @covers \ProxyManager\Configuration::getSignatureChecker
  * @covers \ProxyManager\Configuration::setSignatureChecker
  */
 public function testSetGetSignatureChecker()
 {
     $this->assertInstanceOf('ProxyManager\\Signature\\SignatureCheckerInterface', $this->configuration->getSignatureChecker());
     /* @var $signatureChecker \ProxyManager\Signature\SignatureCheckerInterface */
     $signatureChecker = $this->getMock('ProxyManager\\Signature\\SignatureCheckerInterface');
     $this->configuration->setSignatureChecker($signatureChecker);
     $this->assertSame($signatureChecker, $this->configuration->getSignatureChecker());
 }