Mercurial > hg > isophonics-drupal-site
comparison vendor/symfony/dependency-injection/Compiler/Compiler.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 1fec387a4317 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 | |
3 /* | |
4 * This file is part of the Symfony package. | |
5 * | |
6 * (c) Fabien Potencier <fabien@symfony.com> | |
7 * | |
8 * For the full copyright and license information, please view the LICENSE | |
9 * file that was distributed with this source code. | |
10 */ | |
11 | |
12 namespace Symfony\Component\DependencyInjection\Compiler; | |
13 | |
14 use Symfony\Component\DependencyInjection\ContainerBuilder; | |
15 use Symfony\Component\DependencyInjection\Exception\EnvParameterException; | |
16 | |
17 /** | |
18 * This class is used to remove circular dependencies between individual passes. | |
19 * | |
20 * @author Johannes M. Schmitt <schmittjoh@gmail.com> | |
21 */ | |
22 class Compiler | |
23 { | |
24 private $passConfig; | |
25 private $log = array(); | |
26 private $loggingFormatter; | |
27 private $serviceReferenceGraph; | |
28 | |
29 public function __construct() | |
30 { | |
31 $this->passConfig = new PassConfig(); | |
32 $this->serviceReferenceGraph = new ServiceReferenceGraph(); | |
33 $this->loggingFormatter = new LoggingFormatter(); | |
34 } | |
35 | |
36 /** | |
37 * Returns the PassConfig. | |
38 * | |
39 * @return PassConfig The PassConfig instance | |
40 */ | |
41 public function getPassConfig() | |
42 { | |
43 return $this->passConfig; | |
44 } | |
45 | |
46 /** | |
47 * Returns the ServiceReferenceGraph. | |
48 * | |
49 * @return ServiceReferenceGraph The ServiceReferenceGraph instance | |
50 */ | |
51 public function getServiceReferenceGraph() | |
52 { | |
53 return $this->serviceReferenceGraph; | |
54 } | |
55 | |
56 /** | |
57 * Returns the logging formatter which can be used by compilation passes. | |
58 * | |
59 * @return LoggingFormatter | |
60 */ | |
61 public function getLoggingFormatter() | |
62 { | |
63 return $this->loggingFormatter; | |
64 } | |
65 | |
66 /** | |
67 * Adds a pass to the PassConfig. | |
68 * | |
69 * @param CompilerPassInterface $pass A compiler pass | |
70 * @param string $type The type of the pass | |
71 * @param int $priority Used to sort the passes | |
72 */ | |
73 public function addPass(CompilerPassInterface $pass, $type = PassConfig::TYPE_BEFORE_OPTIMIZATION/*, $priority = 0*/) | |
74 { | |
75 if (func_num_args() >= 3) { | |
76 $priority = func_get_arg(2); | |
77 } else { | |
78 if (__CLASS__ !== get_class($this)) { | |
79 $r = new \ReflectionMethod($this, __FUNCTION__); | |
80 if (__CLASS__ !== $r->getDeclaringClass()->getName()) { | |
81 @trigger_error(sprintf('Method %s() will have a third `$priority = 0` argument in version 4.0. Not defining it is deprecated since 3.2.', __METHOD__), E_USER_DEPRECATED); | |
82 } | |
83 } | |
84 | |
85 $priority = 0; | |
86 } | |
87 | |
88 $this->passConfig->addPass($pass, $type, $priority); | |
89 } | |
90 | |
91 /** | |
92 * Adds a log message. | |
93 * | |
94 * @param string $string The log message | |
95 */ | |
96 public function addLogMessage($string) | |
97 { | |
98 $this->log[] = $string; | |
99 } | |
100 | |
101 /** | |
102 * Returns the log. | |
103 * | |
104 * @return array Log array | |
105 */ | |
106 public function getLog() | |
107 { | |
108 return $this->log; | |
109 } | |
110 | |
111 /** | |
112 * Run the Compiler and process all Passes. | |
113 * | |
114 * @param ContainerBuilder $container | |
115 */ | |
116 public function compile(ContainerBuilder $container) | |
117 { | |
118 try { | |
119 foreach ($this->passConfig->getPasses() as $pass) { | |
120 $pass->process($container); | |
121 } | |
122 } catch (\Exception $e) { | |
123 $usedEnvs = array(); | |
124 $prev = $e; | |
125 | |
126 do { | |
127 $msg = $prev->getMessage(); | |
128 | |
129 if ($msg !== $resolvedMsg = $container->resolveEnvPlaceholders($msg, null, $usedEnvs)) { | |
130 $r = new \ReflectionProperty($prev, 'message'); | |
131 $r->setAccessible(true); | |
132 $r->setValue($prev, $resolvedMsg); | |
133 } | |
134 } while ($prev = $prev->getPrevious()); | |
135 | |
136 if ($usedEnvs) { | |
137 $e = new EnvParameterException($usedEnvs, $e); | |
138 } | |
139 | |
140 throw $e; | |
141 } | |
142 } | |
143 } |