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
;
165 public function setMergePass(CompilerPassInterface
$pass)
167 $this->mergePass
= $pass;
171 * Sets the AfterRemoving passes.
173 * @param array $passes An array of passes
175 public function setAfterRemovingPasses(array $passes)
177 $this->afterRemovingPasses
= $passes;
181 * Sets the BeforeOptimization passes.
183 * @param array $passes An array of passes
185 public function setBeforeOptimizationPasses(array $passes)
187 $this->beforeOptimizationPasses
= $passes;
191 * Sets the BeforeRemoving passes.
193 * @param array $passes An array of passes
195 public function setBeforeRemovingPasses(array $passes)
197 $this->beforeRemovingPasses
= $passes;
201 * Sets the Optimization passes.
203 * @param array $passes An array of passes
205 public function setOptimizationPasses(array $passes)
207 $this->optimizationPasses
= $passes;
211 * Sets the Removing passes.
213 * @param array $passes An array of passes
215 public function setRemovingPasses(array $passes)
217 $this->removingPasses
= $passes;