public function build($methodName, array $interceptedMethods, $targetClassName)
{
if ($methodName !== '__construct') {
throw new Exception('The ' . __CLASS__ . ' can only build constructor interceptor code.', 1231789021);
}
$declaringClassName = $interceptedMethods[$methodName]['declaringClassName'];
$proxyMethod = $this->compiler->getProxyClass($targetClassName)->getConstructor();
if ($declaringClassName !== $targetClassName) {
$proxyMethod->setMethodParametersCode($this->buildMethodParametersCode($declaringClassName, $methodName, true));
}
$groupedAdvices = $interceptedMethods[$methodName]['groupedAdvices'];
$advicesCode = $this->buildAdvicesCode($groupedAdvices, $methodName, $targetClassName, $declaringClassName);
if ($methodName !== null) {
$proxyMethod->addPreParentCallCode('
if (isset($this->Flow_Aop_Proxy_methodIsInAdviceMode[\'' . $methodName . '\'])) {
');
$proxyMethod->addPostParentCallCode('
} else {
$this->Flow_Aop_Proxy_methodIsInAdviceMode[\'' . $methodName . '\'] = TRUE;
try {
' . $advicesCode . '
} catch (\\Exception $exception) {
unset($this->Flow_Aop_Proxy_methodIsInAdviceMode[\'' . $methodName . '\']);
throw $exception;
}
unset($this->Flow_Aop_Proxy_methodIsInAdviceMode[\'' . $methodName . '\']);
return;
}
');
}
}