Revert "[DependencyInjection] backport perf optim"

This reverts commit c11535bd6b.

Conflicts:
	src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php
	src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services1-1.php
	src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services1.php
	src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services10.php
	src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services12.php
	src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services8.php
	src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9.php
	src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_compiled.php
This commit is contained in:
Nicolas Grekas 2014-12-04 21:13:58 +01:00
parent fcd8ff9b67
commit 375f83ece4
10 changed files with 179 additions and 54 deletions

View File

@ -767,7 +767,7 @@ $bagClass
class $class extends $baseClass class $class extends $baseClass
{ {
private \$parameters; private \$parameters;
private \$targetDirs; private \$targetDirs = array();
EOF; EOF;
} }
@ -779,8 +779,8 @@ EOF;
*/ */
private function addConstructor() private function addConstructor()
{ {
$parameters = $this->exportParameters($this->container->getParameterBag()->all());
$targetDirs = $this->exportTargetDirs(); $targetDirs = $this->exportTargetDirs();
$arguments = $this->container->getParameterBag()->all() ? 'new ParameterBag($this->getDefaultParameters())' : null;
$code = <<<EOF $code = <<<EOF
@ -789,9 +789,7 @@ EOF;
*/ */
public function __construct() public function __construct()
{{$targetDirs} {{$targetDirs}
\$this->parameters = $parameters; parent::__construct($arguments);
parent::__construct(new ParameterBag(\$this->parameters));
EOF; EOF;
@ -819,7 +817,6 @@ EOF;
*/ */
private function addFrozenConstructor() private function addFrozenConstructor()
{ {
$parameters = $this->exportParameters($this->container->getParameterBag()->all());
$targetDirs = $this->exportTargetDirs(); $targetDirs = $this->exportTargetDirs();
$code = <<<EOF $code = <<<EOF
@ -829,10 +826,17 @@ EOF;
*/ */
public function __construct() public function __construct()
{{$targetDirs} {{$targetDirs}
EOF;
if ($this->container->getParameterBag()->all()) {
$code .= "\n \$this->parameters = \$this->getDefaultParameters();\n";
}
$code .= <<<EOF
\$this->services = \$this->services =
\$this->scopedServices = \$this->scopedServices =
\$this->scopeStacks = array(); \$this->scopeStacks = array();
\$this->parameters = $parameters;
\$this->set('service_container', \$this); \$this->set('service_container', \$this);
@ -917,6 +921,8 @@ EOF;
return ''; return '';
} }
$parameters = $this->exportParameters($this->container->getParameterBag()->all());
$code = ''; $code = '';
if ($this->container->isFrozen()) { if ($this->container->isFrozen()) {
$code .= <<<EOF $code .= <<<EOF
@ -964,10 +970,23 @@ EOF;
return \$this->parameterBag; return \$this->parameterBag;
} }
EOF; EOF;
} }
$code .= <<<EOF
/**
* Gets the default parameters.
*
* @return array An array of the default parameters
*/
protected function getDefaultParameters()
{
return $parameters;
}
EOF;
return $code; return $code;
} }
@ -1357,11 +1376,10 @@ EOF;
$prefix = $matches[0][1] ? var_export(substr($value, 0, $matches[0][1]), true).'.' : ''; $prefix = $matches[0][1] ? var_export(substr($value, 0, $matches[0][1]), true).'.' : '';
$suffix = $matches[0][1] + strlen($matches[0][0]); $suffix = $matches[0][1] + strlen($matches[0][0]);
$suffix = isset($value[$suffix]) ? '.'.var_export(substr($value, $suffix), true) : ''; $suffix = isset($value[$suffix]) ? '.'.var_export(substr($value, $suffix), true) : '';
$dirname = '__DIR__';
if (0 < $dirname = 1 + $this->targetDirMaxMatches - count($matches)) { if (0 < $offset = 1 + $this->targetDirMaxMatches - count($matches)) {
$dirname = sprintf('$this->targetDirs[%d]', $dirname); $dirname = sprintf('$this->targetDirs[%d]', $offset);
} else {
$dirname = '__DIR__';
} }
if ($prefix || $suffix) { if ($prefix || $suffix) {

View File

@ -37,6 +37,21 @@ class PhpDumperTest extends \PHPUnit_Framework_TestCase
new PhpDumper($container); new PhpDumper($container);
} }
public function testDumpFrozenContainerWithNoParameter()
{
$container = new ContainerBuilder();
$container->setResourceTracking(false);
$container->register('foo', 'stdClass');
$container->compile();
$dumper = new PhpDumper($container);
$dumpedString = $dumper->dump();
$this->assertStringEqualsFile(self::$fixturesPath.'/php/services11.php', $dumpedString, '->dump() does not add getDefaultParameters() method call if container have no parameters.');
$this->assertNotRegexp("/function getDefaultParameters\(/", $dumpedString, '->dump() does not add getDefaultParameters() method definition.');
}
public function testDumpOptimizationString() public function testDumpOptimizationString()
{ {
$definition = new Definition(); $definition = new Definition();

View File

@ -17,17 +17,13 @@ use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
class Container extends AbstractContainer class Container extends AbstractContainer
{ {
private $parameters; private $parameters;
private $targetDirs; private $targetDirs = array();
/** /**
* Constructor. * Constructor.
*/ */
public function __construct() public function __construct()
{ {
$this->parameters = array( parent::__construct();
);
parent::__construct(new ParameterBag($this->parameters));
} }
} }

View File

@ -17,17 +17,13 @@ use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
class ProjectServiceContainer extends Container class ProjectServiceContainer extends Container
{ {
private $parameters; private $parameters;
private $targetDirs; private $targetDirs = array();
/** /**
* Constructor. * Constructor.
*/ */
public function __construct() public function __construct()
{ {
$this->parameters = array( parent::__construct();
);
parent::__construct(new ParameterBag($this->parameters));
} }
} }

View File

@ -17,20 +17,18 @@ use Symfony\Component\DependencyInjection\ParameterBag\FrozenParameterBag;
class ProjectServiceContainer extends Container class ProjectServiceContainer extends Container
{ {
private $parameters; private $parameters;
private $targetDirs; private $targetDirs = array();
/** /**
* Constructor. * Constructor.
*/ */
public function __construct() public function __construct()
{ {
$this->parameters = $this->getDefaultParameters();
$this->services = $this->services =
$this->scopedServices = $this->scopedServices =
$this->scopeStacks = array(); $this->scopeStacks = array();
$this->parameters = array(
'empty_value' => '',
'some_string' => '-',
);
$this->set('service_container', $this); $this->set('service_container', $this);
@ -99,4 +97,16 @@ class ProjectServiceContainer extends Container
return $this->parameterBag; return $this->parameterBag;
} }
/**
* Gets the default parameters.
*
* @return array An array of the default parameters
*/
protected function getDefaultParameters()
{
return array(
'empty_value' => '',
'some_string' => '-',
);
}
} }

View File

@ -0,0 +1,54 @@
<?php
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\DependencyInjection\Exception\InactiveScopeException;
use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
use Symfony\Component\DependencyInjection\Exception\LogicException;
use Symfony\Component\DependencyInjection\Exception\RuntimeException;
use Symfony\Component\DependencyInjection\ParameterBag\FrozenParameterBag;
/**
* ProjectServiceContainer
*
* This class has been auto-generated
* by the Symfony Dependency Injection Component.
*/
class ProjectServiceContainer extends Container
{
private $parameters;
private $targetDirs = array();
/**
* Constructor.
*/
public function __construct()
{
$this->services =
$this->scopedServices =
$this->scopeStacks = array();
$this->set('service_container', $this);
$this->scopes = array();
$this->scopeChildren = array();
$this->methodMap = array(
'foo' => 'getFooService',
);
$this->aliases = array();
}
/**
* Gets the 'foo' service.
*
* This service is shared.
* This method always returns the same instance of the service.
*
* @return \stdClass A stdClass instance.
*/
protected function getFooService()
{
return $this->services['foo'] = new \stdClass();
}
}

View File

@ -17,7 +17,7 @@ use Symfony\Component\DependencyInjection\ParameterBag\FrozenParameterBag;
class ProjectServiceContainer extends Container class ProjectServiceContainer extends Container
{ {
private $parameters; private $parameters;
private $targetDirs; private $targetDirs = array();
/** /**
* Constructor. * Constructor.
@ -28,15 +28,11 @@ class ProjectServiceContainer extends Container
for ($i = 1; $i <= 5; ++$i) { for ($i = 1; $i <= 5; ++$i) {
$this->targetDirs[$i] = $dir = dirname($dir); $this->targetDirs[$i] = $dir = dirname($dir);
} }
$this->parameters = $this->getDefaultParameters();
$this->services = $this->services =
$this->scopedServices = $this->scopedServices =
$this->scopeStacks = array(); $this->scopeStacks = array();
$this->parameters = array(
'foo' => ('wiz'.$this->targetDirs[1]),
'bar' => __DIR__,
'baz' => (__DIR__.'/PhpDumperTest.php'),
'buz' => $this->targetDirs[2],
);
$this->set('service_container', $this); $this->set('service_container', $this);
@ -105,4 +101,18 @@ class ProjectServiceContainer extends Container
return $this->parameterBag; return $this->parameterBag;
} }
/**
* Gets the default parameters.
*
* @return array An array of the default parameters
*/
protected function getDefaultParameters()
{
return array(
'foo' => ('wiz'.$this->targetDirs[1]),
'bar' => __DIR__,
'baz' => (__DIR__.'/PhpDumperTest.php'),
'buz' => $this->targetDirs[2],
);
}
} }

View File

@ -17,14 +17,24 @@ use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
class ProjectServiceContainer extends Container class ProjectServiceContainer extends Container
{ {
private $parameters; private $parameters;
private $targetDirs; private $targetDirs = array();
/** /**
* Constructor. * Constructor.
*/ */
public function __construct() public function __construct()
{ {
$this->parameters = array( parent::__construct(new ParameterBag($this->getDefaultParameters()));
}
/**
* Gets the default parameters.
*
* @return array An array of the default parameters
*/
protected function getDefaultParameters()
{
return array(
'foo' => '%baz%', 'foo' => '%baz%',
'baz' => 'bar', 'baz' => 'bar',
'bar' => 'foo is %%foo bar', 'bar' => 'foo is %%foo bar',
@ -40,7 +50,5 @@ class ProjectServiceContainer extends Container
7 => 'null', 7 => 'null',
), ),
); );
parent::__construct(new ParameterBag($this->parameters));
} }
} }

View File

@ -17,20 +17,14 @@ use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
class ProjectServiceContainer extends Container class ProjectServiceContainer extends Container
{ {
private $parameters; private $parameters;
private $targetDirs; private $targetDirs = array();
/** /**
* Constructor. * Constructor.
*/ */
public function __construct() public function __construct()
{ {
$this->parameters = array( parent::__construct(new ParameterBag($this->getDefaultParameters()));
'baz_class' => 'BazClass',
'foo_class' => 'FooClass',
'foo' => 'bar',
);
parent::__construct(new ParameterBag($this->parameters));
$this->methodMap = array( $this->methodMap = array(
'bar' => 'getBarService', 'bar' => 'getBarService',
'baz' => 'getBazService', 'baz' => 'getBazService',
@ -254,4 +248,18 @@ class ProjectServiceContainer extends Container
return $instance; return $instance;
} }
/**
* Gets the default parameters.
*
* @return array An array of the default parameters
*/
protected function getDefaultParameters()
{
return array(
'baz_class' => 'BazClass',
'foo_class' => 'FooClass',
'foo' => 'bar',
);
}
} }

View File

@ -17,21 +17,18 @@ use Symfony\Component\DependencyInjection\ParameterBag\FrozenParameterBag;
class ProjectServiceContainer extends Container class ProjectServiceContainer extends Container
{ {
private $parameters; private $parameters;
private $targetDirs; private $targetDirs = array();
/** /**
* Constructor. * Constructor.
*/ */
public function __construct() public function __construct()
{ {
$this->parameters = $this->getDefaultParameters();
$this->services = $this->services =
$this->scopedServices = $this->scopedServices =
$this->scopeStacks = array(); $this->scopeStacks = array();
$this->parameters = array(
'baz_class' => 'BazClass',
'foo_class' => 'FooClass',
'foo' => 'bar',
);
$this->set('service_container', $this); $this->set('service_container', $this);
@ -278,4 +275,17 @@ class ProjectServiceContainer extends Container
return $this->parameterBag; return $this->parameterBag;
} }
/**
* Gets the default parameters.
*
* @return array An array of the default parameters
*/
protected function getDefaultParameters()
{
return array(
'baz_class' => 'BazClass',
'foo_class' => 'FooClass',
'foo' => 'bar',
);
}
} }