4 * This file is part of the Symfony package.
6 * (c) Fabien Potencier <fabien@symfony.com>
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
12 namespace Symfony\Component\DependencyInjection\Compiler
;
14 use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException
;
17 * Compiler Pass Configuration.
19 * This class has a default configuration embedded.
21 * @author Johannes M. Schmitt <schmittjoh@gmail.com>
25 const TYPE_AFTER_REMOVING
= 'afterRemoving';
26 const TYPE_BEFORE_OPTIMIZATION
= 'beforeOptimization';
27 const TYPE_BEFORE_REMOVING
= 'beforeRemoving';
28 const TYPE_OPTIMIZE
= 'optimization';
29 const TYPE_REMOVE
= 'removing';
32 private $afterRemovingPasses;
33 private $beforeOptimizationPasses;
34 private $beforeRemovingPasses;
35 private $optimizationPasses;
36 private $removingPasses;
38 public function __construct()
40 $this->mergePass
= new MergeExtensionConfigurationPass();
42 $this->afterRemovingPasses
= array();
43 $this->beforeOptimizationPasses
= array();
44 $this->beforeRemovingPasses
= array();
46 $this->optimizationPasses
= array(
47 new ResolveDefinitionTemplatesPass(),
48 new ResolveParameterPlaceHoldersPass(),
49 new CheckDefinitionValidityPass(),
50 new ResolveReferencesToAliasesPass(),
51 new ResolveInvalidReferencesPass(),
52 new AnalyzeServiceReferencesPass(true),
53 new CheckCircularReferencesPass(),
54 new CheckReferenceValidityPass(),
57 $this->removingPasses
= array(
58 new RemovePrivateAliasesPass(),
59 new ReplaceAliasByActualDefinitionPass(),
60 new RemoveAbstractDefinitionsPass(),
61 new RepeatedPass(array(
62 new AnalyzeServiceReferencesPass(),
63 new InlineServiceDefinitionsPass(),
64 new AnalyzeServiceReferencesPass(),
65 new RemoveUnusedDefinitionsPass(),
67 new CheckExceptionOnInvalidReferenceBehaviorPass(),
72 * Returns all passes in order to be processed.
74 * @return array An array of all passes to process
76 public function getPasses()
79 array($this->mergePass
),
80 $this->beforeOptimizationPasses
,
81 $this->optimizationPasses
,
82 $this->beforeRemovingPasses
,
83 $this->removingPasses
,
84 $this->afterRemovingPasses
91 * @param CompilerPassInterface $pass A Compiler pass
92 * @param string $type The pass type
94 * @throws InvalidArgumentException when a pass type doesn't exist
96 public function addPass(CompilerPassInterface
$pass, $type = self
::TYPE_BEFORE_OPTIMIZATION
)
98 $property = $type.'Passes';
99 if (!isset($this->$property)) {
100 throw new InvalidArgumentException(sprintf('Invalid type "%s".', $type));
103 $this->{$property}[] = $pass;
107 * Gets all passes for the AfterRemoving pass.
109 * @return array An array of passes
111 public function getAfterRemovingPasses()
113 return $this->afterRemovingPasses
;
117 * Gets all passes for the BeforeOptimization pass.
119 * @return array An array of passes
121 public function getBeforeOptimizationPasses()
123 return $this->beforeOptimizationPasses
;
127 * Gets all passes for the BeforeRemoving pass.
129 * @return array An array of passes
131 public function getBeforeRemovingPasses()
133 return $this->beforeRemovingPasses
;
137 * Gets all passes for the Optimization pass.
139 * @return array An array of passes
141 public function getOptimizationPasses()
143 return $this->optimizationPasses
;
147 * Gets all passes for the Removing pass.
149 * @return array An array of passes
151 public function getRemovingPasses()
153 return $this->removingPasses
;
157 * Gets all passes for the Merge pass.
159 * @return array An array of passes
161 public function getMergePass()
163 return $this->mergePass
;
167 * Sets the Merge Pass.
169 * @param CompilerPassInterface $pass The merge pass
171 public function setMergePass(CompilerPassInterface
$pass)
173 $this->mergePass
= $pass;
177 * Sets the AfterRemoving passes.
179 * @param array $passes An array of passes
181 public function setAfterRemovingPasses(array $passes)
183 $this->afterRemovingPasses
= $passes;
187 * Sets the BeforeOptimization passes.
189 * @param array $passes An array of passes
191 public function setBeforeOptimizationPasses(array $passes)
193 $this->beforeOptimizationPasses
= $passes;
197 * Sets the BeforeRemoving passes.
199 * @param array $passes An array of passes
201 public function setBeforeRemovingPasses(array $passes)
203 $this->beforeRemovingPasses
= $passes;
207 * Sets the Optimization passes.
209 * @param array $passes An array of passes
211 public function setOptimizationPasses(array $passes)
213 $this->optimizationPasses
= $passes;
217 * Sets the Removing passes.
219 * @param array $passes An array of passes
221 public function setRemovingPasses(array $passes)
223 $this->removingPasses
= $passes;