PassConfig.php 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. <?php
  2. /*
  3. * This file is part of the Symfony package.
  4. *
  5. * (c) Fabien Potencier <fabien@symfony.com>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Symfony\Component\DependencyInjection\Compiler;
  11. use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
  12. /**
  13. * Compiler Pass Configuration.
  14. *
  15. * This class has a default configuration embedded.
  16. *
  17. * @author Johannes M. Schmitt <schmittjoh@gmail.com>
  18. */
  19. class PassConfig
  20. {
  21. const TYPE_AFTER_REMOVING = 'afterRemoving';
  22. const TYPE_BEFORE_OPTIMIZATION = 'beforeOptimization';
  23. const TYPE_BEFORE_REMOVING = 'beforeRemoving';
  24. const TYPE_OPTIMIZE = 'optimization';
  25. const TYPE_REMOVE = 'removing';
  26. private $mergePass;
  27. private $afterRemovingPasses = array();
  28. private $beforeOptimizationPasses = array();
  29. private $beforeRemovingPasses = array();
  30. private $optimizationPasses;
  31. private $removingPasses;
  32. /**
  33. * Constructor.
  34. */
  35. public function __construct()
  36. {
  37. $this->mergePass = new MergeExtensionConfigurationPass();
  38. $this->optimizationPasses = array(
  39. new ExtensionCompilerPass(),
  40. new ResolveDefinitionTemplatesPass(),
  41. new DecoratorServicePass(),
  42. new ResolveParameterPlaceHoldersPass(),
  43. new CheckDefinitionValidityPass(),
  44. new ResolveReferencesToAliasesPass(),
  45. new ResolveInvalidReferencesPass(),
  46. new AutowirePass(),
  47. new AnalyzeServiceReferencesPass(true),
  48. new CheckCircularReferencesPass(),
  49. new CheckReferenceValidityPass(),
  50. );
  51. $this->removingPasses = array(
  52. new RemovePrivateAliasesPass(),
  53. new RemoveAbstractDefinitionsPass(),
  54. new ReplaceAliasByActualDefinitionPass(),
  55. new RepeatedPass(array(
  56. new AnalyzeServiceReferencesPass(),
  57. new InlineServiceDefinitionsPass(),
  58. new AnalyzeServiceReferencesPass(),
  59. new RemoveUnusedDefinitionsPass(),
  60. )),
  61. new CheckExceptionOnInvalidReferenceBehaviorPass(),
  62. );
  63. }
  64. /**
  65. * Returns all passes in order to be processed.
  66. *
  67. * @return array An array of all passes to process
  68. */
  69. public function getPasses()
  70. {
  71. return array_merge(
  72. array($this->mergePass),
  73. $this->beforeOptimizationPasses,
  74. $this->optimizationPasses,
  75. $this->beforeRemovingPasses,
  76. $this->removingPasses,
  77. $this->afterRemovingPasses
  78. );
  79. }
  80. /**
  81. * Adds a pass.
  82. *
  83. * @param CompilerPassInterface $pass A Compiler pass
  84. * @param string $type The pass type
  85. *
  86. * @throws InvalidArgumentException when a pass type doesn't exist
  87. */
  88. public function addPass(CompilerPassInterface $pass, $type = self::TYPE_BEFORE_OPTIMIZATION)
  89. {
  90. $property = $type.'Passes';
  91. if (!isset($this->$property)) {
  92. throw new InvalidArgumentException(sprintf('Invalid type "%s".', $type));
  93. }
  94. $passes = &$this->$property;
  95. $passes[] = $pass;
  96. }
  97. /**
  98. * Gets all passes for the AfterRemoving pass.
  99. *
  100. * @return array An array of passes
  101. */
  102. public function getAfterRemovingPasses()
  103. {
  104. return $this->afterRemovingPasses;
  105. }
  106. /**
  107. * Gets all passes for the BeforeOptimization pass.
  108. *
  109. * @return array An array of passes
  110. */
  111. public function getBeforeOptimizationPasses()
  112. {
  113. return $this->beforeOptimizationPasses;
  114. }
  115. /**
  116. * Gets all passes for the BeforeRemoving pass.
  117. *
  118. * @return array An array of passes
  119. */
  120. public function getBeforeRemovingPasses()
  121. {
  122. return $this->beforeRemovingPasses;
  123. }
  124. /**
  125. * Gets all passes for the Optimization pass.
  126. *
  127. * @return array An array of passes
  128. */
  129. public function getOptimizationPasses()
  130. {
  131. return $this->optimizationPasses;
  132. }
  133. /**
  134. * Gets all passes for the Removing pass.
  135. *
  136. * @return array An array of passes
  137. */
  138. public function getRemovingPasses()
  139. {
  140. return $this->removingPasses;
  141. }
  142. /**
  143. * Gets all passes for the Merge pass.
  144. *
  145. * @return array An array of passes
  146. */
  147. public function getMergePass()
  148. {
  149. return $this->mergePass;
  150. }
  151. /**
  152. * Sets the Merge Pass.
  153. *
  154. * @param CompilerPassInterface $pass The merge pass
  155. */
  156. public function setMergePass(CompilerPassInterface $pass)
  157. {
  158. $this->mergePass = $pass;
  159. }
  160. /**
  161. * Sets the AfterRemoving passes.
  162. *
  163. * @param array $passes An array of passes
  164. */
  165. public function setAfterRemovingPasses(array $passes)
  166. {
  167. $this->afterRemovingPasses = $passes;
  168. }
  169. /**
  170. * Sets the BeforeOptimization passes.
  171. *
  172. * @param array $passes An array of passes
  173. */
  174. public function setBeforeOptimizationPasses(array $passes)
  175. {
  176. $this->beforeOptimizationPasses = $passes;
  177. }
  178. /**
  179. * Sets the BeforeRemoving passes.
  180. *
  181. * @param array $passes An array of passes
  182. */
  183. public function setBeforeRemovingPasses(array $passes)
  184. {
  185. $this->beforeRemovingPasses = $passes;
  186. }
  187. /**
  188. * Sets the Optimization passes.
  189. *
  190. * @param array $passes An array of passes
  191. */
  192. public function setOptimizationPasses(array $passes)
  193. {
  194. $this->optimizationPasses = $passes;
  195. }
  196. /**
  197. * Sets the Removing passes.
  198. *
  199. * @param array $passes An array of passes
  200. */
  201. public function setRemovingPasses(array $passes)
  202. {
  203. $this->removingPasses = $passes;
  204. }
  205. }