Tomas Votruba a23b777a9a Updated Rector to commit 3a96b9097d6fbc29085210f2d85dd5d95755ef31
3a96b9097d [DeadCode] Skip fluent return  on RemoveEmptyMethodCallRector (#521)
2021-07-27 11:16:44 +00:00

109 lines
3.5 KiB
PHP

<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace RectorPrefix20210727\Symfony\Component\DependencyInjection\Compiler;
use RectorPrefix20210727\Symfony\Component\DependencyInjection\ContainerBuilder;
use RectorPrefix20210727\Symfony\Component\DependencyInjection\Exception\EnvParameterException;
/**
* This class is used to remove circular dependencies between individual passes.
*
* @author Johannes M. Schmitt <schmittjoh@gmail.com>
*/
class Compiler
{
private $passConfig;
private $log = [];
private $serviceReferenceGraph;
public function __construct()
{
$this->passConfig = new \RectorPrefix20210727\Symfony\Component\DependencyInjection\Compiler\PassConfig();
$this->serviceReferenceGraph = new \RectorPrefix20210727\Symfony\Component\DependencyInjection\Compiler\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;
}
/**
* Adds a pass to the PassConfig.
* @param \Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface $pass
* @param string $type
* @param int $priority
*/
public function addPass($pass, $type = \RectorPrefix20210727\Symfony\Component\DependencyInjection\Compiler\PassConfig::TYPE_BEFORE_OPTIMIZATION, $priority = 0)
{
$this->passConfig->addPass($pass, $type, $priority);
}
/**
* @final
* @param \Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface $pass
* @param string $message
*/
public function log($pass, $message)
{
if (\strpos($message, "\n") !== \false) {
$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.
* @param \Symfony\Component\DependencyInjection\ContainerBuilder $container
*/
public function compile($container)
{
try {
foreach ($this->passConfig->getPasses() as $pass) {
$pass->process($container);
}
} catch (\Exception $e) {
$usedEnvs = [];
$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 \RectorPrefix20210727\Symfony\Component\DependencyInjection\Exception\EnvParameterException($usedEnvs, $e);
}
throw $e;
} finally {
$this->getServiceReferenceGraph()->clear();
}
}
}