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 = array();
33 private $beforeOptimizationPasses = array();
34 private $beforeRemovingPasses = array();
35 private $optimizationPasses;
36 private $removingPasses;
38 public function __construct()
40 $this->mergePass = new MergeExtensionConfigurationPass();
42 $this->optimizationPasses = array(
43 new ExtensionCompilerPass(),
44 new ResolveDefinitionTemplatesPass(),
45 new DecoratorServicePass(),
46 new ResolveParameterPlaceHoldersPass(),
47 new CheckDefinitionValidityPass(),
48 new ResolveReferencesToAliasesPass(),
49 new ResolveInvalidReferencesPass(),
51 new AnalyzeServiceReferencesPass(true),
52 new CheckCircularReferencesPass(),
53 new CheckReferenceValidityPass(),
56 $this->removingPasses = array(
57 new RemovePrivateAliasesPass(),
58 new ReplaceAliasByActualDefinitionPass(),
59 new RemoveAbstractDefinitionsPass(),
60 new RepeatedPass(array(
61 new AnalyzeServiceReferencesPass(),
62 new InlineServiceDefinitionsPass(),
63 new AnalyzeServiceReferencesPass(),
64 new RemoveUnusedDefinitionsPass(),
66 new CheckExceptionOnInvalidReferenceBehaviorPass(),
71 * Returns all passes in order to be processed.
73 * @return array An array of all passes to process
75 public function getPasses()
78 array($this->mergePass),
79 $this->beforeOptimizationPasses,
80 $this->optimizationPasses,
81 $this->beforeRemovingPasses,
82 $this->removingPasses,
83 $this->afterRemovingPasses
90 * @param CompilerPassInterface $pass A Compiler pass
91 * @param string $type The pass type
93 * @throws InvalidArgumentException when a pass type doesn't exist
95 public function addPass(CompilerPassInterface $pass, $type = self::TYPE_BEFORE_OPTIMIZATION)
97 $property = $type.'Passes';
98 if (!isset($this->$property)) {
99 throw new InvalidArgumentException(sprintf('Invalid type "%s".', $type));
102 $this->{$property}[] = $pass;
106 * Gets all passes for the AfterRemoving pass.
108 * @return array An array of passes
110 public function getAfterRemovingPasses()
112 return $this->afterRemovingPasses;
116 * Gets all passes for the BeforeOptimization pass.
118 * @return array An array of passes
120 public function getBeforeOptimizationPasses()
122 return $this->beforeOptimizationPasses;
126 * Gets all passes for the BeforeRemoving pass.
128 * @return array An array of passes
130 public function getBeforeRemovingPasses()
132 return $this->beforeRemovingPasses;
136 * Gets all passes for the Optimization pass.
138 * @return array An array of passes
140 public function getOptimizationPasses()
142 return $this->optimizationPasses;
146 * Gets all passes for the Removing pass.
148 * @return array An array of passes
150 public function getRemovingPasses()
152 return $this->removingPasses;
156 * Gets the Merge pass.
158 * @return CompilerPassInterface The merge pass
160 public function getMergePass()
162 return $this->mergePass;
166 * Sets the Merge Pass.
168 * @param CompilerPassInterface $pass The merge pass
170 public function setMergePass(CompilerPassInterface $pass)
172 $this->mergePass = $pass;
176 * Sets the AfterRemoving passes.
178 * @param array $passes An array of passes
180 public function setAfterRemovingPasses(array $passes)
182 $this->afterRemovingPasses = $passes;
186 * Sets the BeforeOptimization passes.
188 * @param array $passes An array of passes
190 public function setBeforeOptimizationPasses(array $passes)
192 $this->beforeOptimizationPasses = $passes;
196 * Sets the BeforeRemoving passes.
198 * @param array $passes An array of passes
200 public function setBeforeRemovingPasses(array $passes)
202 $this->beforeRemovingPasses = $passes;
206 * Sets the Optimization passes.
208 * @param array $passes An array of passes
210 public function setOptimizationPasses(array $passes)
212 $this->optimizationPasses = $passes;
216 * Sets the Removing passes.
218 * @param array $passes An array of passes
220 public function setRemovingPasses(array $passes)
222 $this->removingPasses = $passes;