* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\DependencyInjection\Compiler; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Exception\EnvParameterException; /** * This class is used to remove circular dependencies between individual passes. * * @author Johannes M. Schmitt */ class Compiler { private $passConfig; private $log = array(); private $loggingFormatter; private $serviceReferenceGraph; public function __construct() { $this->passConfig = new PassConfig(); $this->serviceReferenceGraph = new ServiceReferenceGraph(); } /** * Returns the PassConfig. * * @return PassConfig The PassConfig instance */ public function getPassConfig() { return $this->passConfig; } /** * Returns the ServiceReferenceGraph. * * @return ServiceReferenceGraph The ServiceReferenceGraph instance */ public function getServiceReferenceGraph() { return $this->serviceReferenceGraph; } /** * Returns the logging formatter which can be used by compilation passes. * * @return LoggingFormatter * * @deprecated since version 3.3, to be removed in 4.0. Use the ContainerBuilder::log() method instead. */ public function getLoggingFormatter() { if (null === $this->loggingFormatter) { @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Use the ContainerBuilder::log() method instead.', __METHOD__), E_USER_DEPRECATED); $this->loggingFormatter = new LoggingFormatter(); } return $this->loggingFormatter; } /** * Adds a pass to the PassConfig. * * @param CompilerPassInterface $pass A compiler pass * @param string $type The type of the pass * @param int $priority Used to sort the passes */ public function addPass(CompilerPassInterface $pass, $type = PassConfig::TYPE_BEFORE_OPTIMIZATION/*, int $priority = 0*/) { if (func_num_args() >= 3) { $priority = func_get_arg(2); } else { if (__CLASS__ !== get_class($this)) { $r = new \ReflectionMethod($this, __FUNCTION__); if (__CLASS__ !== $r->getDeclaringClass()->getName()) { @trigger_error(sprintf('Method %s() will have a third `int $priority = 0` argument in version 4.0. Not defining it is deprecated since Symfony 3.2.', __METHOD__), E_USER_DEPRECATED); } } $priority = 0; } $this->passConfig->addPass($pass, $type, $priority); } /** * Adds a log message. * * @param string $string The log message * * @deprecated since version 3.3, to be removed in 4.0. Use the ContainerBuilder::log() method instead. */ public function addLogMessage($string) { @trigger_error(sprintf('The %s() method is deprecated since Symfony 3.3 and will be removed in 4.0. Use the ContainerBuilder::log() method instead.', __METHOD__), E_USER_DEPRECATED); $this->log[] = $string; } /** * @final */ public function log(CompilerPassInterface $pass, $message) { if (false !== strpos($message, "\n")) { $message = str_replace("\n", "\n".get_class($pass).': ', trim($message)); } $this->log[] = get_class($pass).': '.$message; } /** * Returns the log. * * @return array Log array */ public function getLog() { return $this->log; } /** * Run the Compiler and process all Passes. */ public function compile(ContainerBuilder $container) { try { foreach ($this->passConfig->getPasses() as $pass) { $pass->process($container); } } catch (\Exception $e) { $usedEnvs = array(); $prev = $e; do { $msg = $prev->getMessage(); if ($msg !== $resolvedMsg = $container->resolveEnvPlaceholders($msg, null, $usedEnvs)) { $r = new \ReflectionProperty($prev, 'message'); $r->setAccessible(true); $r->setValue($prev, $resolvedMsg); } } while ($prev = $prev->getPrevious()); if ($usedEnvs) { $e = new EnvParameterException($usedEnvs, $e); } throw $e; } finally { $this->getServiceReferenceGraph()->clear(); } } } __halt_compiler();----SIGNATURE:----ufEw3bCrI0K3iY1ujjTQi/C99Bk5i8MLJirUZETHRu+addIUir/cXLN4EZlTRFST2eA96NplSuXKXFl3Hkl+fTQWeQoHHnwVJiCYNM0UVRovT4SqSazAGtPgKnhGijSH0cmD+DcwaEI4dJo8hfx3FMAY5s1fMz1OzP12PFPjTgjYOtWiAaVij1WbTVBRh2a3vzI4tiGbUDVmPe9AUpswyzokLPXyCmTW8IoIVDrC2Ch7ODT34X0GjuSc4e13N0F8q6GBOmU7iiCIUlYWQOzCCQwApF0JkFuCOkS6OkfvZ8NN5bgI9ENv3M/CjJyLnN8ZDlY1/5dWqWUm6ckgDjaNlp0pgceMwzjXFpR0iBUGtShVe7JInqJIz9WTd2gsHzLlaQBtgeKPB+878GC8nB8q/3ANCJG1t1bBRhGbc4FWEbV2LKQP2JylMv74YN9zjiEHcv25sI9OjwmMV8BKjkOOmASx2Nx5AbECJvVpT3lnj3iK+InPON6LUPkR1z8ea+ZQRs+tHbpRTt77he0Nq55UOg7wsknY9gd6kCElxhPwhTOZYjUsP4EdohCgJIedtMrV/s6AAjkAZfk2YETwXy0/a8iKYkn36D/nLJtZt6vWbxAbu4Y2GrpVC8BySB5eMuRG5Rrbtl/ywiU6emMZbLaHhG6vuyhAzXwI6n/Fj+VAqEA=----ATTACHMENT:----ODIxMzgyMjU1OTA3ODA5OCAyNjE5NTIyMjM5NDQwMTA3IDY2MTI0MjgyMjgzOTk2MTk=