* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\DependencyInjection\Compiler; use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; /** * Compiler Pass Configuration. * * This class has a default configuration embedded. * * @author Johannes M. Schmitt */ class PassConfig { const TYPE_AFTER_REMOVING = 'afterRemoving'; const TYPE_BEFORE_OPTIMIZATION = 'beforeOptimization'; const TYPE_BEFORE_REMOVING = 'beforeRemoving'; const TYPE_OPTIMIZE = 'optimization'; const TYPE_REMOVE = 'removing'; private $mergePass; private $afterRemovingPasses = array(); private $beforeOptimizationPasses = array(); private $beforeRemovingPasses = array(); private $optimizationPasses; private $removingPasses; public function __construct() { $this->mergePass = new MergeExtensionConfigurationPass(); $this->beforeOptimizationPasses = array( 100 => array( $resolveClassPass = new ResolveClassPass(), new ResolveInstanceofConditionalsPass(), new RegisterEnvVarProcessorsPass(), ), -1000 => array(new ExtensionCompilerPass()), ); $this->optimizationPasses = array(array( new ResolveChildDefinitionsPass(), new ServiceLocatorTagPass(), new DecoratorServicePass(), new ResolveParameterPlaceHoldersPass(false), new ResolveFactoryClassPass(), new FactoryReturnTypePass($resolveClassPass), new CheckDefinitionValidityPass(), new RegisterServiceSubscribersPass(), new ResolveNamedArgumentsPass(), new AutowireRequiredMethodsPass(), new ResolveBindingsPass(), new AutowirePass(false), new ResolveTaggedIteratorArgumentPass(), new ResolveServiceSubscribersPass(), new ResolveReferencesToAliasesPass(), new ResolveInvalidReferencesPass(), new AnalyzeServiceReferencesPass(true), new CheckCircularReferencesPass(), new CheckReferenceValidityPass(), new CheckArgumentsValidityPass(false), )); $this->beforeRemovingPasses = array( -100 => array( new ResolvePrivatesPass(), ), ); $this->removingPasses = array(array( new RemovePrivateAliasesPass(), new ReplaceAliasByActualDefinitionPass(), new RemoveAbstractDefinitionsPass(), new RepeatedPass(array( new AnalyzeServiceReferencesPass(), new InlineServiceDefinitionsPass(), new AnalyzeServiceReferencesPass(), new RemoveUnusedDefinitionsPass(), )), new DefinitionErrorExceptionPass(), new CheckExceptionOnInvalidReferenceBehaviorPass(), new ResolveHotPathPass(), )); } /** * Returns all passes in order to be processed. * * @return CompilerPassInterface[] */ public function getPasses() { return array_merge( array($this->mergePass), $this->getBeforeOptimizationPasses(), $this->getOptimizationPasses(), $this->getBeforeRemovingPasses(), $this->getRemovingPasses(), $this->getAfterRemovingPasses() ); } /** * Adds a pass. * * @param CompilerPassInterface $pass A Compiler pass * @param string $type The pass type * @param int $priority Used to sort the passes * * @throws InvalidArgumentException when a pass type doesn't exist */ public function addPass(CompilerPassInterface $pass, $type = self::TYPE_BEFORE_OPTIMIZATION/*, int $priority = 0*/) { if (func_num_args() >= 3) { $priority = func_get_arg(2); } else { if (__CLASS__ !== get_class($this)) { $r = new \ReflectionMethod($this, __FUNCTION__); if (__CLASS__ !== $r->getDeclaringClass()->getName()) { @trigger_error(sprintf('Method %s() will have a third `int $priority = 0` argument in version 4.0. Not defining it is deprecated since Symfony 3.2.', __METHOD__), E_USER_DEPRECATED); } } $priority = 0; } $property = $type.'Passes'; if (!isset($this->$property)) { throw new InvalidArgumentException(sprintf('Invalid type "%s".', $type)); } $passes = &$this->$property; if (!isset($passes[$priority])) { $passes[$priority] = array(); } $passes[$priority][] = $pass; } /** * Gets all passes for the AfterRemoving pass. * * @return CompilerPassInterface[] */ public function getAfterRemovingPasses() { return $this->sortPasses($this->afterRemovingPasses); } /** * Gets all passes for the BeforeOptimization pass. * * @return CompilerPassInterface[] */ public function getBeforeOptimizationPasses() { return $this->sortPasses($this->beforeOptimizationPasses); } /** * Gets all passes for the BeforeRemoving pass. * * @return CompilerPassInterface[] */ public function getBeforeRemovingPasses() { return $this->sortPasses($this->beforeRemovingPasses); } /** * Gets all passes for the Optimization pass. * * @return CompilerPassInterface[] */ public function getOptimizationPasses() { return $this->sortPasses($this->optimizationPasses); } /** * Gets all passes for the Removing pass. * * @return CompilerPassInterface[] */ public function getRemovingPasses() { return $this->sortPasses($this->removingPasses); } /** * Gets the Merge pass. * * @return CompilerPassInterface */ public function getMergePass() { return $this->mergePass; } public function setMergePass(CompilerPassInterface $pass) { $this->mergePass = $pass; } /** * Sets the AfterRemoving passes. * * @param CompilerPassInterface[] $passes */ public function setAfterRemovingPasses(array $passes) { $this->afterRemovingPasses = array($passes); } /** * Sets the BeforeOptimization passes. * * @param CompilerPassInterface[] $passes */ public function setBeforeOptimizationPasses(array $passes) { $this->beforeOptimizationPasses = array($passes); } /** * Sets the BeforeRemoving passes. * * @param CompilerPassInterface[] $passes */ public function setBeforeRemovingPasses(array $passes) { $this->beforeRemovingPasses = array($passes); } /** * Sets the Optimization passes. * * @param CompilerPassInterface[] $passes */ public function setOptimizationPasses(array $passes) { $this->optimizationPasses = array($passes); } /** * Sets the Removing passes. * * @param CompilerPassInterface[] $passes */ public function setRemovingPasses(array $passes) { $this->removingPasses = array($passes); } /** * Sort passes by priority. * * @param array $passes CompilerPassInterface instances with their priority as key * * @return CompilerPassInterface[] */ private function sortPasses(array $passes) { if (0 === count($passes)) { return array(); } krsort($passes); // Flatten the array return call_user_func_array('array_merge', $passes); } } __halt_compiler();----SIGNATURE:----kY64+TUTCpODxqrzXzTHhkRladY1Cx1de3Sh7IwaVEAtdvhEGpQvYvCEE3j7+awhkX0+QCCMMhlPegECjKPoYEO1tim8o4ckEjESecD3ojaILrX4a6ak2a3M7dKF3hh5CwGKsCW6Zr1H1KLzAD24S+IQ17fGxSVzdiInF0FnIDO6JaKPD3ABTJLgM5i69KidgMVAS3eBGzUMnaIdSHBeR///HHAx02ki325BY9SJw5wvKS6rbWo/TgwdVKxsEL87xZnQczrlBwUWVtLWEyYzoNACNGWgI/1HWJDKRSvIBumgMovCGer8D3IJOZ8qmoJhHe7sp3efvRzkM2S6pM9hMlFuFEdM2Ka1rsK9LE5a+HbZ0vwnyU+qmIyQ/aYGBKh/Caid3Ul7xskA7LB4k4GgPKknfpYqdeJWq9o0nRsuoy11AJz1IeED1RiKOxcA4sd3OQ8pv9i3rcObPn37GnXJRrZ1sztL6qDpYCT6kBOynlzn+uyS3y7sA3YgX77ASrU6f0qj+/+hUOI5QTxtZT7BPyKdrba1/WwGM+KW2+e1SKHvAk0rgf9M23mQIW3YuwJhNirnqbzClTUBN4XXCeoWcQ0F6pm1tnyFUhOj8gUpT2HODvqCEJmpYMLfH9dvrqUVIUA65+RVLgfw8Wpl2ctIeXifulBITMIpgN0B8uM64eI=----ATTACHMENT:----ODY4NjQ5MjEwMTEyOTM5MyA3ODI2MzU5NzM3NzM2NDgwIDkwMDA4NTYzNjc1MjQwNzA=