Skip to content

Commit 7af34e1

Browse files
committed
Merge branch '2.7' into 2.8
* 2.7: Permit empty suffix on Windows [Console][Table] fixed render when using multiple rowspans. add docblocks for Twig url and path function to improve ide completion check for circular refs caused by method calls [Serializer] fix upper camel case conversion (see #21399) [DI] Auto register extension configuration classes as a resource [Console] Updated phpdoc on return types
2 parents c26346f + 66af453 commit 7af34e1

File tree

10 files changed

+67
-22
lines changed

10 files changed

+67
-22
lines changed

Compiler/MergeExtensionConfigurationPass.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespace Symfony\Component\DependencyInjection\Compiler;
1313

1414
use Symfony\Component\DependencyInjection\ContainerBuilder;
15+
use Symfony\Component\DependencyInjection\Extension\ConfigurationExtensionInterface;
1516
use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
1617

1718
/**
@@ -47,6 +48,9 @@ public function process(ContainerBuilder $container)
4748
$tmpContainer = new ContainerBuilder($container->getParameterBag());
4849
$tmpContainer->setResourceTracking($container->isTrackingResources());
4950
$tmpContainer->addObjectResource($extension);
51+
if ($extension instanceof ConfigurationExtensionInterface && null !== $configuration = $extension->getConfiguration($config, $tmpContainer)) {
52+
$tmpContainer->addObjectResource($configuration);
53+
}
5054

5155
foreach ($exprLangProviders as $provider) {
5256
$tmpContainer->addExpressionLanguageProvider($provider);

Compiler/PassConfig.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ public function __construct()
6464
new RemoveUnusedDefinitionsPass(),
6565
)),
6666
new CheckExceptionOnInvalidReferenceBehaviorPass(),
67+
new CheckCircularReferencesPass(),
6768
);
6869
}
6970

Tests/Compiler/IntegrationTest.php

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,4 +113,30 @@ public function testProcessInlinesWhenThereAreMultipleReferencesButFromTheSameDe
113113
$this->assertFalse($container->hasDefinition('b'));
114114
$this->assertFalse($container->hasDefinition('c'), 'Service C was not inlined.');
115115
}
116+
117+
/**
118+
* @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException
119+
*/
120+
public function testCircularReferencesCausedByMethodCallsAreDetectedDuringCompilation()
121+
{
122+
$container = new ContainerBuilder();
123+
$container->setResourceTracking(false);
124+
125+
$container
126+
->register('foobar', '\stdClass')
127+
->addArgument(new Reference('foo'))
128+
;
129+
130+
$container
131+
->register('foo', '\stdClass')
132+
->addArgument(new Reference('bar'))
133+
;
134+
135+
$container
136+
->register('foo', '\stdClass')
137+
->addMethodCall('addFoobar', array(new Reference('foobar')))
138+
;
139+
140+
$container->compile();
141+
}
116142
}

Tests/Compiler/MergeExtensionConfigurationPassTest.php

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111

1212
namespace Symfony\Component\DependencyInjection\Tests\Compiler;
1313

14+
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
15+
use Symfony\Component\Config\Definition\ConfigurationInterface;
16+
use Symfony\Component\Config\Resource\FileResource;
1417
use Symfony\Component\DependencyInjection\Compiler\MergeExtensionConfigurationPass;
1518
use Symfony\Component\DependencyInjection\ContainerBuilder;
1619
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
@@ -48,4 +51,32 @@ public function testExpressionLanguageProviderForwarding()
4851

4952
$this->assertEquals(array($provider), $tmpProviders);
5053
}
54+
55+
public function testExtensionConfigurationIsTrackedByDefault()
56+
{
57+
$extension = $this->getMockBuilder('Symfony\\Component\\DependencyInjection\\Extension\\Extension')->getMock();
58+
$extension->expects($this->once())
59+
->method('getConfiguration')
60+
->will($this->returnValue(new FooConfiguration()));
61+
$extension->expects($this->any())
62+
->method('getAlias')
63+
->will($this->returnValue('foo'));
64+
65+
$container = new ContainerBuilder(new ParameterBag());
66+
$container->registerExtension($extension);
67+
$container->prependExtensionConfig('foo', array('bar' => true));
68+
69+
$pass = new MergeExtensionConfigurationPass();
70+
$pass->process($container);
71+
72+
$this->assertContains(new FileResource(__FILE__), $container->getResources(), '', false, false);
73+
}
74+
}
75+
76+
class FooConfiguration implements ConfigurationInterface
77+
{
78+
public function getConfigTreeBuilder()
79+
{
80+
return new TreeBuilder();
81+
}
5182
}

Tests/Fixtures/containers/container9.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@
6363
;
6464
$container
6565
->register('baz', 'Baz')
66-
->addMethodCall('setFoo', array(new Reference('foo_with_inline')))
6766
;
6867
$container
6968
->register('request', 'Request')

Tests/Fixtures/graphviz/services9.dot

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,5 @@ digraph sc {
3737
node_method_call1 -> node_foobaz [label="setBar()" style="dashed"];
3838
node_foo_with_inline -> node_inlined [label="setBar()" style="dashed"];
3939
node_inlined -> node_baz [label="setBaz()" style="dashed"];
40-
node_baz -> node_foo_with_inline [label="setFoo()" style="dashed"];
4140
node_configurator_service -> node_baz [label="setFoo()" style="dashed"];
4241
}

Tests/Fixtures/php/services9.php

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,7 @@ protected function getBarService()
8181
*/
8282
protected function getBazService()
8383
{
84-
$this->services['baz'] = $instance = new \Baz();
85-
86-
$instance->setFoo($this->get('foo_with_inline'));
87-
88-
return $instance;
84+
return $this->services['baz'] = new \Baz();
8985
}
9086

9187
/**

Tests/Fixtures/php/services9_compiled.php

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -100,11 +100,7 @@ protected function getBarService()
100100
*/
101101
protected function getBazService()
102102
{
103-
$this->services['baz'] = $instance = new \Baz();
104-
105-
$instance->setFoo($this->get('foo_with_inline'));
106-
107-
return $instance;
103+
return $this->services['baz'] = new \Baz();
108104
}
109105

110106
/**
@@ -245,12 +241,11 @@ protected function getFooBarService()
245241
protected function getFooWithInlineService()
246242
{
247243
$a = new \Bar();
248-
249-
$this->services['foo_with_inline'] = $instance = new \Foo();
250-
251244
$a->pub = 'pub';
252245
$a->setBaz($this->get('baz'));
253246

247+
$this->services['foo_with_inline'] = $instance = new \Foo();
248+
254249
$instance->setBar($a);
255250

256251
return $instance;

Tests/Fixtures/xml/services9.xml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,7 @@
7070
<argument type="service" id="baz"/>
7171
</call>
7272
</service>
73-
<service id="baz" class="Baz">
74-
<call method="setFoo">
75-
<argument type="service" id="foo_with_inline"/>
76-
</call>
77-
</service>
73+
<service id="baz" class="Baz"/>
7874
<service id="request" class="Request" synthetic="true"/>
7975
<service id="configurator_service" class="ConfClass" public="false">
8076
<call method="setFoo">

Tests/Fixtures/yaml/services9.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,6 @@ services:
5252

5353
baz:
5454
class: Baz
55-
calls:
56-
- [setFoo, ['@foo_with_inline']]
5755

5856
request:
5957
class: Request

0 commit comments

Comments
 (0)