Pārlūkot izejas kodu

[DependencyInjection] made compiler lazy again since there are many temporary ContainerBuilder objects that don't use it

Kris Wallsmith 14 gadi atpakaļ
vecāks
revīzija
de6c353b40

+ 16 - 12
src/Symfony/Component/DependencyInjection/ContainerBuilder.php

@@ -38,18 +38,6 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
     protected $injectors        = array();
     protected $compiler;
 
-    /**
-     * Constructor.
-     *
-     * @param ParameterBagInterface $parameterBag
-     */
-    public function __construct(ParameterBagInterface $parameterBag = null)
-    {
-        parent::__construct($parameterBag);
-
-        $this->compiler = new Compiler();
-    }
-
     /**
      * Registers an extension.
      *
@@ -175,6 +163,10 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
      */
     public function addCompilerPass(CompilerPassInterface $pass, $type = PassConfig::TYPE_BEFORE_OPTIMIZATION)
     {
+        if (null === $this->compiler) {
+            $this->compiler = new Compiler();
+        }
+
         $this->compiler->addPass($pass, $type);
 
         $this->addObjectResource($pass);
@@ -187,6 +179,10 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
      */
     public function getCompilerPassConfig()
     {
+        if (null === $this->compiler) {
+            $this->compiler = new Compiler();
+        }
+
         return $this->compiler->getPassConfig();
     }
 
@@ -197,6 +193,10 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
      */
     public function getCompiler()
     {
+        if (null === $this->compiler) {
+            $this->compiler = new Compiler();
+        }
+
         return $this->compiler;
     }
 
@@ -391,6 +391,10 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
      */
     public function compile()
     {
+        if (null === $this->compiler) {
+            $this->compiler = new Compiler();
+        }
+
         foreach ($this->compiler->getPassConfig()->getPasses() as $pass) {
             $this->addObjectResource($pass);
         }