private function patchService($serviceId, Code\ClassType $advisedClass, Code\PhpNamespace $cg, $constructorInject = FALSE)
{
static $publicSetup;
if ($publicSetup === NULL) {
$refl = new Nette\Reflection\Property('Nette\\DI\\ServiceDefinition', 'setup');
$publicSetup = $refl->isPublic();
}
$def = $this->getContainerBuilder()->getDefinition($serviceId);
if ($def->getFactory()) {
$def->setFactory(new Nette\DI\Statement($cg->getName() . '\\' . $advisedClass->getName()));
} else {
$def->setFactory($cg->getName() . '\\' . $advisedClass->getName());
}
if (!$constructorInject) {
$statement = new Nette\DI\Statement(AdvisedClassType::CG_INJECT_METHOD, ['@Nette\\DI\\Container']);
if ($publicSetup) {
array_unshift($def->setup, $statement);
} else {
$setup = $def->getSetup();
array_unshift($setup, $statement);
$def->setSetup($setup);
}
}
}