2015-08-17 17:00:26 -07:00
< ? php
/*
* This file is part of the Symfony package .
*
* ( c ) Fabien Potencier < fabien @ symfony . com >
*
* 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 < schmittjoh @ gmail . com >
*/
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 -> optimizationPasses = array (
2015-10-08 11:40:12 -07:00
new ExtensionCompilerPass (),
2015-08-17 17:00:26 -07:00
new ResolveDefinitionTemplatesPass (),
new DecoratorServicePass (),
new ResolveParameterPlaceHoldersPass (),
new CheckDefinitionValidityPass (),
new ResolveReferencesToAliasesPass (),
new ResolveInvalidReferencesPass (),
2016-04-20 09:56:34 -07:00
new AutowirePass (),
2015-08-17 17:00:26 -07:00
new AnalyzeServiceReferencesPass ( true ),
new CheckCircularReferencesPass (),
new CheckReferenceValidityPass (),
);
$this -> removingPasses = array (
new RemovePrivateAliasesPass (),
new ReplaceAliasByActualDefinitionPass (),
2017-02-02 16:28:38 -08:00
new RemoveAbstractDefinitionsPass (),
2015-08-17 17:00:26 -07:00
new RepeatedPass ( array (
new AnalyzeServiceReferencesPass (),
new InlineServiceDefinitionsPass (),
new AnalyzeServiceReferencesPass (),
new RemoveUnusedDefinitionsPass (),
)),
new CheckExceptionOnInvalidReferenceBehaviorPass (),
);
}
/**
* Returns all passes in order to be processed .
*
* @ return array An array of all passes to process
*/
public function getPasses ()
{
return array_merge (
array ( $this -> mergePass ),
$this -> beforeOptimizationPasses ,
$this -> optimizationPasses ,
$this -> beforeRemovingPasses ,
$this -> removingPasses ,
$this -> afterRemovingPasses
);
}
/**
* Adds a pass .
*
* @ param CompilerPassInterface $pass A Compiler pass
* @ param string $type The pass type
*
* @ throws InvalidArgumentException when a pass type doesn ' t exist
*/
public function addPass ( CompilerPassInterface $pass , $type = self :: TYPE_BEFORE_OPTIMIZATION )
{
$property = $type . 'Passes' ;
if ( ! isset ( $this -> $property )) {
throw new InvalidArgumentException ( sprintf ( 'Invalid type "%s".' , $type ));
}
2017-02-02 16:28:38 -08:00
$this -> { $property }[] = $pass ;
2015-08-17 17:00:26 -07:00
}
/**
* Gets all passes for the AfterRemoving pass .
*
* @ return array An array of passes
*/
public function getAfterRemovingPasses ()
{
return $this -> afterRemovingPasses ;
}
/**
* Gets all passes for the BeforeOptimization pass .
*
* @ return array An array of passes
*/
public function getBeforeOptimizationPasses ()
{
return $this -> beforeOptimizationPasses ;
}
/**
* Gets all passes for the BeforeRemoving pass .
*
* @ return array An array of passes
*/
public function getBeforeRemovingPasses ()
{
return $this -> beforeRemovingPasses ;
}
/**
* Gets all passes for the Optimization pass .
*
* @ return array An array of passes
*/
public function getOptimizationPasses ()
{
return $this -> optimizationPasses ;
}
/**
* Gets all passes for the Removing pass .
*
* @ return array An array of passes
*/
public function getRemovingPasses ()
{
return $this -> removingPasses ;
}
/**
2017-02-02 16:28:38 -08:00
* Gets the Merge pass .
2015-08-17 17:00:26 -07:00
*
2017-02-02 16:28:38 -08:00
* @ return CompilerPassInterface The merge pass
2015-08-17 17:00:26 -07:00
*/
public function getMergePass ()
{
return $this -> mergePass ;
}
/**
* Sets the Merge Pass .
*
* @ param CompilerPassInterface $pass The merge pass
*/
public function setMergePass ( CompilerPassInterface $pass )
{
$this -> mergePass = $pass ;
}
/**
* Sets the AfterRemoving passes .
*
* @ param array $passes An array of passes
*/
public function setAfterRemovingPasses ( array $passes )
{
$this -> afterRemovingPasses = $passes ;
}
/**
* Sets the BeforeOptimization passes .
*
* @ param array $passes An array of passes
*/
public function setBeforeOptimizationPasses ( array $passes )
{
$this -> beforeOptimizationPasses = $passes ;
}
/**
* Sets the BeforeRemoving passes .
*
* @ param array $passes An array of passes
*/
public function setBeforeRemovingPasses ( array $passes )
{
$this -> beforeRemovingPasses = $passes ;
}
/**
* Sets the Optimization passes .
*
* @ param array $passes An array of passes
*/
public function setOptimizationPasses ( array $passes )
{
$this -> optimizationPasses = $passes ;
}
/**
* Sets the Removing passes .
*
* @ param array $passes An array of passes
*/
public function setRemovingPasses ( array $passes )
{
$this -> removingPasses = $passes ;
}
}